No tienes acceso a esta clase

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

Curso Práctico de PHP

Curso Práctico de PHP

Ana Belisa Martínez

Ana Belisa Martínez

¡Creando nuestro juego!

12/17
Recursos

Aportes 36

Preguntas 8

Ordenar por:

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

Hice mi propia versión del juego

main.php

analisis.php

Noté que puede suceder que al momento de utilizar str_shuffle nuestra palabra desordenada podría quedar en el orden correcto, así que modifiqué el codigo para evitarlo.

$palabras = array("sol", "luna", "cielo");
$palabrasDesordenadas= array();
for($i=0; $i<count($palabras); $i++){
    do{
        $palabrasDesordenadas[$i]=str_shuffle($palabras[$i]);
    }while($palabrasDesordenadas[$i]==$palabras[$i]);
    
}

Para los que no les funcione el enviar correctamente, en el form hay que renombrar el name por posicion0 , posicion1, posicion2

Espero les ayude.

Interesante como provoco los errores para luego corregirlos, esto pasa muy seguido en la practica…

a ustedes no les pasa?

12. Creando nuestro juego

Les comparto el código de la clase con pequeños ajustes para que se vea un poco mejor, se ve así:

Formulario:

Respuesta:

main.php

<?php
$wordsList = ["sol", "luna", "cielo"];
$scrambledWords = [];

for($i=0; $i < count($wordsList); $i++){
    $scrambledWords[$i] = str_shuffle($wordsList[$i]);
    echo "Palabra " . ($i+1) . ": $scrambledWords[$i]<br>";
}
echo "
<br>
<h3>Ingresa tus respuestas:</h3>
<form action ='analisis.php'>
<span>1. </span>
<input type='text' name='word0'><br>
<span>2. </span>
<input type='text' name='word1'><br>
<span>3. </span>
<input type='text' name='word2'><br>
<button type='submit'>Enviar</button>
</form>
";

analisis.php

<?php
$wordsList = ["sol", "luna", "cielo"];

if($_REQUEST["word0"] == $wordsList[0]) {
    echo "La primera palabra ingresada es correcta<br>";
} else {
    echo "La primera palabra ingresada es incorrecta, la palabra correcta es: $wordsList[0]<br>";
}

if($_REQUEST["word1"] == $wordsList[1]) {
    echo "La segunda palabra ingresada es correcta<br>";
} else {
    echo "La segunda palabra ingresada es incorrecta, la palabra correcta es: $wordsList[1]<br>";
}

if($_REQUEST["word2"] == $wordsList[2]) {
    echo "La tercera palabra ingresada es correcta<br>";
} else {
    echo "La tercera palabra ingresada es incorrecta, la palabra correcta es: $wordsList[2]<br>";
}

Mejorando mi código anterior con lo aprendido:

<?php
$palabras=["enredadera","sombra","hoja","pasto","edificio","gatos"];
$retos = [];
foreach($palabras as $palabra) {
    $retos[] = str_shuffle($palabra);
}

if($_REQUEST) {
    $indice = 0;
    foreach($_REQUEST as $respuesta) {
        $correcta=$palabras[$indice++];
        if($respuesta == $correcta) {
            echo "<strong>$respuesta:</strong> ¡Respuesta correcta! <strong>:)</strong> <br><br>";
        }else {
            echo "<strong>$respuesta:</strong> ¡Incorrecto! <strong>:(</strong><br>La respuesta es: <strong>" . $correcta . "</strong><br><br>";
        }
    }
    echo "<input type='button' value='Volver a jugar' onClick='history.go(-1);'>";
    exit();
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Juego</title>
</head>
<body>
    <h1>Adivina la palabra</h1>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <?php
        $i=0;
        foreach($retos as $reto) {
            echo "<p><strong>$reto</strong>  <input type='text' name='respuesta" . ++$i ."' autocomplete='off'></p>";
        }
        ?>
        <button type="submit">Enviar</button>
    </form>
</body>
</html>

Mi solución:

$palabras_ordenadas = array("sol", "cielo", "luna");
$i = 0;

foreach ($_REQUEST as $key => $value) {

    if($value == $palabras_ordenadas[$i])
        echo "coincide!" . "<br>";
    else
        echo "no coincide!" . "<br>";
    

    $i++;
}

Mi Aporte:

Me encanta la positividad con la que resuelve el error

index.php

$palabras = array(“sol”, “luna”, “cielo”);
$palabrasDesordenadas = array();

for($i = 0; $i < 3; $i++){
$palabrasDesordenadas[$i]= str_shuffle($palabras[$i]);
}
print_r($palabrasDesordenadas);
echo “
<form action=‘analisis.php’>
<input type=‘text’ name=‘palabra0’>
<input type=‘text’ name=‘palabra1’>
<input type=‘text’ name=‘palabra2’>
<button type=‘submit’>Enviar</button>
</form>
”;

Pense que era mucho mas dificil obtener las respuestas que se envian del html

Asi escribi el analisis

<?php

print_r($_REQUEST);
echo "<br>";
for ($i = 0; $i < 3; $i++) {
    switch ($_REQUEST['palabra'.$i]) {
        case 'sol' : echo "<br>Palabra correcta<br>"; break;
        case 'luna' : echo "<br>Palabra correcta<br>"; break;
        case 'cielo' : echo "<br>Palabra correcta<br>"; break;
        default: echo "<br>Palabra incorrecta<br>";
    }
}
Este es mi codigo, espero les guste. ```js ```\
Este es mi codigo, espero les guste ``
Hola, este es mi código, espero les guste. ``
![](https://static.platzi.com/media/user_upload/image-9ef5d1b4-0572-450b-ac01-5c2a1f8dc260.jpg) ![](https://static.platzi.com/media/user_upload/image-15143b09-a3aa-404e-ace3-041f9f1435c3.jpg)
una vez en el trabajo me salia un error y decia que estaba en linea 657 y revisando la funcion como era tan extensa el error estaba en la linea 611.

Les doy una mejor forma de hacerlo con bucles:

index.php

<?php
$palabras = ["auto", "camello", "piesa", "alfajor", "alfombra", "computadora", "indio", "Guerra",
"elicoptero", "Canada", "Lucifer", "pelicula", "anonimo", "abstracto", "dislexia", "agua"];
?>
<form method="post" action="./comprobar.php">
    <?php
    foreach ($palabras as $key) {
        $letras = str_split($key);
        shuffle($letras);
        echo implode("", $letras);
        echo "<input type='text' name='palabra$key' placeholder='Escribe aquí'>";
        echo "<br>";
    }
    ?>
    <input type="submit" value="Enviar">
</form>

comprobar.php

<?php
$palabras = ["auto", "camello", "piesa", "alfajor", "alfombra", "computadora", "indio", "Guerra",
"elicoptero", "Canada", "Lucifer", "pelicula", "anonimo", "abstracto", "dislexia", "agua"];

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    foreach ($palabras as $key) {
        $inputName = "palabra" . $key;
        $inputValue = $_POST[$inputName] ?? '';

        if (strcasecmp($key, $inputValue) === 0) { //compara string
            echo "CORRECTO ¡Coincide! La palabra original era $key ";
        } else {
            echo "No coincide la palabra, Esta era $key ";
        }
        echo "<br>";
    }
}
?>```

Les dejo mi analisis.php
ordene y di espacios a la salida de los textos, para que se lean mejor jejeje

<?php

print_r($_REQUEST);

$palabras = array("sol", "luna", "cielo");
echo "<br>";
if($_REQUEST["palabra0"] == $palabras[0]) {
    echo "La palabra ingresada es correcta", "<br>";
} else {
    echo "La palabra ingresada no es correcta, la palabra correcta es: <strong>".$palabras[0], "</strong><br>";
}

if($_REQUEST["palabra1"] == $palabras[1]) {
    echo "La palabra ingresada es correcta", "<br>";
} else {
    echo "La palabra ingresada no es correcta, la palabra correcta es: <strong>".$palabras[1], "</strong><br>";
}

if($_REQUEST["palabra2"] == $palabras[2]) {
    echo "La palabra ingresada es correcta", "<br>";
} else {
    echo "La palabra ingresada no es correcta, la palabra correcta es: <strong>".$palabras[2], "</strong><br>";
}

?>

Resultado de este clase 💚.


Main


<?php

//* Palabras iniciales
$palabras = ["sol", "luna", "cielo"];
$palabras_desordenadas= [];

// *Mezcla de palabras
for ($i=0; $i < 3 ; $i++) { 
  $palabras_desordenadas [$i] = str_shuffle($palabras[$i]);
}

print_r($palabras_desordenadas);

echo "
  <form action='analisis.php' >
    <input type='text' name='palabra0'>  
    <input type='text' name='palabra1'>  
    <input type='text' name='palabra2'>
    <button type='submit'>Enviar 😎</button>
  </form>
";

?>

Analisis


<?php

// *Obtener respuesta usuario
print_r($_REQUEST);

$palabras = ["sol", "luna", "cielo"];

// *Verificar respuesta usuario
if($_REQUEST["palabra0"] == $palabras[0]){
  echo "<br>Adivininaste 🎉 las respuesta es correcta<br>";
}else{
  echo "<br>La repuesta no es la correcta 🥺, la palabra es {$palabras[0]}<br>";
}
if($_REQUEST["palabra1"] == $palabras[1]){
  echo "Adivininaste 🎉 las respuesta es correcta<br>";
}else{
  echo "La repuesta no es la correcta 🥺, la palabra es {$palabras[1]}<br>";
}
if($_REQUEST["palabra2"] == $palabras[2]){
  echo "Adivininaste 🎉 las respuesta es correcta<br>";
}else{
  echo "La repuesta no es la correcta 🥺, la palabra es {$palabras[2]}<br>";
}
?>


Buenas, yo le hice unas pequeñas modificaciones a el juego, entre ellas:

  1. Las palabras van hacer aleatorias dentro de una lista de 60 palabras.

  2. Si no logras completar las 3 palabras, no te mostrara cuales son.

  3. Luego de que completes las palabras podrás volver a jugar.

Codigo:

  • index.php
<?php
session_start();
$words = array('sol', 'luna', 'cielo', 'perro', 'gato', 'animales', 'yogur', 'casa', 'silla', 'mesa', 'libro', 'lapiz', 'bolsa', 'zapato', 'reloj', 'agua', 'planta', 'nube', 'pajaro', 'raton', 'mesa', 'piso', 'lago', 'mar', 'arbol', 'pan', 'luz', 'cama', 'mes', 'pastel', 'cuerda', 'cafe', 'manzana', 'limon', 'telefono', 'pescado', 'pulgar', 'rana', 'ratonera', 'sopa', 'tabla', 'uva', 'vaca', 'wifi', 'xilofono');

$numbers_rand = array();
$words_jumbled = array();

if(!isset($_SESSION['numbers_rand'])) {
    for ($i = 0; $i< 3; $i++)
    {
        $number_rand = rand(0,count($words));
        $numbers_rand[$i]= $number_rand;
        $words_jumbled[$i] = str_shuffle($words[$number_rand]);
    }
    $_SESSION['numbers_rand'] = $numbers_rand;
} else {
    $numbers_rand = $_SESSION['numbers_rand'];
    for ($i = 0; $i< 3; $i++) {
        $words_jumbled[$i] = str_shuffle($words[$numbers_rand[$i]]);
    }
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Encuentra la palabra correcta</title>
</head>
<body>
    <h1>¡Bienvenido a el siguiente juego donde le pasaremos palabras desordenadas, y usted tendra que ordenarlas!</h1>
    <div class="palabras_desordenadas"><?php $i = 1; foreach ($words_jumbled as $words_jumbled_print) {
        echo "<h2>$i palabra: $words_jumbled_print \n</h2>";
        $i++;
    }?></div>
    <form action="analyze.php" method="post">
        <input type="text" placeholder="Ingrese la primera palabra" name="word_user_1">
        <input type="text" placeholder="Ingrese la segunda palabra" name="word_user_2">
        <input type="text" placeholder="Ingrese la tercera 	 palabra" name="word_user_3">
        <button>Enviar</button>
    </form>
</body>
</html> 

Notas: La función “session_start” lo que hace en pocas palabras es iniciar una sesión, para almacenar en “$_SESSION” el numero aleatorio, para cuando se envié el formulario, las palabras no se vuelvan a reasignar.

  • analyze.php
<?php
include "index.php"; 
$meter = 1;
$correct = 0;
for ($i=0; $i <count($numbers_rand); $i++) { 
    $words_verify = strtolower($words[$numbers_rand[$i]]);
    $word_user= strtolower($_REQUEST['word_user_' . $meter]);
    if ($word_user == $words_verify) {
        echo "<p>Palabra $meter correcta</p>";
        $correct++;
        if ($correct==3) {
            ?>
            <p>¡Felicidades, has ganado!</p>
            <a href="sing-off.php">Jugar de nuevo</a>
            <?php
        }
    }
    else
    {
        echo "<p>Palabra $meter es incorrecta</p>";
    }
    $meter++;
}

Notas: En este siguiente archivo, lo que se hace es incluir el archivo anterior con la palabra reservada “incluide” para evitar tener que volver a escribir los arrays, y también para poder imprimir los resultados en el archivo anterior.
Aquí es este archivo se hace un ciclo for, para evitar escribir tanto código, y dentro del if de verificación de las dos palabras, hay un if, que comprueba si las 3 palabras fueron ordenadas correctamente, en el caso que sí, se muestra un mensaje de felicitaciones y un link para poder volver a jugar.

  • sing-off.php
<?php
session_start();
session_destroy();
header('Location: index.php');

Notas: Ya en este ultimo archivo, se inicia la sesión, y luego se cierra (para que los datos guardados en ella se borren, y a redireccionar a la pagina de inicio, las palabras no sean las mismas) y luego se manda a la pagina “index.php”.

Aquí dejo mi solución:

main.php :

<?php
    $palabras = ["luna", "cielo", "sol", "estrella"];
    $palabras_desordenadas = [];
    foreach ($palabras as $palabra) {
        array_push($palabras_desordenadas, str_shuffle($palabra));
    }
    $i = 0;
?>

<h1>Juego: Ordena las palabras.</h1>
<form action="analisis.php">
    <?php foreach ($palabras_desordenadas as $palabra) : ?>
        <label for="<?php echo $palabra ?>"><?php echo $palabra ?></label>
        <input type="text" id="<?php echo $palabra ?>" name="<?php echo $i ?>" /></br>
        <?php $i++;?>
    <?php endforeach; ?>
    <button type="submit">Enviar</button>
</form>

analisis.php :

<?php
$palabras = ["luna", "cielo", "sol", "estrella"];

$i = 0;
foreach($_REQUEST as $respuesta) {
    if($respuesta == $palabras[$i]){
        echo "La palabra es correcta";
        echo "<br>";
    } else {
        echo "La palabra es incorrecta, la palabra correcta es: $palabras[$i]";
        echo "<br>";
    }
    $i++;
    

Sería chévere implementar operadores ternarios para cada ejemplo, aunque creo que no se podrá, ya que la sentencia ‘echo’ requiere finalizar la sentencia con punto y coma.

O bueno, a no ser que se implemente una variable adicional tipo string que almacene la respuesta en cada caso.

Dejo el link que encontré sobre este tema aquí.

https://www.geeksforgeeks.org/php-ternary-operator/

Quise aprovechar los ciclos para utilizar menos líneas de código.

main.php

<?php

$word = array("Warcraft", "Samurai");
$unOrderWord = array();
echo '<h1>Find the hide word</h1>';
for ($i=0; $i < count($word); $i++) { 
    $unOrderWord[$i] = str_shuffle(strtolower($word[$i]));
    
    echo '
    <form action="./results.php">
    <label>'.$unOrderWord[$i].'</label>
    <br>
    <input id="name" type="text" name="word'.$i.'" placeholder="Write the correct word">
    <br>
    <br>
    ';
}
echo '<button type="submit">Enviar</button>
    </form>';

results.php

<?php
print_r($_REQUEST);
$word = array("Warcraft", "Samurai");

for ($i=0; $i <count($_REQUEST) ; $i++) { 
    
    if($_REQUEST["word".$i] === strtolower($word[$i])){

        $correctWord = ucwords($word[$i]);
        echo '<p>La palabra '.$correctWord.' es correcta</p>';
    }
    else{

        echo '<p>La palabra '.$_REQUEST["word".$i].' es incorrecta</p>';
    }
}

Que el curso está muy bueno, es chevere interactuar con el html y con los datos que se reciban de un formulario

Les tengo una versión mas cortica de lo que va en php

<?php

print_r($_REQUEST);

$palabrasOrdenadas = ["sol", "luna", "cielo"];

for ($i=0; $i < count($palabrasOrdenadas); $i++) { 
    if ($_REQUEST["palabra".$i] == $palabrasOrdenadas[$i]) {
        echo "<br> La palabra ".$_REQUEST["palabra".$i]. " es correcta";
    }else{
        echo "<br> La palabra ".$_REQUEST["palabra".$i]. " es incorrecta. Estabas buscando la palabras ". $palabrasOrdenadas[$i];
    }
}

Para no tener un código tan amplio en la parte de analisis.php use variables en $_REQUEST[“nombre del input”].
.

<?php

print_r($_REQUEST);
$words = ["sun", "moon", "sky"];


for ($i=0; $i < 3; $i++) { 
    $temp = "word". (string) $i;
    if ($_REQUEST[$temp]==$words[$i]) {
        echo "Correct! <br>";
    }else{
        echo "Wrong answer! R: $words[$i] <br>";
    }
}

Yo hice mi aporte, desde la clase anterior y aquí va, trata de hacerlo un poco más entendible, pero a ver que opinan los compañeros.

  1. Tengo un archivo index.php, donde tengo mi HTML y mis palabras.
<?php
	$words = array('auto', 'arbol', 'pelota');
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Microproyecto</title>
  <style>
    .ml-1 {
      margin-left: 1rem;
    }
    .mb-1 {
      margin-bottom: 1rem;
    }
  </style>
</head>
<body>
  <h1>Ordena las siguientes palabras y envia la solicitud</h1>
  <form method="post" action="./action.php">
    <?php
    foreach ($words as $word) {
      echo str_shuffle($word) . "<input class='ml-1 mb-1' type='text' required name='$word' /><br>";
    }
    ?>
    <button type="submit">Revisar</button>
  </form>
</body>
</html>
  1. Tengo mi action.php que se encarga de verificar si las palabras son correctas
<?php

// print_r($_REQUEST);

// Recorremos la request y obtenemos tanto su key que tiene su valor original y su valor que ha ingresado el usuario
foreach ($_REQUEST as $key => $value) {
  if ($key === $value) {
    echo "La palabra $value que se ingreso es correcta <br>";
  } else {
    echo "La palabra ingresada es incorrecta, la palabra correcta es $key <br>";
  }
}

echo "<br>";

main.php

<?php

$palabras = ["Limon","Manzana", "Pera"];
$palabrasDesordenadas = array();


for($i = 0; $i < count($palabras); $i++){

    $palabrasDesordenadas[$i] = str_shuffle($palabras[$i]);
}


print_r($palabrasDesordenadas); // imprimimos el array con print_r()

echo "
<form  action='validar.php'>

<label> Palabra en la posicion 0 </label> <input  type = 'text' name = 'valorPosicion0'> <br>
<label> Palabra en la posicion 1 </label> <input  type = 'text' name = 'valorPosicion1'> <br>
<label> Palabra en la posicion 2 </label> <input  type = 'text' name = 'valorPosicion2'> <br>
<button type='submit'>Enviar</button>

</form>
";

Validar. php

<?php

print_r($_REQUEST);

$palabras = ["Limon","Manzana", "Pera"];

if($_REQUEST['valorPosicion0'] == $palabras[0]){
    echo "La palabras que escribiste es correcta ";
}
    else{
        echo " La palabra que escribiste es incorrecta, vuelve a intentarlo ";
    }

    if($_REQUEST['valorPosicion1'] == $palabras[1]){
        echo "La palabras que escribiste es correcta ";
    }
        else{
            echo " La palabra que escribiste es incorrecta, vuelve a intentarlo ";
        }

        if($_REQUEST['valorPosicion2'] == $palabras[2]){
            echo "La palabras que escribiste es correcta ";
        }
            else{
                echo " La palabra que escribiste es incorrecta, vuelve a intentarlo ";
            }
<?php
    $palabras=["enredadera","sombra","hoja"];
    $retos=["endararede","brosam","ahjo"];
    $envio = $_REQUEST;
    $contador = 0;
    foreach($envio as $a){
        if($a == $palabras[$contador]){
            echo "<br>La palabra ".$a." es correcta<br>";
        }
        else{
            echo "<br>La palabra ".$a." es incorrecta<br>";
        }
        $contador += 1;
    }


?>

Muy confuso el video, no explica como se añaden los elementos a la array $palabrasDesordenadas. Lo tuve que detener y mirar varias veces para entenderlo, y no me considero tonto

Mi aporte de analisis.php

<?php

print_r($_REQUEST);

$palabras = [
    "hola",
    "mundo",
    "auto"
];

echo "<br>";

for($i=0; $i<3 ; $i++) {
    if ($palabras[$i] == $_REQUEST["palabra".$i]) {
        echo "la palabra $palabras[$i] es correcta <br>";
    } else {
        echo "la palabra " . $_REQUEST['palabra'.$i] . " es in-correcta <br>";
    }
}

analisis.php
// print_r($_REQUEST);

$palabras = array(“sol”, “luna”, “cielo”);

if($_REQUEST[“palabra0”] == $palabras[0]){
echo “La palabra ingresada es correcta” ."<br>";
} else {
echo “La palabra ingresada es incorrecta, la palabra correcta es: " .$palabras[0] .”<br>";
}

if($_REQUEST[“palabra1”] == $palabras[1]){
echo “La palabra ingresada es correcta” ."<br>";
} else {
echo “La palabra ingresada es incorrecta, la palabra correcta es: " .$palabras[1] .”<br>";
}

if($_REQUEST[“palabra2”] == $palabras[2]){
echo “La palabra ingresada es correcta” ."<br>";
} else {
echo “La palabra ingresada es incorrecta, la palabra correcta es: " .$palabras[2] .”<br>";
}