Contar-movimiento

Hola a partir del siguiente archivo que es un tablero
&&&&&&&&&&
&&&&&&&&&&
&&######&&
&&#a**b#&&
&&#a**b#&&
&&#cdde#&&
&&#cfge#&&
&&#a&&b#&&
&&##--##&&
&&&&&&&&··
&&&&&&&&··
Yo necesito contabilizar los movimientos hechos por la piezas tomando en cuenta la existencias de piezas conexas que si se mueve una 'a' y se mueve la otra 'a' que es parte de la pieza no contarla seria una continuación del movimiento anterior como también existe el caso de que hay piezas que son solas.
Si la pieza que se ha movido vuelve a colocarse en la posición anterior se considera que el movimiento no ocurrió y se decrementa
necesito mostrar en la parte de abajo el numero de movimientos
Si la pieza '*'(pieza singular) que es el cuadrado más grande llega a la puerta '-' pueda salir del tablero a la posición objetivo '·' y decirme tu puntaje es igual al numero de movimientos
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class tabler extends Frame implements MouseListener{
char arreglo[][];
public tabler(){
setSize(500,600);
addMouseListener(this);
try{
BufferedReader in=new
BufferedReader(new InputStreamReader(new FileInputStream("C:\\arc.txt")));
int filas=Integer.parseInt(in.readLine());
int columnas=Integer.parseInt(in.readLine());
arreglo=new char[filas][columnas];
for(int i=0;i < filas;i++){
for(int j=0;j < columnas;j++){
arreglo[ i ][ j ]=(char)(in.read());
}
}
in.close();
}catch(Exception e){}
}
//Este metodo es el que se llama cada vez que la ventana necesite pintarse
public void paint(Graphics g){
//posX y posY se utilizan para ir cambiando la posición en la que se pintara el rectángulo
//ancho y alto son precisamente el ancho y alto del rectangulo
int posX,posY,ancho=25,alto=25;
Color col=null;
//Recorremos los elementos del arreglo
posY=0;
for(int i=0;i < arreglo.length;i++){
posX=0;
for(int j=0;j < arreglo[ i ].length; j++){
//Escogemos el color a pintar segun el caracter (&,#,etc.)
if(arreglo[ i ][ j ]=='*')col=Color.red;
else if(arreglo[ i ][ j ]=='a')col=Color.YELLOW;
else if(arreglo[ i ][ j ]=='b')col=Color.BLUE;
else if(arreglo[ i ][ j ]=='c')col=Color.CYAN;
else if(arreglo[ i ][ j ]=='d')col=Color.GREEN;
else if(arreglo[ i ][ j ]=='e')col=Color.PINK;
else if(arreglo[ i ][ j ]=='f')col=Color.MAGENTA;
else if(arreglo[ i ][ j ]=='g')col=Color.ORANGE;
else if(arreglo[ i ][ j ]=='#')col=Color.GRAY;
else if(arreglo[ i ][ j ]=='-')col=Color.LIGHT_GRAY;
else if(arreglo[ i ][ j ]=='&')col=Color.BLACK;
else if(arreglo[ i ][ j ]=='.')col=Color.RED;
//Asignamos el color
g.setColor(col);
//Dibujamos el rectangulo
g.fillRect(posX,posY,ancho,alto);
posX+=ancho;
}
posY+=alto;
}
}
public void mouseExited(MouseEvent evt){
}
public void mouseEntered(MouseEvent evt){
}
public void mouseReleased(MouseEvent evt){
}
public void mousePressed(MouseEvent evt){
int c,f;
//Obtenemos los indices de fila y columna del arreglo
f=(evt.getY())/25;
c=(evt.getX())/25;
//Verificamos que sea un elemento que pueda ser movido
if(arreglo[f][c]=='#'||arreglo[f][c]=='-'||arreglo[f][c]=='.'||arreglo[f][c]=='&'||f>arreglo.length||c>arreglo[0].length)return;
//Verificamos si hay algun espacio vacio ( & ) junto a el
if(arreglo[f-1][c]=='&'){
arreglo[f-1][c]=arreglo[f][c];
arreglo[f][c]='&';
}
if(arreglo[f+1][c]=='&'){
arreglo[f+1][c]=arreglo[f][c];
arreglo[f][c]='&';
}
if(arreglo[f][c-1]=='&'){
arreglo[f][c-1]=arreglo[f][c];
arreglo[f][c]='&';
}
if(arreglo[f][c+1]=='&'){
arreglo[f][c+1]=arreglo[f][c];
arreglo[f][c]='&';
}
repaint();
}
public void mouseClicked(MouseEvent evt){
}
public static void main(String arg[]){
tabler t=new tabler();
t.show();
t.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}
});
t.setBackground(Color.black);
}
}
Gracias y disculpa la molestia
1

1 respuesta

Respuesta
1
Aparentemente solo te falta en tu método principal (el main pues) agregar la instrucción para que te repinte tu frame...
Quedaría como
t.repaint();
Después de que creas tu objeto tabler...
Una disculpa por el retraso, cualquier cosa, no dudes en avisar...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas