Comunidad de diseño web y desarrollo en internet online

Arrays problematicos? ._. porfavor ayuda

Citar            
MensajeEscrito el 21 Ene 2007 02:38 am
:D hola quisiera saber si alguien me podria ayudar con este pequeño codigo actionscript

Código :

var campo:Array = new Array (64);
var campo_minado:Array = new Array(64);
var i:Number;
var pos:Number;
trace("dificultad :"+dificultad);
/*dejamos en 0 el campo que veremos en el juego
y el que estara minado*/
for (i=0;i<64;i++){
   campo[i] = "0";
   campo_minado[i] = "0";
   //trace(campo[i]+" "+i+"\n");
}

//lenamos de minas el campo minado objetivo
i = dificultad;
while(i>0){
   pos = Math.random(63);
   if (campo_minado[pos] != "M"){
      campo_minado[pos] = "M";
                               //PRIMER TRACE
      trace(campo_minado[pos]);
      i--;
   }
}
//veo las minas puestas en mi campo_minado
for (i=0;i<64;i++){
                //SEGUNDO TRACE
   trace(+campo_minado[i]);
}

agradeceria muchisimo si me dicen en que estoy equivocado.
el problema en si es que en el primer trace me muestra una cantidad de "M" igual al nivel de dificultad, que esta definido con anterioridad como un Number, pero al revisarlos con el segundo trace muestra todos los elementos del array como "0".

bueno espero su ayuda :) gracias ^^

Por Reno

1 de clabLevel



 

msie7
Citar            
MensajeEscrito el 21 Ene 2007 04:54 am
Fijate que tiene un signo + en el trace

Código :

trace(+campo_minado[i]);
Espero que sea eso.

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 21 Ene 2007 05:38 pm

Dientuki escribió:

Fijate que tiene un signo + en el trace

Código :

trace(+campo_minado[i]);
Espero que sea eso.


no no es eso :P, gracias iwal :P, la verdad esque no me imagino que es lo que esta mal
pues teoricamente deberia estar bien :P...

Por Reno

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Ene 2007 06:09 pm
Encontré el problema.
Math.random() devuelve un numero entre 0 y 1 sin importar el parámetro que se le haya pasado, por lo que estabas llenando en una posicion incorrecta. Habia datos en los elementos 0.5468468 0.164867 0.9481713 0.367169 etc
Se puede usar random(numero) pero esta desfasada la funcion, asi que lo mas correcto para usar es Math.floor(Math.random() * numero) Math.floor lo que hace es redondear un numero para abajo.

Aqui te dejo el codigo funcionando y con un agregado

Código :

var campo:Array = new Array (64);
var campo_minado:Array = new Array(64);
var i:Number;
var pos:Number;

var dificultad:Number = 20; // <--- Esta linea se puede borrar

trace("dificultad :" + dificultad);
/*dejamos en 0 el campo que veremos en el juego y el que estara minado*/
for (i=0;i<64;i++){
   campo[i] = "0";
   campo_minado[i] = "0";
   //trace(campo[i]+" "+i+"\n");
}

//lenamos de minas el campo minado objetivo

i = 0;

while(i != dificultad){
   pos = Math.floor(Math.random() * 64);
   if (campo_minado[pos] != "M")
   {
      campo_minado[pos] = "M";
      trace("El elemanto " + pos + " tiene " + campo_minado[pos]);
      i++;
   }
}

//veo las minas puestas en mi campo_minado
for (i=0;i<64;i++){
   trace("El elemanto " + i + " tiene " + campo_minado[i]);
}


Como veras el ciclo que controla la carga de minas es diferente, si bien usas Math.random() para cargar el vector, puede que la funcion devuelva el mismo valor 2 o mas veces. Lo que hace el if es darse cuenta de eso y llena el vector con la cantidad de minas que le decis.

De nada.

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 21 Ene 2007 07:33 pm
muchas gracias Dientuki :D, te pasaste, asi podre seguir avanzando, te pasaste

:cry: :cry: :cry:

Por Reno

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.