Foros del Web » Programando para Internet » PHP »

PhP minas

Estas en el tema de PhP minas en el foro de PHP en Foros del Web. este problemilla digamos que es por orgullo propio a ver si ustedes pueden detectar el error. tengo un form que me recoge el numero de ...
  #1 (permalink)  
Antiguo 31/08/2010, 18:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 2 meses
Puntos: 0
PhP minas



este problemilla digamos que es por orgullo propio a ver si ustedes pueden detectar el error.

tengo un form que me recoge el numero de filas, columnas y minas, para el clasico jueguillo de minas solo que me lo va apintar resuelto.
entonces obtengo los valores del form por get
Código PHP:
$filas=$_GET['filas'];
$columnas=$_GET['columnas'];
$minas=$_GET['minas']; 
despues creo mi vector y lo inicializo todo en 0 tomando en cuentas que hay menos minas que espacios
Código PHP:
if($minas<($filas*$columnas)){
    
//Inicializamos el arreglo
    
for($x=0;$x<$filas;$x++){
            for(
$y=0;$y<$columnas;$y++){
                
$arreglo[$x][$y]=0;
            }
        } 
despues genero las minas aleatoriamente asignandole un -1 si es mina
Código PHP:
while($z<$minas){
             
$random1=rand(0,$filas-1);
             
$random2=rand(0,$columnas-1);

          if(
$arreglo[$random1][$random2]!="-1"){
              
$arreglo[$random1][$random2]="-1";
              
$z=$z+1;
          }
        } 
aqui es donde no puedo creo un doble for para ir navegando entre cada posicion del arreglo y estando en esa posicion anido otro doble for para buscar minas en las 8 posiciones adjuntas llendo de columna -1 a columna +1 y de fila -1 a fila +1 y donde encuentre -1 incrementar un contador y asignar el valor de ese contador al final al valor del arreglo en la posicion original :P no se si se entendio
Código PHP:
for($x=0;$x<$filas;$x++){ //por cada fila
            
for($y=0;$y<$columnas;$y++){//por cada columna
                
if($arreglo[$x][$y]!=-1){
                     
//verificamos las celdas adyacentes
                    
for($x=($filas-1);$x<($filas+1);$x++){ //por cada fila
                        
for($y=($columnas-1);$y<($columnas+1);$y++){//por cada columna

                                    
if($arreglo[$x][$y]==-1)
                                        
$var=$var+1;
                            }
                         
                        }
                     
$arreglo[$x][$y]=$var;
                 }
//Fin del if
            
}
         } 


Código PHP:
echo "<fieldset>";
    echo 
"<legend>Resultado</legend>";
    
//Imprimimos el arreglo
    
for($x=0;$x<$filas;$x++){
            for(
$y=0;$y<$columnas;$y++){
                echo 
$arreglo[$x][$y]. " - ";
            }
            echo
"<br/>";
        }
    echo 
"</fieldset>"
aqui imprimo el vector final


ya puse if(isset($arreglo[$x][$y]))
antes de evaluar si es igual a -1 pero de cualquier manera aunque lo quite no me marca error al parecer en php no hay desbordamiento de arreglos o no se que onda creo que tengo un error en el momento de asignar el valor de $var al arreglo en la posicion original que opinan?

Última edición por Garrisonx; 31/08/2010 a las 18:17
  #2 (permalink)  
Antiguo 31/08/2010, 18:35
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: PhP minas

veo bastante logica en tu algoritmo.. :P

pero a ver.. verificas celda por celda, si la celda es igual a 0, entonces entras a tu segundo doble for para verificar que las 8 celdas adyacentes no tengan una mina..

primero creo que necesitas pensar en que esas 8 celdas solo pueden darse de la fila y columna 2 en adelante, porque las orillas no tienen 8 adyacentes.. segundo, probé tu código, y si asignas valores específicos no se 10 filas y 10 columnas, si te marca error, porque en algún momento no hay fila ni columna mayor a 10.. ($columnas + 1 o $filas+1)..

creo que por ahí va tu error, por otro lado.. entra solo la primera vez.. pero como los indices los manejas en términos del total de filas y columnas, nunca vuelve a entrar..

utilizar auxiliares para los indices de las celdas adyacentes que quieres verificar..

espero haberme explicado.. ;)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #3 (permalink)  
Antiguo 31/08/2010, 19:32
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: PhP minas

/*...veamoslo por parte.....la variable $z supongo q es cero y la cantidad de minas como ejemplo ingreste 10...entonces estamos en el while 0 < 10 ahora ya dimos una vuelta sacas los valores aleatorios de filas y columnas digamos q son 1 y 6 y preguntas si en la posicion $arreglo[1][6] es distinto de menos 1...y si por esas cosas de la vida el numero aleatorio es cinco veces 1 y 6....solo carga 5 minas

yo creo q lo primero deberias cambiar esto asi... */

$espacios = ($filas * $columnas);
while($z<$espacios){
$random1=rand(0,$filas-1);
$random2=rand(0,$columnas-1);

if($arreglo[$random1][$random2]!="-1"){
$arreglo[$random1][$random2]="-1";
$z=$z+1;
}
}
  #4 (permalink)  
Antiguo 31/08/2010, 22:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: PhP minas

es que no estoy teniendo problemas al momento de poner las minas si no al momento de contar en las celdas cuantas minas hay alrededor, digo las minas ia las tengo :) lo malo es qeu tengo puros 0;s a un lado :)
  #5 (permalink)  
Antiguo 31/08/2010, 22:35
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: PhP minas

bueno creo que debes hacer una suma segun las casillas que estan alrededor un ejemplo fuera de tu codigo para que lo adaptes
Código PHP:
#esto dentro de tu for
$valor=0;
if(
$arreglo[$x][$y+1]==-1){#si la celda de al lado tiene mina
      
$valor++;#incrementas valor
}
if(
$arreglo[$x+1][$y]==-1){#si la celda del lado izquierdo de abajo
      
$valor++;#incrementas valor
}
if(
$arreglo[$x-1][$y]==-1){#si la celda de izquierda de arriba tiene mina 
      
$valor++;#incrementas valor

ahi tienes como hacer la comparacion segun lo q vi ojo agarre la primera variable arreglo q vi en tu codigo es para darte una vision de como irlo haciendo xq luego de llenarlo tienes que comparar cada una de las celdas a ver cual tiene para colocarle el numero de minas alrededor me falto abajo y a la izquierda y otros pero con el ejemplo creo q te puedes guiar suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Última edición por carlos_belisario; 31/08/2010 a las 22:48
  #6 (permalink)  
Antiguo 31/08/2010, 23:15
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: PhP minas

/*....tu drama esta aqui y lo q puse antes tambien porq debes recorrer y poner las minas por la cantidad de espacios q tienes...pero veamos esto...

digamos q son 10 filas y 10 columnas y las recorres

$y = (10 - 1) ; osea 9 < 11 y despues incrementas Y

el problema es q siempre preguntas if($arreglo[9][9]==-1) if($arreglo[9][10]==-1) if($arreglo[10][9]==-1) if($arreglo[10][10]==-1)

y despues se sale.....y otra vez lo mismo...


for($x=($filas-1);$x<($filas+1);$x++){ //por cada fila
for($y=($columnas-1);$y<($columnas+1);$y++){//por cada columna

if($arreglo[$x][$y]==-1)
$var=$var+1;
}

}

*/

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.