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]

#2 Abril 19, 2015, 03:44:06 PM Ultima modificación: Abril 19, 2015, 03:45:47 PM por king195
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