Contenido del curso
Arreglos
Condicionales
Bucles
Funciones
Proyecto: juego del ahorcado con PHP
Bonus: HTML con esteroides
Próximos pasos
¡Hagamos un juego con PHP!
Contenido del curso
¡Hagamos un juego con PHP!
Matías Torezani
EstudianteJimmy Buriticá Londoño
EstudianteMarcos Sarmiento Loarte
EstudianteAndres Salazar
EstudianteJhony Cepeda
EstudianteLuis Alberto Rodríguez Arellano
EstudianteJosé Samuel Mena Reyes
EstudiantePaula Melo
EstudianteGuadalupe Monge Barale
Estudiantekleber Aguilar
EstudianteGonzalo Giampaolo
EstudianteLuis Humberto Osorio Quiceno
EstudianteAndres Salazar
EstudianteAntonio Javier Colmenarez Gonzalez
EstudianteCarlos Eduardo Gomez García
ProfesorSantiago Velásquez Serna
EstudianteJoel Dominguez Merino
EstudianteThomas Restrepo
EstudianteCamilo Ramírez Melo
EstudianteMariana Gil
EstudianteJohan Sebastian Jimenez Molina
EstudianteSantiago Andres Alvarez Cuadros
EstudianteJose Alejandro Pantoja Giraldo
EstudianteHallking Quesada Medina
EstudianteLuis Enrique Jiménez Trejo
Estudiantekleber Aguilar
EstudianteEmilio Salvatore Ampuero Sepúlveda
EstudianteEs un capo el profesor Retax Master, un placer haber hecho éstos cursos.
Consejo
Una mejora al código es, no contar a mano las palabras que están en el arreglo, sino contarlas usando una función de PHP así:
$choosen_word = $possible_words[ rand(0, count($possible_words) -1) ];
excelente consejo, gracias Jimmy.
Eso que dices es esencial, no la función, sino como resolviste el problema, automatizando!. y debo decir que lo hiciste de modo limpio, y claro. Iba a sugerir que count($possible_words) -1 se guardara en una variable, pero ese mismo número dificilmente se requiere de nuevo y no afecta en nada como lo escribiste! Gracias por compartirlo.
Sí estas aquí, felicidades, ya casi terminas el curso, no pares!
A pesar de ser un curso ameno y claro, sí se me ha hecho pesado no sé porque... xD
Emojis
Si están en Windows, creo que desde la versión 10, si ustedes presionan las combinaciones:
Windows + .
Es decir, la tecla windows y luego punto: .
Les aparecerá un panel de emojis, pueden ver más acá.
Por cierto una muy buena clase.
😱😱😱😱😱😱😱
Para insertar emojis en VCode tengo la extensión Emoji Snippets
La instalas
Escribes : en tu código
Buscas el emoji que deseas (lo puedes hacer por palabra)
Le das enter
" cat 🐈 cat-face 🐱 cat-face-with-tears-of-joy 😹 "
Yo no se que nomas de esa extensión pero en Windows yo presiono Windows + . y tengo los emojis en cualquier lugar.
Yo use la lista de palabras del desafío de “ahorcado” del curso de Python.
Y para leer las palabras y pasarlas a un array:
$filename = "./data.txt"; $handle = fopen($filename,"r"); $possible_words = fread($handle,filesize($filename)); fclose($handle); $possible_words = explode("\n",$possible_words);```
Un saludo. Que mas juegos tiene en su cabeza? Animo, demos ideas, sirven para la practica Gracias.
A mi se me ocurrio el juego de pasar 3 misioneros y 3 caniblaes en una balsa por un rio donde no se puede dejar que el numero de misioneros sea menor al de canibales en cualquier orilla y la canoa solo puede transportar 2 personas.
Como hago para ver el readline() desde xamp en window
¡Hola! No se puede, ya que Xampp es un servidor web. readline() solo funciona para la terminal, para web debemos usar inputs de HTML, pero eso no está en el alcance de este curso (tranquilo, eso se los enseño luego en el Curso de Integración de PHP con HTML) :D
Para este curso te recomiendo seguirme en la terminal
Tambien existe la funcion de array_rand para elegir un valor aleatorio del array
$chosenWord=$possibleWords[array_rand( $possibleWords )];
No importa que tan grande sea el array, funcionará
Ya tenemos la base del juego, ahora tocará implementar un poco de lógica para determinar si la palabra contiene la letra que el usuario eligio. Lo que puedo ver es que en efecto, PHP tiene demasiadas funciones de las cuales hacer uso. El detalle es que conozco apenas un par jaja Por eso me estoy apoyando de tú código aunque en un futuro volveré a hacer la implementación por mi cuenta para ver si se me ocurre algo nuevo. De momento comparto el código de la clase. .
###Intente hacerlo sin ver la clase y esta fue mi slución $words = ["avance", "pendulo", "cuadrado", "desarrollo"]; $word_game = $words[array_rand($words, 1)]; $points = 5; $correct_letters = []; while (true){ $advance_word = show_word_advance($correct_letters, $word_game); echo "Your balance score is: {$points} \n"; if($points < 1){ echo "Ahorcadito :( LOST ALL POINTS"; break; } $options = readline("Do you wanna said the word? 1 = yes 2 = no: "); if($options == "yes"){ echo "\n"; $user_word = readline("The word is: "); echo "\n"; if($user_word == $word_game){ echo "CONGRATULATIONS $user_word is the correct word \n"; break; } else { echo "You failed :( the word was: $word_game \n"; break; } } else { print_r("Ok lets go to discover the letters \n"); $letter = readline("What letter do you choose?: "); echo "\n"; $search = (str_contains($word_game, $letter)); if ($search == false){ echo "{$letter} isnt in the {$word_game} \n"; $points--; } else { array_push($correct_letters, $letter); echo "Correct {$letter} is in the {$word_game} \n"; } } } function show_word_advance($array, $word_game){ $word_game_array = str_split($word_game); foreach($word_game_array as $key){ if(!in_array($key, $array)){ $word_game_array = str_replace($key, "x", $word_game_array); } } $advance_in_string = implode("", $word_game_array); var_dump($advance_in_string . "\n"); print_r("Your actual word is: " . $advance_in_string . "\n"); return $advance_in_string; }
Genial, con este ejemplo pude revisar la documentación de los casos en que se usa define o const para definir una constante.
Retax... no me había dado cuenta de que te gustaban los gatitos, jaja! A mí también...
<?php // Palabras para el juego $palabras = array("gato", "perro", "elefante", "jirafa", "leon"); // se crea el array palabras con las palabras para el juego // Seleccionar una palabra al azar $palabra = $palabras[array_rand($palabras)]; // se crea la variable palabra que obtiene una palabra al azar del array palabras // Número de intentos permitidos $intentosMaximos = 6; // se crea la variable intentosMaximos con el valor 6 // Letras adivinadas $letrasAdivinadas = array(); // se crea el array letrasAdivinadas donde se guardarán las letras adivinadas // Número de intentos realizados $intentosRealizados = 0; // se crea la variable intentosRealizados con el valor 0 donde se guardarán los intentos realizados // Función para mostrar la palabra oculta function mostrarPalabraOculta($palabra, $letrasAdivinadas) // se crea la función mostrarPalabraOculta con los parámetros palabra y letrasAdivinadas { $oculta = ""; // se crea la variable oculta con el valor vacío foreach (str_split($palabra) as $letra) { // se crea un ciclo foreach que recorre cada letra de la palabra con la función str_split que convierte la palabra en un array if (in_array($letra, $letrasAdivinadas)) { // se crea un condicional que verifica si la letra está en el array letrasAdivinadas con la función in_array que verifica si un valor existe en un array $oculta .= $letra; // si la letra está en el array letrasAdivinadas, se agrega la letra a la variable oculta } else { // si la letra no está en el array letrasAdivinadas $oculta .= "_"; // se agrega un guión bajo a la variable oculta } } return $oculta; // se retorna la variable oculta } // Función para mostrar las letras adivinadas function mostrarLetrasAdivinadas($letrasAdivinadas) // se crea la función mostrarLetrasAdivinadas con el parámetro letrasAdivinadas { return implode(", ", $letrasAdivinadas); // se retorna el array letrasAdivinadas con las letras separadas por una coma y un espacio } // Juego del ahorcado while ($intentosRealizados < $intentosMaximos) { // se crea un ciclo while que se ejecuta mientras los intentos realizados sean menores que los intentos máximos // Mostrar la palabra oculta y las letras adivinadas echo "Palabra: " . mostrarPalabraOculta($palabra, $letrasAdivinadas) . "\n"; // se muestra la palabra oculta y las letras adivinadas echo "Letras adivinadas: " . mostrarLetrasAdivinadas($letrasAdivinadas) . "\n"; // se muestra las letras adivinadas // Solicitar una letra al usuario $letra = readline("Ingresa una letra: "); // se crea la variable letra que obtiene la letra ingresada por el usuario // Validar la letra ingresada if (strlen($letra) != 1 || !ctype_alpha($letra)) { // se crea un condicional que verifica si la letra ingresada es válida echo "Por favor, ingresa una letra válida.\n"; // si la letra no es válida, se muestra un mensaje continue; // se reinicia el ciclo } // Verificar si la letra ya fue adivinada if (in_array($letra, $letrasAdivinadas)) { // se crea un condicional que verifica si la letra ya fue adivinada echo "Ya has adivinado esa letra.\n"; // si la letra ya fue adivinada, se muestra un mensaje continue; // se reinicia el ciclo } // Agregar la letra a las letras adivinadas $letrasAdivinadas[] = $letra; // se agrega la letra al array letrasAdivinadas // Verificar si la letra está en la palabra if (strpos($palabra, $letra) === false) { // se crea un condicional que verifica si la letra está en la palabra echo "La letra no está en la palabra.\n"; // si la letra no está en la palabra, se muestra un mensaje $intentosRealizados++; // se aumenta en 1 el valor de la variable intentosRealizados } // Verificar si se adivinaron todas las letras if (mostrarPalabraOculta($palabra, $letrasAdivinadas) == $palabra) { // se crea un condicional que verifica si se adivinaron todas las letras echo "¡Felicidades! Has adivinado la palabra.\n"; // si se adivinaron todas las letras, se muestra un mensaje break; // se termina el ciclo } } // Mostrar el resultado del juego if ($intentosRealizados == $intentosMaximos) { // se crea un condicional que verifica si los intentos realizados son iguales a los intentos máximos echo "Lo siento, has perdido. La palabra era: " . $palabra . "\n"; // si los intentos realizados son iguales a los intentos máximos, se muestra un mensaje } // Fin del juego ```\<?php// Palabras para el juego$palabras = array("gato", "perro", "elefante", "jirafa", "leon"); // se crea el array palabras con las palabras para el juego // Seleccionar una palabra al azar$palabra = $palabras\[array\_rand($palabras)]; // se crea la variable palabra que obtiene una palabra al azar del array palabras // Número de intentos permitidos$intentosMaximos = 6; // se crea la variable intentosMaximos con el valor 6 // Letras adivinadas$letrasAdivinadas = array(); // se crea el array letrasAdivinadas donde se guardarán las letras adivinadas  // Número de intentos realizados$intentosRealizados = 0; // se crea la variable intentosRealizados con el valor 0 donde se guardarán los intentos realizados // Función para mostrar la palabra ocultafunction mostrarPalabraOculta($palabra, $letrasAdivinadas) // se crea la función mostrarPalabraOculta con los parámetros palabra y letrasAdivinadas{ $oculta = ""; // se crea la variable oculta con el valor vacío foreach (str\_split($palabra) as $letra) { // se crea un ciclo foreach que recorre cada letra de la palabra con la función str\_split que convierte la palabra en un array if (in\_array($letra, $letrasAdivinadas)) { // se crea un condicional que verifica si la letra está en el array letrasAdivinadas con la función in\_array que verifica si un valor existe en un array $oculta .= $letra; // si la letra está en el array letrasAdivinadas, se agrega la letra a la variable oculta } else { // si la letra no está en el array letrasAdivinadas $oculta .= "\_"; // se agrega un guión bajo a la variable oculta } } return $oculta; // se retorna la variable oculta} // Función para mostrar las letras adivinadasfunction mostrarLetrasAdivinadas($letrasAdivinadas) // se crea la función mostrarLetrasAdivinadas con el parámetro letrasAdivinadas{ return implode(", ", $letrasAdivinadas); // se retorna el array letrasAdivinadas con las letras separadas por una coma y un espacio} // Juego del ahorcadowhile ($intentosRealizados < $intentosMaximos) { // se crea un ciclo while que se ejecuta mientras los intentos realizados sean menores que los intentos máximos // Mostrar la palabra oculta y las letras adivinadas echo "Palabra: " . mostrarPalabraOculta($palabra, $letrasAdivinadas) . "\n"; // se muestra la palabra oculta y las letras adivinadas echo "Letras adivinadas: " . mostrarLetrasAdivinadas($letrasAdivinadas) . "\n"; // se muestra las letras adivinadas // Solicitar una letra al usuario $letra = readline("Ingresa una letra: "); // se crea la variable letra que obtiene la letra ingresada por el usuario // Validar la letra ingresada if (strlen($letra) != 1 || !ctype\_alpha($letra)) { // se crea un condicional que verifica si la letra ingresada es válida echo "Por favor, ingresa una letra válida.\n"; // si la letra no es válida, se muestra un mensaje continue; // se reinicia el ciclo } // Verificar si la letra ya fue adivinada if (in\_array($letra, $letrasAdivinadas)) { // se crea un condicional que verifica si la letra ya fue adivinada echo "Ya has adivinado esa letra.\n"; // si la letra ya fue adivinada, se muestra un mensaje continue; // se reinicia el ciclo } // Agregar la letra a las letras adivinadas $letrasAdivinadas\[] = $letra; // se agrega la letra al array letrasAdivinadas // Verificar si la letra está en la palabra if (strpos($palabra, $letra) === false) { // se crea un condicional que verifica si la letra está en la palabra echo "La letra no está en la palabra.\n"; // si la letra no está en la palabra, se muestra un mensaje $intentosRealizados++; // se aumenta en 1 el valor de la variable intentosRealizados } // Verificar si se adivinaron todas las letras if (mostrarPalabraOculta($palabra, $letrasAdivinadas) == $palabra) { // se crea un condicional que verifica si se adivinaron todas las letras echo "¡Felicidades! Has adivinado la palabra.\n"; // si se adivinaron todas las letras, se muestra un mensaje break; // se termina el ciclo }} // Mostrar el resultado del juegoif ($intentosRealizados == $intentosMaximos) { // se crea un condicional que verifica si los intentos realizados son iguales a los intentos máximos echo "Lo siento, has perdido. La palabra era: " . $palabra . "\n"; // si los intentos realizados son iguales a los intentos máximos, se muestra un mensaje} // Fin del juego
Retándome a mí mismo de terminar de crear el juego, así me quedó la versión final:
<?php $possible_words = ["Bebida", "Prisma", "Ala", "Dolor", "Piloto", "Baldosa", "Terremoto", "Asteroide", "Gallo", "Platzi"]; const MAX_ATTEMPTS = 10; echo "Juego del ahorcado" . PHP_EOL; // Inicializamos el juego $selectedWord = strtolower($possible_words[rand(0, 9)]); $word_length = strlen($selectedWord); $discoveredLetters = str_pad("", $word_length, "_"); echo "La palabra contiene $word_length letras: " . PHP_EOL; echo $discoveredLetters . PHP_EOL; $attemptsLeft = MAX_ATTEMPTS; do { /* creamos un arreglo que guarde las posiciones de las letras que coincidan con $selectedWord */ $lettersIndex = []; // quitamos espacios y convertimos a minúsculas $insertedLetter = trim(strtolower(readline("\nIngresa una letra: "))); // validamos la entrada del usuario if (strlen($insertedLetter) !== 1) { echo "Debes ingresar solamente una letra" . PHP_EOL; continue; } else if (preg_match('/[^a-z]/', $insertedLetter)) { echo "Solamente puedes ingresar letras de la A a la Z" . PHP_EOL; continue; } // si $insertedLetter coincide con alguna letra en $selectedWord if (str_contains($selectedWord, $insertedLetter)) { /* iteramos para obtener todas las posiciones de las letras que coincidan dentro de $selectedWord y las guardamos en $lettersIndex */ for ($i = 0; $i < $word_length; $i++) { if ($selectedWord[$i] === $insertedLetter) { array_push($lettersIndex, $i); } } /* ya obtenidas las posiciones, iteramos $lettersIndex para reemplazar los guiones en $discoveredLetters por la letra en $insertedLetter */ foreach ($lettersIndex as $value) { $discoveredLetters[$value] = $insertedLetter; } } else { // si no se encuentran coincidencias, restamos un intento $attemptsLeft--; } if ($selectedWord === $discoveredLetters) { echo "$discoveredLetters" . PHP_EOL; echo "Ganaste!" . PHP_EOL; echo "\n"; break; } echo $discoveredLetters . PHP_EOL; echo "Te quedan $attemptsLeft intentos" . PHP_EOL; echo "\n"; } while (str_contains($discoveredLetters, "_") && $attemptsLeft > 0); if ($selectedWord !== $discoveredLetters) { echo "La palabra era $selectedWord, lo siento :(" . PHP_EOL; echo "\n"; }
dejen la entrada del usuario en una sola letra.
$player_letter = strtolower( readline("Escribe una letra: ") );
no se que también este, pero este es mi juego.
function getPalabra(){ $palabras = ["bebida", "prisma", "ala", "dolor", "piloto", "baldosa", "terremoto", "asteroide"]; $palbara = $palabras[array_rand($palabras, 1)]; return $palbara = str_split($palbara); } function getCantidaLetras($palabra){ return count($palabra); } function setCoincidencia($palabra, $Letra, $coincidencia){ var_dump($coincidencia); echo "\n\n"; var_dump($coincidencia); } $getPlabra = ["p","r","i","s","m","a"]; $palabra = $getPlabra; //getPalabra(); echo "Bienvenido al juego del ahorcado, La pabra que te toco tiene " . getCantidaLetras($palabra) . " Letras e Intentos \nLisot para jugar \n\n"; $coincidencia = []; $ahorcado = []; for ($i=0; $i < getCantidaLetras($palabra); $i++) { array_push($coincidencia, " - "); echo $coincidencia[$i]; } $intentos = (int) 11; do{ echo "\n\n"; $Letra = readline("Ingresa la primera letra: "); $error = 0; if(strlen($Letra) == 1){ foreach ($palabra as $key => $value) { if($value == $Letra) { $coincidencia[$key] = " ".$Letra." "; } else { $error++; } } foreach ($coincidencia as $value) { echo $value; } if($error == getCantidaLetras($palabra)) $intentos = ($intentos-1); switch ($intentos) { case '10': echo "\n\n"; echo " ________|\n"; echo " |________|\n"; break; case '9': echo "\n\n"; echo " |\n"; echo " |\n"; echo " |\n"; echo " |\n"; echo " ________|\n"; echo " |________|\n"; break; case '8': echo "\n\n"; echo " _______\n"; echo " |\n"; echo " |\n"; echo " |\n"; echo " |\n"; echo " ________|\n"; echo " |________|\n"; break; case '7': echo "\n\n"; echo " _______\n"; echo " | |\n"; echo " |\n"; echo " |\n"; echo " |\n"; echo " ________|\n"; echo " |________|\n"; break; case '6': echo "\n\n"; echo " _______\n"; echo " | |\n"; echo " 0 |\n"; echo " |\n"; echo " |\n"; echo " ________|\n"; echo " |________|\n"; break; case '5': echo "\n\n"; echo " _______\n"; echo " | |\n"; echo " 0 |\n"; echo " | |\n"; echo " |\n"; echo " ________|\n"; echo " |________|\n"; break; case '4': echo "\n\n"; echo " _______\n"; echo " | |\n"; echo " 0 |\n"; echo " |\ |\n"; echo " |\n"; echo " ________|\n"; echo " |________|\n"; break; case '3': echo "\n\n"; echo " _______\n"; echo " | |\n"; echo " 0 |\n"; echo " /|\ |\n"; echo " |\n"; echo " ________|\n"; echo " |________|\n"; break; case '2': echo "\n\n"; echo " _______\n"; echo " | |\n"; echo " 0 |\n"; echo " /|\ |\n"; echo " \ |\n"; echo " ________|\n"; echo " |________|\n"; break; case '1': echo "\n\n"; echo " _______\n"; echo " | |\n"; echo " 0 |\n"; echo " /|\ |\n"; echo " / \ |\n"; echo " ________|\n"; echo " |________|\n"; echo "\n Has perdido \n"; break; default: echo ""; break; } } else{ echo "Solo puede ingresar una letra a la vez\n"; } } while ($intentos > 0);
Desarrollé el juego antes de ver el video, aceptó retro colegas! 😁
<?php # Arreglo que me almacenara las letras acertadas $encontrados = array(); # Arreglo que me almacenara los valores que haya intentado el usuario $intentados = array(); # Arreglo que me almacenara las letras de la palabra $caracteresCorrectos = array(); # Se ingresa la palabra que tendra que adivinar el usuario // $palabraEscondida = strtolower(readline("Ingresa la palabra escondida: ")); #Se puede cambiar Ferrocarril por cualquier palabra $palabraEscondida = strtolower("Ferrocarril"); $aux = ""; # Definimos el numero de intentos que le otorgamos al usuario $intentos = 5; # Se imprime la longitud de la palabra como pista echo "Longitud de la palabra: ".strlen($palabraEscondida)."\t"; # En este for almacenamos en un arreglo todas las letras que conforman a la palabra # y le aplicamos el array_unique para evitar tener alguna letra duplicada en el arreglo. for($i = 0; $i<strlen($palabraEscondida); $i++){ echo "_ "; array_push($caracteresCorrectos, $palabraEscondida[$i]); $caracteresCorrectos = array_unique($caracteresCorrectos); $aux .= "_"; } echo "\n"; # Mientras el usuario tenga intentos se estará ejecutando el while while ($intentos > 0) { # Le pedimos que nos diga una letra $letra = readline("Teclea una letra: "); # Validamos que NO haya intentado esa letra antes buscandola en un # arreglo que almacena sus intentos y si ya existe le restamos una vida # y le mostramos la advertencia de que ha perdido un intento if(in_array($letra,$intentados)){ echo "Ya haz intentado con esa...\n"; $intentos--; echo "Te quedan $intentos intentos\n"; }else{ # Si pasa la primera validación entonces entra a la validación donde pregunta si la letra dada # se encuentra dentro de la palabra secreta if(strstr($palabraEscondida,$letra)){ echo "Haz acertado una letra de la palabra escondida\n"; # Almacenamos el acierto en el arreglo de las letras encontradas y en # el arreglo de los intentos array_push($encontrados, $letra); array_push($intentados, $letra); # En este for se analiza la letra dada y se reemplaza en los "_" for($i=0; $i<strlen($palabraEscondida); $i++){ if($letra==$palabraEscondida[$i]){ $aux[$i] = $letra; } } # Si el arreglo de las letras contenidas es igual a de los # encontrados entonces se rompe el while y asi se gana el juego de ahorcado if(count($caracteresCorrectos)==count($encontrados)){ echo "Felicidades haz hallado todas las letras contenidas en la palabra\nGANADOR!!!\n\nSolucion: $palabraEscondida"; break; } }else{ #Si la letra dada no está contenida en la palabra secreta el usuario pierde una vida echo "Intento erroneo...\n"; array_push($intentados, $letra); $intentos--; echo "Te quedan $intentos intentos\n"; } } echo $aux."\n"; }
Asi vamos en esta clase 💚
<?php // *Juego del ahorcado // *Palabras a usar $possible_word = ["Bebida","Prisma", "Ala", "Dolor", "Piloto ", "Baldosa", "Terremoto", "Asteroide", "Gallo", " Platzi"]; //* Numero de intentos define("MAX_ATTEMPTS", 6); echo "🐱 Juego del ahorcado\n\n"; // *Inicioalizamos el juego // *Elegimos las palabra aleatoriamente $chossen_word = $possible_word [rand(0, 9)]; // *Convertir de mayusculas a minusculas $chossen_word = strtolower($chossen_word); // *Medir las logitud del las palabras $word_length = strlen($chossen_word); // *Cambiamos las palabras iniciales guiones $discovered_letters = str_pad("", $word_length,"_"); $attempts = 0; echo "Palabra de $word_length letras \n\n"; echo $discovered_letters . "\n\n"; // *Pedimos la respuesta $player_letter = readline("Escribe una letra: "); $player_letter = strtolower($player_letter); echo "\n"; ?>
Otra forma de agregar emojis es presionando tecla windows + .