【发布时间】:2022-02-14 02:03:04
【问题描述】:
我创建了一个带有 php 会话的策划游戏。我以 contador 的名义存储了一个柜台。
当我每次用户尝试输入这样的输入时尝试迭代和打印时: 1。你的数字是... 2. 你的号码是... 3. 你的号码是……等等
我收到此错误:
! ) 注意:尝试访问第 64 行 C:\xampp\htdocs\PhpProject4\juego.php 中 int 类型值的数组偏移量
这是会话代码
// abrimos sesion siempre arriba del todo php para que no de errores
session_start();
// initialize session variables
$_SESSION['logged_in_user_id'] = '1';
$_SESSION['logged_in_user_name'] = 'Paco';
//recogo los datos enviados por el metodo post
if (isset($_POST["enviar"])) {
//compruebo que no esten vacios los datos
if (($_POST['numero1'] === '') && ($_POST['numero2'] === '') && ($_POST['numero3'] === '') && ($_POST['numero4'] === '')) {
//si estan vacios me sale el error siguiente y me muestra un boton para volver atras
echo "Tienes que escribir numeros";
?>
<html lang="es">
<head>
<title>Juego Mastermind</title>
</head>
<body>
<br>
<a href="juego.php">Volver</a>
</body>
</html>
<?php
} else {
//if(is_numeric){
//guardo cada numero en una variable
$_SESSION['numero1'] = $_POST['numero1'];
$_SESSION['numero2'] = $_POST['numero2'];
$_SESSION['numero3'] = $_POST['numero3'];
$_SESSION['numero4'] = $_POST['numero4'];
//le doy +1 a contador y lo guardo en sesion
if (!isset($_SESSION['contador'])){
$_SESSION['contador'] = 1;
}else{
$_SESSION['contador']+=1;
}
//declaro el array
$numerosPedidos = [];
//meto los datos en el array
array_push($numerosPedidos, $_SESSION['numero1'], $_SESSION['numero2'], $_SESSION['numero3'], $_SESSION['numero4']);
//guardo el array de numeros pedidos
$_SESSION['numerosPedidos'] = $numerosPedidos;
//recibo el array de numeros aleatorios
$arrayAleatorios = $_SESSION['numerosAleatorios'];
//paso heridos y muertos al otro archivo php
$_SESSION['muertos'] = buscarMuertos($numerosPedidos, $arrayAleatorios);
$_SESSION['heridos'] = buscarHeridos($numerosPedidos, $arrayAleatorios);
//session_destroy();
//vuelvo al php juegos donde vuevlo a comprobar y muestro datos por pantalla
header("Location:juego.php");
}
}
//funcion buscar muerto que devuelvo la cantidad
function buscarMuertos($numerosPed, $numerosAle)
{
//declaro el numero de muertos
$muertos = 0;
//hago un bucle para comprobar que esten en la misma posicion
for ($i = 0; $i < 4; $i++) {
if ($numerosPed[$i] == $numerosAle[$i]) {
$muertos++;
}
}
return $muertos;
}
//funcion buscar heridos que devuelve la cantidad
function buscarHeridos($numerosPed, $numerosAle)
{
//declaro el numero de heridos
$heridos = 0;
//hago un bucle para comprobar numero de heridos
for ($i = 0; $i < 4; $i++) {
//primero comprouebo que el numero que quiero esta en ambos arrays
if (in_array($numerosPed[$i], $numerosAle)) {
//despues comrpuebo que esos numeros esten en posiciones diferentes
if ($numerosPed[$i] != $numerosAle[$i]) {
$heridos++;
}
}
}
return $heridos;
}
这是游戏代码
<?php
//abrimos sesion al principio para que no falle
session_start();
$usuario = $_SESSION['usuario'];
//compruebo que entre datos de usuario para acceder, si no da error y termina el programa
if ($usuario == null || $usuario = "") {
echo "Debes escribir un nombre de usuario para acceder";
die();
}
/* Si no existe la varaible numeroaleatorios dentro de la sesion la creo, en caso contrario la mantengo para que no cambie el numero
cada vez que cambio de sesion*/
if (!isset($_SESSION['numerosAleatorios'])) {
//generamos los numeros con un rango del 0 al 9 y los guardo en un array de forma aleatoria
$numeros = range(0, 9);
shuffle($numeros);
//los hacemos aleatorios en un array pero tienen 9 posiciones por lo que solo voy a usar las 4 primeras y son las unicas que extraigo
for ($i = 0; $i < 4; $i++) {
$aleatorios[$i] = $numeros[$i];
}
//creo el array para enviarlo a sesion.php y alli hacer comprobaciones
$_SESSION['numerosAleatorios'] = $aleatorios;
} else {
//establezco aleatorios de nuevo para que funcione y no de errores el codigo
$aleatorios = $_SESSION['numerosAleatorios'];
?>
<!-- genero el HTML -->
<html lang="es">
<head>
<title>Juego Mastermind</title>
</head>
<body>
<h3>Bienvenido de nuevo <?php echo $_SESSION['usuario'] ?></h3>
<!--Imprimo las 4 primeras cifras del array numeros que son las que voy a usar-->
<h2>Numero: <?php print_r($aleatorios[0] . $aleatorios[1] . $aleatorios[2] . $aleatorios[3]) ?></h2>
<h1>Mastermind Juego de los muertos y heridos</h1>
<h2>Registro de jugadas</h2>
<?php
//si esta creada la sesion contador entonces me hace el proceso de mostrarme la informacion
if (isset($_SESSION['contador'])) {
// paso el contador a una variable
$contador = $_SESSION['contador'];
//si el numero de muertos es menor que cuatro muestro por pantalla, si es 4 reenvio a otra sesion donde muestro que ha ganado
if ($_SESSION['muertos'] < 4) {
// hago un bucle para escribir por pantalla los numeros que lleva
/*
foreach ($_SESSION as $sesion){
//aqui transformo el array en un string para que me lo muestre sin problemas mas adelante
$numerosTransformados = implode("", $_SESSION['numerosPedidos']);
echo "<p>".$contador.". Con el numero introducido: " . $numerosTransformados . " tienes " . $_SESSION['muertos'] .
" muertos y " . $_SESSION['heridos'] . " heridos" . "</p>";
}*/
for ($i=0; $i<$contador; $i++){
//aqui transformo el array en un string para que me lo muestre sin problemas mas adelante
$numerosTransformados = implode("", $_SESSION['numerosPedidos']);
echo "<p>".$contador[$i].". Con el numero introducido: " . $numerosTransformados[$i] . " tienes " . $_SESSION['muertos'] .
" muertos y " . $_SESSION['heridos'] . " heridos" . "</p>";
}
} else if ($_SESSION['muertos'] == 4) {
header("Location:ganado.php");
}
}
?>
<form method="POST" action="sesion.php">
<p>Introduce Numeros</p>
<label for="numero1">
<input type="number" min="0" max="9" name="numero1">
</label>
<label for="numero2">
<input type="number" min="0" max="9" name="numero2">
</label>
<label for="numero3">
<input type="number" min="0" max="9" name="numero3">
</label>
<label for="numero4">
<input type="number" min="0" max="9" name="numero4">
</label>
<button type="submit" name="enviar" value="enviar" id="enviar">Enviar</button>
</form>
<a href="cerrarSesion.php">Cerrar sesion</a>
</body>
</html>
<?php
}
?>
非常感谢您
【问题讨论】: