Estoy haciendo una especie de buscaminas y para ello utilizo arrays y me voy moviendo por posiciones del array el tema es el siguiente y es que me esta apareciendo un error bastante cojonero, el codigo lo hice primero en C y funciona perfectamente pero cuando lo quiero pasar a Game Maker me ha salido un error
Array index must be +'ve
at gml_Script_scr_create_random_level (line 50) - if(casillas[i-1,j+1]==1 && (i-1>=0 && j+1<tam)){
for(i=0;i<tam;i++){
for(j=0;j<tam;j++){
aux_casillas[i,j]=0;
if(casillas[i,j]==0){
if(casillas[i+1,j+1]==1 && (j+1<tam && i+1<tam)){
aux_casillas[i,j]++;
}
if(casillas[i-1,j+1]==1 && (i-1>=0 && j+1<tam)){
aux_casillas[i,j]++;
}
}
}
No es el código entero obviamente, es únicamente en la zona donde salta el error, a qué se puede deber?
Tal y como se puede ver lo que hago es fijarme si en la posición que rodea a la posición que estoy investigando es igual a 1, pues suma un auxiliar que tengo por ahí.
+'ve es la contracción de positive, es una forma rara de contracción ???
Al hacer la comparación
[gml]casillas[i-1,j+1]==1[/gml]
cuando i=0, el primer elemento vale -1.
Se puede solucionar invirtiendo el orden de las condiciones, es decir, poner el código así
[gml]
if( (i-1>=0 && j+1<tam) && casillas[i-1,j+1]==1 )
[/gml]
si no has tocado las configuraciones de :GMS: y la evaluación en "corto circuito" sigue activada debería funcionar, si no prueba haciendo un if anidado
[gml]
if( i-1>=0 && j+1<tam )
if( casillas[i-1,j+1]==1 )
{
...
}
[/gml]
Encontré el error, bastante estúpido por cierto.
El fallo no se produce en C pero en Game Maker si, lo que sucede es que la pregunta del
j-1>=0
La tengo que realizar antes del
casillas[i+1,j-1]
Por que sino lo primero que hará sera hacer el casillas[i+1,j-1] y en cuanto le dé el indice negativo saldrá automáticamente con el error, ni si quiera se fijará en el AND que hay después.
@Clamud
Efectivamente, pero el error se produce por lo que dije antes, que justo estaba escribiéndolo cuando lo pusiste tu :D