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

Microproyecto: Juego de ordenamiento de palabras, diseño de flujo y algoritmo

11/17
Recursos

Aportes 21

Preguntas 0

Ordenar por:

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

Hago el intento antes de pasar a la siguiente clase:

<?php
$palabras=["enredadera","sombra","hoja","pasto","edificio","gatos"];
$retos=["endararede","brosam","ahjo","taspo","ifecoidi","gosta"];

$respuestas = ($_REQUEST !== null) ? $_REQUEST : "";
if($respuestas) {
    $indice = 0;
    foreach($respuestas as $respuesta) {
        $correcta=$palabras[$indice++];
        if($respuesta == $correcta) {
            echo "<strong>$respuesta</strong>: ¡Respuesta correcta! :) <br>";
        }else {
            echo "<strong>$respuesta</strong>: ¡Incorrecto! :( La respuesta es: " . $correcta . "<br>";
        }
    }
    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>
    <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 ."'></p>";
        }
    ?>
        <button type="submit">Enviar</button>
    </form>
</body>
</html>

Tambien hago el intento antes de seguir:

<?php

$palabras = [
    'hola',
    'auto',
    'tenis',
    'messi'
];

$respuestas = [];
$respuestas[] = $_REQUEST['p1'];
$respuestas[] = $_REQUEST['p2'];
$respuestas[] = $_REQUEST['p3'];
$respuestas[] = $_REQUEST['p4'];

$i = $correctas = 0;
$incorrectas = [];
foreach($respuestas as $res) {
    ($res === $palabras[$i] && in_array($res, $palabras)) 
        ? $correctas++ 
        : $incorrectas[$i] = $res; 
    $i++;
}

echo "Las incorrectas son: <br/>";
foreach($incorrectas as $key => $val) {
    echo '<li>' . $val . ' => ' . $palabras[$key] . '<br/>';
}

$total = count($palabras);
echo "Respuestas correctas: ${correctas} de ${total}"; 

Carga de datos:

Resultados:

Lo hice asi:

$palabrasOrden = array("txt1" => "amor", "txt2" => "rio", "txt3" => "paz"); 

foreach ($_REQUEST as $clave => $texto){
    if($texto == $palabrasOrden[$clave]){
        echo "$texto : Correcto <br>"; 
    }else{
        echo "la palabra correcta era: $palabrasOrden[$clave] - escribiste : $texto <br>"; 
    }
}

Sobre PHP y su Scope

Seguramente si vienes de otro lenguaje como Js y estas jugando con las funciones ya te encontraste con el mismo problema que yo el scope aqui php no es tan permisivo al parecer pero no te preocupes te dare un poco mas de contexto
Ve mi espacio en NOTION
https://bronze-risk-958.notion.site/Practica-y-mas-fundamentos-4af321cbc54d426abd1d01bd224888a9

Me quedé en el array de palabras desordenadas

<?php
$palabras = ["armario", "feriado", "colegio", "oficina", "azulejo"];
$palabras_barajadas = [];

foreach ($palabras as $barajar) 
    array_push($palabras_barajadas, str_shuffle($barajar));

var_dump( $palabras_barajadas);
?>

Hice mi intento con lo que entendí de la descripción. Me quedó diferente a lo que la profe luego explicó que debía ser el juego. Hice mi juego para ser utilizado en consola, donde el usuario tiene 6 intentos para adivinar correctamente cuál es la palabra.
Comparto mi código:

<?php

$words = ["Lampara", "Esquina", "Cuadrado", "Aguja", "Panel", "Juguete", "Avion", "Carro", "Pelicula", "Esternocleidomastoideo"];

$randomWord = $words[rand(0, count($words) - 1)];

$shuffledWord = str_shuffle($randomWord);
$totalAttempts = 6;

echo "Bienvenido al juego 🤡" . PHP_EOL;
echo "Te voy a dar una palabra desordenada. Tu tarea es adivinar cuál es la palabra correcta." . PHP_EOL;
echo "La palabra es: '$shuffledWord'. Tienes $totalAttempts intentos." . PHP_EOL;
echo "\n";

do {
  $userAttempt = trim(strtolower(readline("Escribe aquí tu palabra: " . PHP_EOL)));
  if ($userAttempt === strtolower($randomWord)) {
    echo "Lo lograste! 😄" . PHP_EOL;
    break;
  } else {
    $totalAttempts--;
    if (!$totalAttempts)
      break;
    echo "Buen intento, pero no. Te " .
      ($totalAttempts === 1 ? 'queda' : 'quedan') .
      " $totalAttempts " .
      ($totalAttempts === 1 ? 'intento' : 'intentos') . PHP_EOL;
  }
} while ($totalAttempts > 0);

if ($totalAttempts === 0) {
  echo PHP_EOL . "Perdiste :( La palabra era '$randomWord'" . PHP_EOL;
}

he a qui la forma en como lo hice.

<?php

/*
	Lista de palabras
	Mostra lista de palabras desordenadas
	solicitar ingresar palabras ordenadas al usuairo
	mostrar resultado
*/

//Lista de palabras
$palabras = ["Hallking", "Quesada", "Medina"];


$palabrasCorrectas = [];
$palabrasIncorrectas = [];

foreach ($palabras as  $value) {

	//Desordenar palabras
	echo 

	//Solicitamos el ingreso de la palabra.
	$palabraOrdenada = readline("Ingresa la siguiente palabra en el orde correto '". str_shuffle($value)."'\n");

	//Asignamos la palabra a el array correcto o incorrecto segun corresponda.
	if($palabraOrdenada == $value)
		array_push($palabrasCorrectas, $value);
	else
		array_push($palabrasIncorrectas, $value);

}

echo "\n\n";

//Mostramos el resultado de las palabras correctas
echo "Tus palabras correctas fueron\n";

foreach ($palabrasCorrectas as $value) {
	echo "\n".$value."\n";
}

//Mostramos el resultado de las palabras incorrectas
echo "\nTus palabras incorrectas fueron\n";

foreach ($palabrasIncorrectas as $value) {
	echo "\n".$value."\n";
}

echo "\n\n";

Hice el intento antes de seguir con las clases:

Aqui esta mi pequeño aporte. 😃

voy al curso de html por que nose nada desde esta clase 12 asta la clase 17

Mi intento

<?php
define('PAROLE', [
    'scoula', 'giorno', 'nipote', 'raconto'
]);
$resp = [];
if (!empty($_POST)) {
    $i = 0;
    foreach (constant('PAROLE')  as $key => $value) {
        if ($value == $_POST['parole' . $i]) {
            array_push($resp, "Correcto");
        } else {
            array_push($resp, "Incorrecto");
        }
        $i++;
    }
}
?>
<!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>Document</title>
    <style>
        * {
            border: none;
            border-radius: 4px;
        }

        .card {
            background-color: pink;
            padding: 4px;
            margin: auto;
            width: 500px;
        }

        .card .form-group {
            margin: 4px;
            padding: 4px;
            background-color: blue;
            display: flex;
            font-size: 28px;

        }

        .card .form-group label,
        .card .form-group input {
            width: 50%;
            display: flex;
            justify-content: center;
        }

        .card .row .btn-primary {
            border: none;
            background-color: plum;
            width: 148px;
            padding: 5px;
            font-size: 30px;
            margin: 4px;
            cursor: pointer;
            font-size: 28px;

        }

        span {
            font-weight: bold;
        }
    </style>
</head>

<body>
    <div class="card">
        <form action="parole.php" method="POST">
            <?php
            $i = 0;
            foreach (constant('PAROLE') as $key => $value) :
            ?>
                <div class="form-group">
                    <label for="<?= $i ?>"> <?= str_shuffle($value); ?> </label>
                    <input type="text" id="<?= $i ?>" name="parole<?= $i ?>">
                </div>
            <?php
                $i++;
            endforeach; ?>
            <div class="row">
                <button type="submit" class="btn btn-primary">Send</button>
            </div>
        </form>
        <?php
        if (!empty($_POST) && !empty($resp)) :
        ?>
            <div class="row">
                <ul>
                    <?php
                    $j = 0;
                    foreach ($resp as $key => $value) :
                    ?>
                        <li> <span><?= $value ?></span> Tu escribiste <span><?= $_POST['parole' . $j] ?></span> y la respuesta es: <?= constant('PAROLE')[$j] ?></li>
                    <?php
                        $j++;
                    endforeach;
                    ?>
                </ul>
            </div>
        <?php
        endif;
        ?>
    </div>
</body>

</html>

<?php
$palabras = array(‘Idania’, ‘Omar’, ‘Orion’, ‘Meraki’, ‘Eduardo’);

//echo sizeof($palabras); //Comprueba la longitud del arreglo, aka cantidad de palabras

shuffle ($palabras); //Revuelve las palabras, para evitar que sea repetitivo

if(isset($_POST[‘picafresa’])){
for($i = 0; $i < sizeof($palabras); $i++){
//Esto automatiza la captura de los input texts generados automáticamente en el caso false del if
$NombreOk = “palabraOk$i”;
$Nombre = “palabra$i”;

    //Muestra para ver que todo está bien
    //echo $NombreOk."<br>";
    //echo $Nombre."<br>";

    //Atrapa los valores enviados en el form usando los nombres de los inputs y asigna sus valores en las palabras correspondientes
    $palabraOk = $_POST[$NombreOk];
    $palabra = $_POST[$Nombre];
    //echo $palabraOk."<br>";
    //echo $palabra."<br>";

    //Comenzamos la evaluación con de lo ingresado
    echo "Palabra: $palabraOk, ingresaste $palabra. Resultado: ";       //Mensaje para el jugador
    if($palabraOk == $palabra){     //Evalua si las palabras son iguales para determinar si ganó o no
        echo "Correcto<br>";
    }else{
        echo "Incorrecto<br>";
    }
}

}else{
//Crear el formulario
echo “
<form method=‘post’>
Acomoda las palabras y gana una picafresa:”;
for($i = 0; $i < sizeof($palabras); $i++){
//echo $palabras[$i]."<br>"; //Mostrar la palabra a jugar

    //$longPalabra = strlen($palabras[$i]);             //Muestra la cantidad de palabras que hay en el juego
    $palabraRevuelta = str_split($palabras[$i],1);      //Convertimos la palabra en arreglo para seguir usando shuffle
    
    shuffle($palabraRevuelta);                          //Revuelve la palabra
    $palabraRevuelta = implode($palabraRevuelta);       //Convierte de nuevo arreglo a string para poder usarlo en echo

    //Bonito mensaje para el jugador con un cuadro escondido con la respuesta y otro a la vista para lo escrito por el jugador
    echo " 
        <br>
        $palabraRevuelta 
        <input type='text' name='palabraOk$i' value='$palabras[$i]' hidden >
        <input type='text' name='palabra$i'>
        <br>
        ";
}
//Termian el formulario con el botón que cambia el comportamiento de la página
echo "
<input type='submit' name='picafresa' value='Picafresa'>
</form>";

}
//sizeof me da el tamaño de los arreglos

die;

$Palabra = “Omar”;
$Long = strlen($Palabra);
$Palabra = str_split($Palabra,1);

echo “Caracteres: “.$Long.”<br>”;
echo $Palabra[0]."<br>";
echo $Palabra[1]."<br>";
echo $Palabra[2]."<br>";
echo $Palabra[3]."<br>";

die;

for ($i=0; $i < 4; $i++) {
echo $palabras [$i]."<br>";
/if ($i < 3) {
echo ", ";
}
/
}

/*
if(shuffle($Palabra)){
echo “Revuelto”;
}else{
echo “No revuelto”;
}
echo $Palabra."<br>";
*/

die;

//conteo inicia en la posicion 0, el conteo ninaliza en la posicion menor a 4 y el conteo incrementa
for ($i=0; $i < 4; $i++) {
$palabras [$i];
/if ($i < 3) {
echo ", ";
}
/
}
echo “\n”;

shuffle ($palabras);

foreach ($palabras as $palabrades){
echo “$palabrades “.”\n”;
}

#Para esté código me apoyaron por que me resulto complejo
?>

Buenos día,

Desarrolle el problema de la siguiente manera:

<?php

$data = $_REQUEST;

$palabrasCorrectas = [
    "palabraUna" => "sol",
    "palabraDos" => "carro",
    "palabraTres" => "elefante"
];


foreach($data as $propiedad => $valor) {
    if($propiedad === "palabraUna") {
        if($valor === $palabrasCorrectas[$propiedad]) {
            echo "Palabra correcta! escribiste: $valor y la palabra que esperabamos es: {$palabrasCorrectas[$propiedad]}";
            echo "<br>";
        } else {
            echo "Escogio la palabra incorrecta: $valor";
            echo "<br>";
        }
    }
    if($propiedad === "palabraDos") {
        if($valor === $palabrasCorrectas[$propiedad]) {
            echo "Palabra correcta! escribiste: $valor y la palabra que esperabamos es: {$palabrasCorrectas[$propiedad]}";
            echo "<br>";
        } else {
            echo "Escogio la palabra incorrecta: $valor";
            echo "<br>";
        }
    }
    if($propiedad === "palabraTres") {
        if($valor === $palabrasCorrectas[$propiedad]) {
            echo "Palabra correcta! escribiste: $valor y la palabra que esperabamos es: {$palabrasCorrectas["$propiedad"]}";
            echo "<br>";
        } else {
            echo "Escogio la palabra incorrecta: $valor";
            echo "<br>";
        }
    }
}

<?php

$edades = [
4,
5,
7,
10,
‘undefined age’
];

function espacios_correspondientes_en_la_bodega (array $edades) {
for ($i = 0; $i < count($edades); $i++) {
if(is_int($edades[$i])) {
if ($edades[$i] < 5) {
echo “<br>guarde sus juguetes en la parte inferior de la bodega.<br>”;
} elseif ($edades[$i] >= 5 && $edades[$i] <= 7) {
echo “<br>guarde sus juguetes en la parte media de la bodega.<br>”;
} else {
echo “<br>guarde sus juguetes en la parte alta de la bodega.<br>”;
}
} else {
echo “<br>guarde sus juguetes en la bodega de al lado.<br>”;
}
}
}

espacios_correspondientes_en_la_bodega ($edades);

Esta es mi solución, la hice de tal manera que escogiese unas palabras aleatorias dentro del array de palabras y también que generase aleatoriamente el desorden de cada palabra, se generan los inputs dependiendo de la cantidad de palabras necesaria

<?php
    function get_palabras($cantidad = 3){
        $shuffled = $GLOBALS['palabras'];
        shuffle($shuffled);
        return array_slice($shuffled,0,$cantidad);
    }

    function shuffle_palabras($palabras){
        for($i = 0; $i < count($palabras); $i++){
            $palabra = $palabras[$i];
            $palabra = str_split($palabra);
            shuffle($palabra);
            $palabra = implode('',$palabra);
            $palabras[$i] = $palabra;
        }
        return $palabras;
    }

    $palabras = ["hola", "prueba", "tienda", "gato", "perro"];
    $correctas = [];
    $display = [];
    $shuffled = [];
    $posted = false;
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        if(isset($_POST['btn'])){
            $posted = true;
            unset($_POST['btn']);
            foreach(array_keys($_POST) as $key){
                $split = explode('|',$key);
                array_push($display,$split[0]);
                array_push($correctas,($_POST[$key] == $palabras[$split[1]]));
                array_push($shuffled,$palabras[$split[1]]);
            }
        }
        else if(isset($_POST['reset'])){
            $shuffled = get_palabras();
            $display = shuffle_palabras($shuffled);
        }
    }
    else{
        $shuffled = get_palabras();
        $display = shuffle_palabras($shuffled);
    }

    #print_r($_REQUEST);
?>

<!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>Shuffle Words</title>
</head>
<body>
    <form action="" method="post">
        <?php for($i=0;$i<count($display);$i++): ?>
            <?php $palabra = $display[$i];?>
            <p><?=$palabra?></p>   
            <?php if($posted): ?> 
                <?php if(!$correctas[$i]): ?>
                    <p style="color:red;">Equivocada</p>
                <?php else:?>
                    <p style="color:green;">Correcta</p>
                <?php endif; ?>
            <?php endif; ?>
            <input type="text" name=<?="$palabra|".array_search($shuffled[$i],$palabras)?>>
        <?php endfor; ?>
        <br/>
        <br/>
        <input type="submit" name="btn" value="Enviar"/>
        <input type="submit" name="reset" value="Reiniciar"/>
    </form>
</body>
</html>

Es una logica algo basica

Yo creo que el problema esta bien, sin embargo, para poder comprender un planteamiento del problema se requiere una redacción perfecta para que se pueda interpretar.

Cuando dice en el planteamiento: Desarrollar una aplicación que muestre una lista de palabras en desorden se piensa que ordenada alfabéticamente esas palabras hasta que se explica el segundo punto ya puedes inferir que la palabra x es la que se van a desordenar sus letras para que el usuario busque esta.

