Desafío Hundir la flota
#3 Solución de MijT
Ver código
|
Ver comentarios (10)
|
Descargar código
Fecha: 07 diciembre 2003
Tamaño: 24351 caracteres
Comentarios: 10
Solución online:
Lo siento, pero no está disponible
Valoración









8.25
(4 votos)
No ha realizado ningún comentario
Valora esta solución
<?
session_start();
if (!$HTTP_GET_VARS['method']) {
$MAX_INT = 50;
$l = array("A","B","C","D","E","F","G","H","I","J");
$n = array(1,2,3,4,5,6,7,8,9,10);
$tabla = array();
//funcion k pone barcos aleatorios y sin tocarce..
function putship() {
global $l, $n, $tabla;
//horizontal o vertical?
$p = rand(0,1);
//decidimos el punto de comienzo de cada barco.
$lt = rand(3,6);
$nt = rand(3,6);
if ($p) {
//horizontal
$k = rand(0,1); //va para alla '->' o para aqui '<-'
if ($k) {
for ($f = 0;$f < 4;$f++) if ($tabla[$l[$lt]][$n[$nt + $f]]) { putship(); return; }
for ($f = 0;$f < 4;$f++) $tabla[$l[$lt]][$n[$nt + $f]] = 1;
}
else {
for ($f = 3;$f >= 0;$f--) if ($tabla[$l[$lt]][$n[$nt - $f]]) { putship(); return; }
for ($f = 3;$f >= 0;$f--) $tabla[$l[$lt]][$n[$nt - $f]] = 1;
}
} else {
//vertical
$k = rand(0,1); //va para arriba o para abajo
if ($k) {
for ($f = 0;$f < 4;$f++) if ($tabla[$l[$lt + $f]][$n[$nt]]) { putship(); return; }
for ($f = 0;$f < 4;$f++) $tabla[$l[$lt + $f]][$n[$nt]] = 1;
}
else {
for ($f = 3;$f >= 0;$f--) if ($tabla[$l[$lt - $f]][$n[$nt]]) { putship(); return; }
for ($f = 3;$f >= 0;$f--) $tabla[$l[$lt - $f]][$n[$nt]] = 1;
}
}
}
//Ubicamos aleatoriamente los barcos.
for($x=1;$x<=4;$x++) putship();
session_register("l","n","tabla","MAX_INT");
header("location:".$HTTP_SERVER_VARS['PHP_SELF']."?method=hundir");
} elseif ($HTTP_GET_VARS['method'] == "toc") {
$tabla = $HTTP_SESSION_VARS['tabla'];
$MAX_INT = $HTTP_SESSION_VARS['MAX_INT'];
$h = $HTTP_GET_VARS['h'];
$v = $HTTP_GET_VARS['v'];
if ($tabla[$h][$v]) $tabla[$h][$v] = 2;
else $tabla[$h][$v] = 3;
$HTTP_SESSION_VARS['tabla'] = $tabla;
$MAX_INT--;
$HTTP_SESSION_VARS['MAX_INT'] = $MAX_INT;
header("location:".$HTTP_SERVER_VARS['PHP_SELF']."?method=hundir");
} elseif ($HTTP_GET_VARS['method'] == "lo") {
session_destroy();
header("location:".$HTTP_SERVER_VARS['PHP_SELF']);
} elseif ($HTTP_GET_VARS['method'] == "hundir") {
$l = $HTTP_SESSION_VARS['l'];
$n = $HTTP_SESSION_VARS['n'];
$tabla = $HTTP_SESSION_VARS['tabla'];
$MAX_INT = $HTTP_SESSION_VARS['MAX_INT'];
$fin = true;
//vemos si terminamos
foreach($tabla AS $k => $v) if (in_array(1,$v)) $fin = false;
if ($fin) {
echo "Has ganado!<br>";
echo "<a href=?method=lo>Empezar de nuevo</a>";
}
if (!$MAX_INT) {
echo "Has perdido, se te acabaron las posibilidades!<br>";
echo "<a href=?method=lo>Empezar de nuevo</a>";
} else {
//mostramos todo
echo "<table border="1" width="750" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#000000">";
foreach($l AS $k => $v) {
echo "<tr>";
foreach($n AS $k2 => $v2) {
if ($tabla[$v][$v2] == 3) echo "<td width="10%" bgcolor="#F0F0F0"> </td>";
elseif ($tabla[$v][$v2] == 2) echo "<td width="10%" bgcolor="#000000"> </td>";
else echo "<td width="10%" align="center" bgcolor="#F0F5FF"><a href=?method=toc&h=".$v."&v=".$v2.">tocar</a></td>";
}
echo "</tr>";
}
echo "</table>";
}
}
?>