Necesito ayuda para contabilizar los movimientos de las fichas por el tablero y guardar con Java

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 '·' detectar automáticamente el fin y decirme tu puntaje es igual al numero de movimientos la puntuación más baja es la hizo más movimientos
como se puede hacer para reiniciar el juego sin necesidad de voverlo a compilar?
¿Cómo se puede hacer para que se guarde la partida tal cual como la deje un jugador?
¿Cómo se puede hacer para guardar un registro de los 10 mejores record?
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);
}
}

1 respuesta

Respuesta
1
Para contabilizar los movimientos solo necesitas declarar una variable y utilizarla como contador e irla aumentando cada que se realice un movimiento.
En cuanto a lo de contar solo una vez cuando se mueva la pieza, puedes utilizar una variable en la que guardes la ultima pieza movida, por ejemplo, si la ultima pieza fue el * entonces en esa variable guardas el *, para que en el próximo movimiento cheques si son iguales los caracteres y no contarlo.
Para mostrar el numero de movimientos puedes utilizar el método drawString, de esta forma:
g.drawString("Movimientos: "+contadorMovimientos, posicionX, posicionY);
Para reiniciar el juego simplemente vuelves a leer el archivo del tablero y asignas los valores a la matriz.
Para guardar la partida necesitas guardar los caracteres de la matriz en un archivo para poder recuperarlo luego. Una forma de hacerlo seria concatenando todos los caracteres de la matriz en un String de forma que quede algo asi: "&#&&&#&#&#&#&abg--" etc. y despues guardarlo de esta forma:
try{
//La cadena la obtienes con los datos de la matriz
String datos="&#&&#&#&#&#&#&#abggg--";
 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("archivo.txt")));
bw.write(datos);
bw.newLine();
bw.close();
}catch(Exception e){}
Para guardar los registros de los 10 mejores records seria algo parecido al de arriba. Necesitas guardar los records en archivos para luego poder recuperarlos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas