Escriba un programa que muestre un número aleatorio de imágenes de animales.
// Nos unimos a la sesión
session_name("memorion-1");
session_start();
// Si no están definidas las variables de sesión, redirigimos a la segunda página
if (!isset($_SESSION["numeroDibujos"]) || !isset($_SESSION["dibujos"])) {
header("Location:memorion-1-2.php");
exit;
}
// Si no están definidas las variables de sesión, las definimos
if (!isset($_SESSION["numeroDibujos"]) || !isset($_SESSION["dibujos"])) {
// Número de dibujos en la sesión
$_SESSION["numeroDibujos"] = rand(4, 20);
// Matriz con todos los valores posibles (61 valores)
$valores = range(128000, 128060);
// Los barajamos
shuffle($valores);
// Guardamos los N primeros (N es el número de dibujos)
for ($i = 0; $i < $_SESSION["numeroDibujos"]; $i++) {
$_SESSION["dibujos"][$i] = $valores[$i];
}
}
// Si se ha pulsado "Nueva partida" ...
if ($accion == "nueva") {
// ... borramos la partida actual
unset($_SESSION["numeroDibujos"], $_SESSION["dibujos"]);
// ... y redirigimos a la primera página
header("Location:memorion-1-1.php");
exit;
}
Añada al programa anterior dos páginas para permitir al usuario modificar el número de imágenes.
// Si no está guardado en la sesión el número de dibujos ....
if (!isset($_SESSION["numeroDibujos"])) {
// ... guardamos el número de dibujos en la sesión
$_SESSION["numeroDibujos"] = 5;
}
// Si no están definidos en la sesión los dibujos de la partida ....
if (!isset($_SESSION["dibujos"])) {
// Matriz con todos los valores posibles (61 valores)
$valores = range(128000, 128060);
// Los barajamos
shuffle($valores);
// Guardamos los N primeros (N es el número de dibujos)
for ($i = 0; $i < $_SESSION["numeroDibujos"]; $i++) {
$_SESSION["dibujos"][$i] = $valores[$i];
}
}
// Mostramos los dibujos seleccionados en botones
for ($i = 0; $i < $_SESSION["numeroDibujos"]; $i++) {
print " <button type=\"button\" style=\"font-size: 70px; width: 100px; height: 100px;\">{$_SESSION["dibujos"][$i]};</button> \n";
}
// Si se ha pulsado "Cambiar número de dibujos" ...
if ($accion == "numero") {
// ... redirigimos al formulario correspondiente
header("Location:memorion-2-3.php");
exit;
}
// Mostramos el control numérico con el número de dibujos actual
print " <p><input name=\"numeroDibujos\" type=\"number\" value=\"$_SESSION[numeroDibujos]\" min=\"2\" max=\"61\"></p>\n";
// Validamos el dato recibido, sin hacer nada si el dato no es válido
if ($numeroDibujos == "") {
} elseif (!is_numeric($numeroDibujos)) {
} elseif (!ctype_digit($numeroDibujos)) {
} elseif ($numeroDibujos < 2 || $numeroDibujos > 61) {
} else {
$numeroDibujosOk = true;
}
// Si no están definidas las variables de sesión, redirigimos a la segunda página
if (!isset($_SESSION["numeroDibujos"]) || !isset($_SESSION["dibujos"])) {
header("Location:memorion-2-2.php");
exit;
}
// Si el dato es válido ...
if ($numeroDibujosOk) {
// ... cambiamos el número de dibujos
$_SESSION["numeroDibujos"] = $numeroDibujos;
// Borramos la partida
unset($_SESSION["dibujos"]);
// Redirigimos a la segunda página
header("Location:memorion-2-2.php");
exit;
}
// Redirigimos a la tercera página
header("Location:memorion-2-3.php");
Modifique el programa anterior de manera que:
// Si no están definidos en la sesión los dibujos de la partida ....
if (!isset($_SESSION["dibujos"])) {
// Matriz con todos los valores posibles (61 valores)
$valores = range(128000, 128060);
// Los barajamos
shuffle($valores);
// Guardamos los N primeros (N es el número de dibujos)
for ($i = 0; $i < $_SESSION["numeroDibujos"]; $i++) {
$_SESSION["dibujos"][$i] = $valores[$i];
}
// Duplicamos los valores (creamos valores de N a 2N-1)
for ($i = 0; $i < $_SESSION["numeroDibujos"]; $i++) {
$_SESSION["dibujos"][$_SESSION["numeroDibujos"] + $i] = $valores[$i];
}
// Los barajamos de nuevo
shuffle($_SESSION["dibujos"]);
// Guardamos las fichas boca abajo
for ($i = 0; $i < 2 * $_SESSION["numeroDibujos"]; $i++) {
$_SESSION["lado"][$i] = "dorso";
}
}
// Mostramos los dibujos seleccionados en botones
for ($i = 0; $i < 2*$_SESSION["numeroDibujos"]; $i++) {
// La ficha puede estar boca arriba (se ve el dibujo del animal) ...
if ($_SESSION["lado"][$i] == "dibujo") {
print " <button type=\"submit\" name=\"gira\" value=\"$i\" style=\"font-size: 70px; width: 100px; height: 100px;\">&#{$_SESSION["dibujos"][$i]};</button> \n";
} else { // ... o boca abajo (se ve el dibujo del dorso)
print " <button type=\"submit\" name=\"gira\" value=\"$i\" style=\"font-size: 70px; width: 100px; height: 100px; color: black;\">✪</button> \n";
}
}
// Si el dato es válido ...
if ($giraOk || $accionOk) {
// Si se ha pulsado "Nueva partida" ...
if ($accion == "nueva") {
// ... borramos la partida actual
unset($_SESSION["dibujos"]);
// ... y redirigimos a la primera página
header("Location:memorion-3-1.php");
exit;
}
// Si se ha pulsado "Cambiar número de dibujos" ...
if ($accion == "numero") {
// ... redirigimos al formulario correspondiente
header("Location:memorion-3-3.php");
exit;
}
// Si se ha pulsado una ficha, damos la vuelta a la ficha
$_SESSION["lado"][$gira] = $_SESSION["lado"][$gira] == "dibujo" ? "dorso" : "dibujo";
}
// Redirigimos a la primera página
header("Location:memorion-3-1.php");
Modifique el programa anterior de manera que:
// Si se ha pulsado una ficha que está boca abajo ...
if ($_SESSION["lado"][$gira] == "dorso") {
// ... la giramos
$_SESSION["lado"][$gira] = "dibujo";
// Si no hay ninguna ficha girada ...
if ($_SESSION["primera"] == -1) {
// ... guardamos qué ficha hemos girado
$_SESSION["primera"] = $gira;
// Si hay sólo una ficha girada ...
} elseif ($_SESSION["primera"] != -1 && $_SESSION["segunda"] == -1) {
// ... guardamos qué ficha hemos girado
$_SESSION["segunda"] = $gira;
// Si ya hay dos giradas ...
} elseif ($_SESSION["primera"] != -1 && $_SESSION["segunda"] != -1) {
// ... damos la vuelta a las dos fichas anteriores
$_SESSION["lado"][$_SESSION["primera"]] = "dorso";
$_SESSION["lado"][$_SESSION["segunda"]] = "dorso";
// Y guardamos esa ficha como primera ficha de la jugada siguiente
$_SESSION["primera"] = $gira;
$_SESSION["segunda"] = -1;
}
Modifique el programa anterior de manera que:
// Si hay sólo una ficha girada ...
} elseif ($_SESSION["primera"] != -1 && $_SESSION["segunda"] == -1) {
// ... guardamos qué ficha hemos girado y aumentamos el contador de jugadas
$_SESSION["segunda"] = $gira;
$_SESSION["jugadas"] += 1;
// Si ya hay dos giradas ...
} elseif ($_SESSION["primera"] != -1 && $_SESSION["segunda"] != -1) {
// Si son diferentes
if ($_SESSION["dibujos"][$_SESSION["primera"]] != $_SESSION["dibujos"][$_SESSION["segunda"]]) {
// ... damos la vuelta a las dos fichas
$_SESSION["lado"][$_SESSION["primera"]] = "dorso";
$_SESSION["lado"][$_SESSION["segunda"]] = "dorso";
}
// Guardamos esa ficha como primera ficha de la jugada siguiente
$_SESSION["primera"] = $gira;
$_SESSION["segunda"] = -1;
}
// Mostramos el número de jugadas realizadas
print " <p>Jugadas realizadas: $_SESSION[jugadas]</p>\n";