Java - Juego "Same" en java

 
Vista:
sin imagen de perfil

Juego "Same" en java

Publicado por Diana (8 intervenciones) el 11/07/2017 01:09:16
Buenas estoy elaborando un juego de same (adjunto el link con un ejemplo del juego: http://www.factmonster.com/games/samegame.html)

Este consiste en que si los diamantes son del mismo color se van eliminando. El problema esta en que cuando quiero eliminar el grupo de diamantes del mismos color, siempre queda uno que no se elimina. Ejemplo: le doy click a un grupo que tiene 4 diamantes del mismo color y se eliminan 3. Que puedo hacer , ya revisé el código y no encuentro el error.

Este es el código:

Lo que ingresa por parametro son las coordenadas de la matriz en la que di el click. Ademas del dato que se encuentra en esta casilla que indica el color.

El contador lo que hace es contar el numero de diamantes que estoy comiendo, este esta inicializado en 1 al principio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public void f_recursiva (int px, int py, int color){
 
    if (color!=-1){
        matriz [px][py] = -1;
        mat[px][py].setIcon(new ImageIcon("jpg/"+matriz[px][py]+".jpg"));
    }
    if (px < 9 && matriz[px+1][py] == color){
        f_recursiva (px+1, py, color);
        cont += 1;
    }
    if (px > 0 && matriz[px-1][py] == color){
        f_recursiva (px-1, py, color);
        cont += 1;
    }
    if (py < 9 && matriz[px][py+1] == color){
        f_recursiva (px, py+1, color);
        cont += 1;
    }
    if (py > 0 && matriz[px][py-1] == color){
        f_recursiva (px, py-1, color);
        cont += 1;
    }
 
    if (cont < 2){
        matriz [px][py] = color;
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jose
Val: 130
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Juego "Same" en java

Publicado por Jose (46 intervenciones) el 13/07/2017 00:58:58
Hola faltaria el codigo que llama por primera vez a tu metodo recursivo.

pero sin temor a equivocarme, lo que causa de que se eliminen , n-1 es este if.

1
2
3
if (cont < 2){
    matriz [px][py] = color;
}

esto es porque haces primero la llamada recursiva antes de aumentar el contador.
entonces tu programa entiende que hay cont-1 celda, ya que en una de las llamadas recursivas
restauras el color de una. dado que contador, no entra a ningún if y queda un if(1<2), aunque en realidad el cont deberia ir por 2, pero esto no lo sabe porque alguien no lo ha aumentado.

solución:

pasa cont+=1; antes de la llamada recursiva.

ejemplo en uno de tus if:
1
2
3
4
5
if (px < 9 && matriz[px+1][py] == color){
    cont += 1;
    f_recursiva (px+1, py, color);
 
}

aclaro, que estoy un 90% seguro que ese es problema debido a que me falta, más datos de tu programa.

saludos.

nos cuentas como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Juego "Same" en java

Publicado por Diana (8 intervenciones) el 14/07/2017 00:36:38
Funcionl perfecto, mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose
Val: 130
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Juego "Same" en java

Publicado por Jose (46 intervenciones) el 14/07/2017 00:58:55
Me alegro Diana y de nada.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar