No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
11 Hrs
4 Min
26 Seg

¡Hagamos un juego con PHP!

21/25
Recursos

Aportes 16

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Es 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) ];

Sí estas aquí, felicidades, ya casi terminas el curso, no pares!

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

  1. La instalas

  2. Escribes : en tu código

  3. Buscas el emoji que deseas (lo puedes hacer por palabra)

  4. Le das enter

" cat 🐈  cat-face 🐱  cat-face-with-tears-of-joy 😹 "

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.

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.
.

```js

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 + .