Comparto mi solución, lo hice dinámico (cada vez que se añade una nueva palabra al array $palabras se crea un nuevo label, un input y también se hace la validación al final

index.php

<form action="resultados.php" method="POST">

    <?php

    $palabras = ["sol", "luna", "cielo", "tierra", "mar", "aire", "agua", "nube"];
    
    session_start();
    $_SESSION["palabras"] = $palabras;

    foreach ($palabras as $palabra) {
      $nuevaPalabra = str_shuffle($palabra);
    ?>
      <label><?php echo $nuevaPalabra ?></label>
      <input type="text" name="palabraIngresada<?php echo array_search($palabra, $palabras); ?>"><br><br>

    <?php
    }
    ?>

    <button type="submit">Listo</button>

  </form>

Los resultados se muestran en:
resultados.php

session_start();
$palabrasCorrectas = $_SESSION["palabras"];

foreach ($palabrasCorrectas as $palabraCorrecta) {
  $palabraIngresada = $_POST["palabraIngresada" . array_search($palabraCorrecta, $palabrasCorrectas)];

  if ($palabraIngresada == $palabraCorrecta) {
    echo "¡<b>$palabraIngresada</b> es correcta! <br>";
  } else {
    echo "¡<b>$palabraIngresada</b> es incorrecta! La palabra correcta es <b>$palabraCorrecta</b> <br>";
  }
}

Comparto mi solución. Agradezco sus comentarios 😄

<?php
/* descubrir palabra */
$palabraAdescubrir = "gorra";
echo str_shuffle($palabraAdescubrir);
?>
<p>¿Qué palabra es?</p>
<form action="">
<input type="text" name="palabra">
<input type="submit">
</form>

<?php
if(!empty($_GET['palabra'])){
    $palabra = $_GET['palabra'];
    echo $palabra;
        if ($palabra == $palabraAdescubrir){
            echo "<br><br>¡Correcto!";
        }else{
            echo "<br><br>Has fallado. intenta nuevamente";
        }
}
?>

Me falto la parte HTML pero aqui en el PHP, el array se desordena automaticamente (el orden) y aleatorio y con las palabras tambien las desordena automaticamente. Se pudo hacer de mejor forma pero de esta fue la que pude

<?php

$arraylist = array("Avion", "Carro", "Moto", "Monagas", "Cueva", "Cielo", "Cuba", "Guitarra");
$word_array = array_rand($arraylist, 1);
$word_array2 = array_rand($arraylist, 1);
$word_array3 = array_rand($arraylist, 1);

if ($word_array == $word_array2){
    $word_array = array_rand($arraylist, 1);
    if($word_array == $word_array){
        $word_array = array_rand($arraylist, 1);
    }
}else if ($word_array2 == $word_array3){
    $word_array2 = array_rand($arraylist, 1);
    if($word_array2 == $word_array3){
        $word_array2 = array_rand($arraylist, 1);
    }
}else if ($word_array3 == $word_array){
    $word_array3 = array_rand($arraylist, 1);
    if($word_array3 == $word_array){
        $word_array3 = array_rand($arraylist, 1);
    }
}

$result = [$arraylist[$word_array]];
$result2 =  [$arraylist[$word_array2]];
$result3 =  [$arraylist[$word_array3]];

function word_change($resultado){
    $result1 = implode($resultado);
$accion = str_shuffle($result1);
 if($accion == $result1){
     $accion = str_shuffle($result1);
}
    return $accion. "\n";
}
echo word_change($result);
echo word_change($result2);
echo word_change($result3);
?>```

<?php
//Se hace un arreglo con las palabras ordenadas
$palabras = [‘castillo’,‘plato’, ‘hogar’];
//Se debe de recibir lo ingresado en el input a través de la palabra reservada REQUEST
$palabrasR = [];
$palabrasR[] = $_REQUEST[‘p1’];
$palabrasR[] = $_REQUEST[‘p2’];
$palabrasR[] = $_REQUEST[‘p3’];

//Inicializamos las correctas en 0
$i = $correctas = 0;
$incorrectas = [];

foreach($palabrasR as $response) {
($response === $palabras[$i] && in_array($response, $palabras))
? $correctas++
: $incorrectas[$i] = $response;
$i++;
}
echo ‘RESPUESTAS:<br>’;
foreach($incorrectas as $t => $v) {

echo '<list>Ingresasate ' . $v . ' y era <b>' . $palabras[$t] . '</b><br/>';

}

$total = count($palabras);
echo “Tienes ${correctas} respuesta/as buena/as de ${total}.”;

?>