Darse de alta en la web | Recuperar password   
Inicio / Desafios / Hundir la flota / Solucion de MijT

Desafío Hundir la flota

#3 Solución de MijT

Código de la Solución Ver código | Comentarios Ver comentarios (10) | Descargar Descargar código

Fecha: 07 diciembre 2003

Tamaño: 24351 caracteres

Comentarios: 10

Solución online:
Lo siento, pero no está disponible

Valoración PuntuaciónPuntuaciónPuntuaciónPuntuaciónPuntuaciónPuntuaciónPuntuaciónPuntuaciónPuntuaciónPuntuació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">&nbsp;</td>";
                
elseif ($tabla[$v][$v2] == 2) echo "<td width="10%" bgcolor="#000000">&nbsp;</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>";
    }
}
?>

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster