CursosEmpresasBlogLiveConfPrecios

Terminando de programar el juego

Clase 23 de 25 • Curso de PHP: Arreglos, Funciones y Estructuras de Control

Contenido del curso

Introducción

  • 1
    ¿Ya conoces los fundamentos de PHP?

    ¿Ya conoces los fundamentos de PHP?

    02:26 min

Arreglos

  • 2
    ¿Qué son los arreglos?

    ¿Qué son los arreglos?

    07:36 min
  • 3
    Arreglos asociativos

    Arreglos asociativos

    13:46 min
  • 4
    Manipulando arreglos

    Manipulando arreglos

    13:43 min
  • 5
    Reto: escuela de michis

    Reto: escuela de michis

    11:50 min

Condicionales

  • 6
    Aprende a tomar decisiones con if y else

    Aprende a tomar decisiones con if y else

    10:20 min
  • 7
    Cómo organizar tu código con switch

    Cómo organizar tu código con switch

    09:58 min
  • 8
    Reto: ¿puedo retirar mis donaciones de Twitch?

    Reto: ¿puedo retirar mis donaciones de Twitch?

    05:35 min

Bucles

  • 9
    Ciclo while

    Ciclo while

    11:37 min
  • 10
    ¿Do... While?

    ¿Do... While?

    07:08 min
  • 11
    Ciclo for

    Ciclo for

    10:17 min
  • 12
    Ciclo foreach

    Ciclo foreach

    13:57 min
  • 13
    Reto: ¿cuántos caminos hay para llegar al mismo punto?

    Reto: ¿cuántos caminos hay para llegar al mismo punto?

    21:13 min

Funciones

  • 14
    Aprende a reutilizar tu código: funciones

    Aprende a reutilizar tu código: funciones

    09:55 min
  • 15
    Parámetros en las funciones

    Parámetros en las funciones

    09:06 min
  • 16
    Profundicemos en los parámetros

    Profundicemos en los parámetros

    14:30 min
  • 17
    Uso de return

    Uso de return

    07:57 min
  • 18
    Operador de nave espacial

    Operador de nave espacial

    07:49 min
  • 19
    ¡Expande tu arsenal de funciones!

    ¡Expande tu arsenal de funciones!

    05:07 min
  • 20
    Reto: completa el código

    Reto: completa el código

    04:46 min

Proyecto: juego del ahorcado con PHP

  • 21
    ¡Hagamos un juego con PHP!

    ¡Hagamos un juego con PHP!

    12:01 min
  • 22
    Validando las letras de los usuarios

    Validando las letras de los usuarios

    10:54 min
  • 23
    Terminando de programar el juego

    Terminando de programar el juego

    Viendo ahora

Bonus: HTML con esteroides

  • 24
    Cómo interactúa PHP con HTML

    Cómo interactúa PHP con HTML

    08:13 min

Próximos pasos

  • 25
    Toma el Curso Práctico de PHP

    Toma el Curso Práctico de PHP

    02:35 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Comentarios

        Gabriel Ignacio China Cortez

        Gabriel Ignacio China Cortez

        student•
        hace 4 años

        Para los que no les funcione system("cls") pueden utilizar popen('cls', 'w');

          Victor Manuel Rodriguez

          Victor Manuel Rodriguez

          student•
          hace 3 años

          gracias por el aporte!!!

          Jorge Luis Rueda Marin

          Jorge Luis Rueda Marin

          student•
          hace 2 años

          Buen aporte, gracias.

        Kenneth Angulo L

        Kenneth Angulo L

        student•
        hace 3 años

        Queria compartirles el reto que me puse, correr el juego en el navegador: Aun tengo que superar algunos bugs, pero ahi vamos, se esta logrando. .

        juego-clase-23.png

          Yensi Reyes

          Yensi Reyes

          student•
          hace 3 años

          Que tal ya terminaste. Seria bueno ver como te quedo :)

          Jhon Carlos Romo Ramirez

          Jhon Carlos Romo Ramirez

          student•
          hace 2 años

          Llegó a terminar?

        Aka SinssChoss

        Aka SinssChoss

        student•
        hace 4 años

        Reto terminado

        Vistas

        Captura.PNG
        Captura1.PNG
        Captura3.PNG

        Código

        <?php function clear() { if (PHP_OS === "WINNT") system("cls"); else system("clear"); } /* Solo agrega palabras */ $lista_palabras = ["programador", "gato", "comida", "desprolijo", "pensamiento", "satisfacción", "dormir", "codear"]; // constantes define("MAX_INTENTOS", 3); // variables lógica $palabra = $lista_palabras[rand(0, count($lista_palabras) -1)]; // resto porque los arrays comienzan en cero $palabra = strtolower($palabra); // paso la palabra a minuscula para asegurar $size_palabra = strlen($palabra); $cadena_letras = str_pad("", 2*$size_palabra, "_ "); // variables jugador $vidas = 3; $letra; $gano = false; $econtro_letra = false; // clear(); do{ // inicio echo "\n\n\t¡Bienvenido al juego del ahorcado!\n\n\n"; // va a variar echo "VIDAS = $vidas" . "\n\n"; echo "\t\t" . $cadena_letras . "\n\n"; $letra = readline("Ingrese una letra: "); $letra = strtolower($letra); // aseguramos que sea minuscula // busca coincidencia de la letra con la palabra, si es asi lo remplaza for ($i=0; $i < strlen($palabra) ; $i++) { if( $letra == $palabra[$i]){ // multiplico x2 a la posición porque mi cadena es así "_ _ _ _ _ _ _ _" $cadena_letras[2*$i] = $letra; $econtro_letra = true; } } // si no hubo por lo menos una coincidencia disminuye la vida if($econtro_letra == false){ $vidas--; } $econtro_letra = false; // reiniciamos la variable // obtenemos la palabra encontrada, quitando espacios en blanco y guiones bajo $palabra_encontrada = preg_replace(array('/\s/', '/_/'), '', $cadena_letras); // termina el juego si econtro la palabra if($palabra == $palabra_encontrada){ $gano = true; break; } }while($vidas > 0 && $gano == false); echo "\n\n\n\n"; if($gano == true){ echo "\tFelicitaciones!!! 🏆😊, econtraste la palabra"; echo "\nPalabra mágica = " . $palabra; } else{ echo "\tLo siento 😥, intentalo otra vez!!!😉"; echo "\nPalabra mágica = " . $palabra; echo "\nEcontraste = " . $cadena_letras ; } echo "\n\nHecho por Keneth Lopez 💚\n\n\n"; ?>
          YEISON FERNANDO CASTAÑO UBILLUS

          YEISON FERNANDO CASTAÑO UBILLUS

          student•
          hace 4 años

          Gracias Keneth, excelente aporte

        José Fabián Beltrán Meza

        José Fabián Beltrán Meza

        student•
        hace 4 años

        Para aquellos que les de este mensaje de error al ejecutar el juego _ Fatal error: Uncaught Error: Call to undefined function str_contains()_ ,se debe a la versión del PHP. La solución es agregar un pequeño polyfill.

        if (!function_exists('str_contains')) { function str_contains(string $haystack, string $needle): bool { return '' === $needle || false !== strpos($haystack, $needle); } }
          Gabriel Puig

          Gabriel Puig

          student•
          hace 4 años

          Hola amigo.... ¿dónde se agrega eso? y ¿cómo?

          Luis Humberto Osorio Quiceno

          Luis Humberto Osorio Quiceno

          student•
          hace 4 años

          Un saludo. La funcion esta en PHP para la version 8.0 en adelante. Vi esa solucion antes, pero no me funcion. Toco instalar PHP 8.0.19

          y listo.

        Juan David Rueda Quiroga

        Juan David Rueda Quiroga

        student•
        hace 4 años

        es mejor poner siempre las llaves como por ejemplo en los if else, siento que para mi es una mejor práctica

          Kenneth Angulo L

          Kenneth Angulo L

          student•
          hace 3 años

          muy de acuerdo con el companero.

        Joel Dominguez Merino

        Joel Dominguez Merino

        student•
        hace 4 años

        Habra que implementar el muñequito pero de momento con el programa hecho en clase me pone feliz ver que la entendí la lógica del código solo que no sabia que existían la mayoría de funciones jaja Comparto el código como quedo (el de clase) .

        code.png

        Magdiel Linares

        Magdiel Linares

        student•
        hace 4 años

        Hola, lo hice un poco diferente, y en ingles, no agregue la personita pero si algunas validaciones. Nota: no se como hacer para que me salga mi codigo aqui en el aporte como un screenshot tan bonito :( ayuda!

        <code> <?php $word_bank = ["immutable","interface","identifier","time","symfony","controller", "entity"]; define("MAX_ATTEMPS", 6); while (true) { $word = $word_bank[rand(0, count($word_bank) - 1)]; $word_length = strlen($word); $attemps = MAX_ATTEMPS; echo "Welcome to the game!!!\n"; echo "The word you need to guess has " . $word_length . " letters" . " ..." . PHP_EOL; echo "Good luck!!!\n"; $game = str_pad("", $word_length, "_"); $discovered = false; do { echo "You have $attemps attemps available..." . PHP_EOL; echo $game . PHP_EOL .PHP_EOL; $letter = readline("Enter a letter:"); $letter = strtolower($letter); if (strlen($letter) == 1) { if (str_contains($game, $letter)) { echo "Try a new letter.\n"; cleanSreen(); continue; } } else { echo "Yo can enter just 1 letter at a time.\n"; cleanSreen(); continue; } if (str_contains($word, $letter)) { $offset = 0; while (($position = strpos($word, $letter, $offset)) !== false) { $game[$position] = $letter; $offset = $position + 1; } echo "Good!"; $discovered = ($game === $word); } else { $attemps--; echo "The letter is not in this word.\n"; } cleanSreen(); } while (($attemps > 0) && !$discovered); if ($discovered) { echo "Congratulations!!! the word is $game\n"; } else { echo "I'm sorry. Game over.\n"; echo "The word was $word.\n"; } $continuePlaying = readline("Do you want to continue playing? Y/N \n"); if (strtolower($continuePlaying) === 'n'){ echo "Good bye!"; cleanSreen(); break; } else{ cleanSreen(); } } function cleanSreen() { sleep(2); if (PHP_OS === "WINNT") { system("cls"); } else { system("clear"); } }
          kleber Aguilar

          kleber Aguilar

          student•
          hace 3 años

          Hola llege tarde pero si alguien mas ve esto debes tener una imagen de tu codigo y lo arrastras a la seccion de aportes aqui en Platzi y ya se genera saludos. 💚

        Benjamín Parra

        Benjamín Parra

        student•
        hace 4 años

        la función system("cls") no me funciona en window.. hay alguna otra forma?

        Uso windows 10 y VSCODE

          Jimmy Buriticá Londoño

          Jimmy Buriticá Londoño

          student•
          hace 4 años

          Estoy usando Windows 11 y clear también funciona, prueba usar:

          system('clear');
          Angel David Velasco Bonifaz

          Angel David Velasco Bonifaz

          student•
          hace 4 años

          Igual no me funciona, ni uno de los 2 codigos en windows clear y cls

        Lautaro Agustin Barrera

        Lautaro Agustin Barrera

        student•
        hace 4 años

        Estoy teniendo problemas con la función clear.

        1.png
        Al ejecutar el programa no sucede nada.

        1b.png

        Entonces probé poniendo unos echos para ver si estaba entrando en los condicionales.

        2.png

        Ahí pude darme cuenta que estaba entrando al de window.

        2b.png

        En algunos aportes pude ver que window ahora soporta el comando clear así que decidí probar.

        3.png

        Ahora si hace algo pero no lo que esperaba 😕

        3b.png

        Todo lo estoy haciendo desde un Windows 11 en la terminal Git Bash de Visual Studio Code.

        Alejandra Ojeda

        Alejandra Ojeda

        student•
        hace 3 años

        No me funciona, tengo el codigo exactamente igual, el guion bajo me muestra cantidad erronea de letras y cuando pongo una letra que coincide (osea es la correcta) me la toma mal, y posta, esta igual!

        Jonathan Samah

        Jonathan Samah

        student•
        hace 4 años

        Consulta me arroja un error que no me permite avanzar en la clase en la variable $intento inicializada en 0.

        Uncaught Error: Undefined constant "O" in /home/jonathan/Documentos/CursoPHPBasic/clasesRelaxMaster/Ahorcado.php:23 Stack trace: #0 {main} thrown in /home/jonathan/Documentos/CursoPHPBasic/clasesRelaxMaster/Ahorcado.php on line 23

        <<?php $Possible_words = ["gato", "perro", "leon", "pulpo", "vaca", "gorrion", "paloma", "leon", "gaviota"]; #listado de palabras define("MAX_ATTEMPS", 6); #cantidad de intentos en una costante echo "Juego del ahorcado de animales \n\n"; #inicializamos el juego $choosen_word = $Possible_words[rand(0,8)];#elecciop palabra al azar con funcion rand $choosen_word=strtolower($choosen_word);#strlower convierte todo a minusculas $word_length = strlen ($choosen_word); #strlen tiene funcion que cuenta cuanto mide la palabra en letras $discovered_letters = str_pad("", $word_length, "_"); #str_pad permite rellenar un string de guiones bajos #("" (string vacio), $word_length variable, el simbolo con que rellenar.) $attemps = O; //variable para que me diga cuantas veces a fallado echo "Palabra de $word_length letras \n\n"; #para decirle de cuantas letras es echo $discovered_letters . "\n\n";# las letras que ha descubierto de la palabra #pedimos al usuario que escriba $player_letter = readline ("Escribe una letra: "); #se guarda en esta variable $player_letter= strtolower($player_letter); if ( str_contains($choosen_word, $player_letter)){ #verificamos todas las ocurrencias de estas letras para reemplazarla #por medio de un ciclo while #strpos devuelve en cual posicion la letra que el usuario escribio #utilizo while para generar un ciclo que siga buscando la letra dentro de la palabra #offset = le dice a strpos que vuelva a iniciar busqueda en la palabra de la primera letra $offset=0; while( ($letter_position = strpos($choosen_word, $player_letter, $offset) !==false) ) { $discovered_letters[$letter_position]=$player_letter; $offset = $letter_position +1;# seria sumar el inicializador de la palabra } }else { $attemps++; echo"Letra icorrecta te quedan ". (MAX_ATTEMPS - $attemps). "intentos \n" ; } echo "\n";>
          Jonathan Samah

          Jonathan Samah

          student•
          hace 4 años

          Comparo con el video anterior no parece haber diferencia

          John Alexander Diaz Astudillo

          John Alexander Diaz Astudillo

          student•
          hace 4 años

          Hola Jonathan el problema es como inicializaste:

          $attemps = O;

          La inicializaste con una letra O;

          $attemps = 0;

          Cambiala por el numero 0 y ya... listo calixto.

        Andrés Felipe Bocanegra Portela

        Andrés Felipe Bocanegra Portela

        student•
        hace 3 años

        no se por que siempre me sale este mensaje :(

        Fatal error: Uncaught ValueError: strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) in C:\Curso-php2\ahorcado.php:37 Stack trace: #0 C:\Curso-php2\ahorcado.php(37): strpos('carro', 'a', 6) #1 {main} thrown in C:\Curso-php2\ahorcado.php on line 37

        Lariza Sandoval

        Lariza Sandoval

        student•
        hace 4 años

        Tuve problemas con la primera letra, hasta que vi en la documentación que hay usar === o !== (como lo hiciste tu). Porque es eso así?

          Henry

          Henry

          student•
          hace 4 años

          === compara dos valores y devuelve true si ambos además de ser idénticos son del mismo tipo.

          !== compara dos valores y devuelve true si ambos además de no ser idénticos no son del mismo tipo.

        Laura Juliana Serrano Garcia

        Laura Juliana Serrano Garcia

        student•
        hace un año

        Paz y bien, al código entregado sólo le agregue un switch para ir dibujando el dibujito que muestra como va nuestro juego. Muchas gracias, bendiciones.

        <?php function clear() { if(PHP_OS === "WINNT"){ system("cls"); }else{ system("clear"); } } $possible_words = ["Bebida", "Piloto","Asteroide","Platzi"]; define("MAX_ATTEMPS", 6); echo "😼¡Juego del ahorcado! \n\n"; //Inicializamos el juego $choosen_word = $possible_words[rand(0,3)]; $choosen_word = strtolower($choosen_word); $word_length = strlen($choosen_word); $discovered_letters = str_pad("", $word_length, "_"); $attemps = 0; do{ echo "Palabra de $word_length letras \n\n"; echo $discovered_letters . "\n\n"; //Pedimos al usuario que escriba $player_letter = strtolower(readline("Escribe una letra: ")); if (str_contains($choosen_word, $player_letter)){ //Verificamos todas las ocurrencias de esta letra para reemplazarla $offset =0; while( ($letter_position = strpos($choosen_word, $player_letter, $offset)) !== false){ $discovered_letters[$letter_position] = $player_letter; $offset = $letter_position + 1; } }else{ clear(); $attemps++; echo "Letra incorrecta 😿. Te quedan " . (MAX_ATTEMPS - $attemps) . " intentos."; switch($attemps){ case 1: echo " ________ | |_| | | | | --- "; break; case 2: echo " _______ | |_| | | | | | | --- "; break; case 3: echo " ________ | |_| | /| | | | | --- "; break; case 4: echo " _______ | |_| | /|\ | | | | --- "; break; case 5: echo " _______ | |_| | /|\ | | | / | --- "; break; case 6: echo " _______ | |_| | /|\ | | | / \ | --- "; break; }; sleep(2); } }while($attemps < MAX_ATTEMPS && $discovered_letters != $choosen_word); clear(); if ($attemps < MAX_ATTEMPS) echo "¡Felicidades! Has adivinado la pantalla 😸 \n\n"; else echo "Suerte para la próxima \n\n"; echo "La palabra es: $choosen_word \n"; echo "Las letras descubiertas: $discovered_letters \n\n"; echo "\n";
        Ilia Adad Infante Trejo

        Ilia Adad Infante Trejo

        student•
        hace 4 años

        Esta es mi solución al reto: 1.- Se añade el continuar jugando con un ciclo while 2.- Se coloca el muñeco de ahorcado con un arreglo que se imprime con un ciclo for que evalúa el número de intentos 3.- Se corrige un error del programa cuando el usuario no introduce una letra, sino que presiona directamente enter generando una variable con contenido null. Queda pendiente: un selector de temas con acceso a un arreglo asociativo.

        <?php function clear (){ if (PHP_OS === "Linux"){ system("clear"); } } clear(); $hang_man = [ "_____\n", " | \n O \n", //0 " /", //1 "|", //2 "\\ \n", //3 " /", //4 " \\", //5 ]; $possible_words = ["Ratón", "Pantalla", "Asteroide", "Gallo", "Gato", "Bocina", "Bota", "Edificio", "Lluvia", "Estudiante"]; define("MAX_ATTEMPS",6); $continue = 's'; echo "¡Juego del ahorcado! x_x \n\n"; //Inicializar juego while ($continue == 's'){ $choosen_word = $possible_words[rand(0,9)]; $choosen_word =strtolower($choosen_word); $word_lenght = strlen($choosen_word); $discovered_letters = str_pad("_",$word_lenght,"_"); $attemps = 0; sleep(2); do { clear(); echo "Palabra de $word_lenght letras \n"; echo $discovered_letters . "\n\n"; for ($i=0;$i<=$attemps;$i++){ echo $hang_man[$i]; }; echo "\n\n"; //Pedimos al usuario que accese la letra $player_letter = readline("Escribe una letra: "); if ($player_letter == null){ continue; } else { $player_letter = strtolower($player_letter); if (str_contains($choosen_word, $player_letter)){ $offset = 0; while (($letter_position = strpos($choosen_word,$player_letter,$offset)) !== false ){ $discovered_letters[$letter_position] = $player_letter; $offset = $letter_position + 1; } } else { $attemps++; echo "\n Letra incorrecta >_<', te quedan " . (MAX_ATTEMPS - $attemps) . " intentos. \n"; sleep(2); //pausa la ejecución en segundos } } } while( $attemps < MAX_ATTEMPS && $discovered_letters != $choosen_word ); clear(); if ($attemps < MAX_ATTEMPS) echo "¡Felicidades! Has adivinado la palabra. =) \n\n"; else echo "Suerte para la próxima, dude ;) \n\n"; echo "La palabra es '$choosen_word' \n"; echo "Descubriste las letras '$discovered_letters'"; echo "\n\n"; $continue = readline("Quieres seguir jugando? s/n: "); $continue = strtolower($continue); } echo "\n";
        Daniel Urviola

        Daniel Urviola

        student•
        hace 3 años

        Para dibujar al hombrecito ahorcado, he creado esta función

        function ahorcado($intentos){ switch ($intentos) { case 1: echo " ____\n | |\n | O\n |\n | \n |\n-----\n"; break; case 2: echo " ____\n | |\n | O\n | | \n |\n |\n-----\n"; break; case 3: echo " ____\n | |\n | O\n | /| \n |\n |\n-----\n"; break; case 4: echo " ____\n | |\n | O\n | /|\ \n |\n |\n-----\n"; break; case 5: echo " ____\n | |\n | O\n | /|\ \n | /\n |\n-----\n"; break; case 6: echo " ____\n | |\n | O\n | /|\ \n | / \ \n |\n-----\n"; break; default: echo " ____\n | |\n |\n |\n |\n |\n-----\n"; break; } }

        Y lo llamas dentro del ciclo do-while.

        Marcos Sarmiento Loarte

        Marcos Sarmiento Loarte

        student•
        hace 3 años

        Completé las Ideas a mejorar (retos) del juego

        • Que al terminar el juego ganado diga cuantos intentos le quedó.
        • Que al terminar pregunte si quiere jugar de nuevo y reinicie el juego.

        https://github.com/marcossarlo/juego-ahorcado-php

        Jhon Isnober Diaz Ruiz

        Jhon Isnober Diaz Ruiz

        student•
        hace 4 años

        Estimados, comparto mi solucion. Es una adaptacion del mismo script que realice en el curso de python.
        El archivo del require contiene el dibujo del ahorcado que lo tome de este git

        <?php require('ascii_hangman.php'); define('HEARTS', 7); // Lista de palabras $dictionary = ["Bebida", "Prisma", "Ala", "Dolor", "Piloto", "Baldosa", "Terremoto", "Asteroide", "Gallo", "Platzi"]; // Obtener palabra del diccionario $selected_word = strtolower($dictionary[rand(0, count($dictionary)-1)]); $word_array = str_split($selected_word); $typed_letter = ''; $offsets = array(); $game_info = array( "word" => $word_array, "placeholder" => array_fill(0, count($word_array), '_'), "hearts" => HEARTS, "remaining_hearts" => HEARTS, "won_game" => false, "typed_letters" => [] ); while($game_info["remaining_hearts"] > 0 && !$game_info["won_game"]) { render($game_info, $hangman); if($game_info["word"] == $game_info["placeholder"]) { $game_info["won_game"] = true; break; } else { $typed_letter = readline("Escribe una letra: "); // Validar si es una letra if(ctype_alpha($typed_letter)) { $game_info["typed_letters"][] = $typed_letter; // Validar si la letra esta en la palabra if(in_array($typed_letter, $game_info["word"])) { // Obtiene la posicion de la letra en la palabra $offsets = array_keys($game_info["word"], $typed_letter); foreach($offsets as $key) { $game_info['placeholder'][$key] = $typed_letter; } } // La letra no existe en la palagra, descontar una vida else { $game_info['remaining_hearts']--; } } // No es una letra, descontar una vida else { $game_info['remaining_hearts']--; } } } if($game_info['won_game']) { echo PHP_EOL . "🥳🥳🥳 Felicidades, has ganado el juego 🥳🥳🥳" . PHP_EOL . PHP_EOL; } else { render($game_info, $hangman); echo PHP_EOL . "😭😭😭 Lo siento, has perdido 😭😭😭" . PHP_EOL; echo PHP_EOL . "La palabra era: $selected_word" . PHP_EOL . PHP_EOL; } function render( array $game_info, array $hangman = []) { // Limpiar pantalla system('clear'); $interface = array( "+==================================+" . PHP_EOL, "+++ Juego del ahorcado +++" . PHP_EOL, " " . PHP_EOL, "" . PHP_EOL, " " . PHP_EOL, "Vidas " .str_repeat("💖 ", $game_info["remaining_hearts"]) . PHP_EOL, "+==================================+" . PHP_EOL, ); $interface[3] = implode(' ',$game_info['placeholder']) . PHP_EOL; // Imprime imagen del ahorcado junto con la interface for($i = 0, $size = count($interface); $i < $size; $i++) { $index = $game_info["hearts"] - $game_info["remaining_hearts"]; echo $hangman[$index][$i] . ' ' . $interface[$i]; } }
          Kenneth Angulo L

          Kenneth Angulo L

          student•
          hace 3 años

          Claro, buena idea lo de cargar la imagen !!

        LUIS DIAZ

        LUIS DIAZ

        student•
        hace 4 años

        Profe lo unico que pude ver que falto es verificar que el jugador no digite ninguna letra, creo que una simple verificacion despues de que el usuario coloque su letra seria suficiente.

        Grande ProfRetax

        Julio Cardenas

        Julio Cardenas

        student•
        hace 6 meses