Mover-tablero

¿En el código de ayer es posible mover los fillrec y si es así como se podría hacer?
1

1 respuesta

Respuesta
1
Si se puede, lo único que tendrías que hacer seria cambiar los caracteres del arreglo.
Si lo quieres mover con teclado o con mouse tienes que agregarle los listeners de esos eventos.
¿De qué forma quieres mover las piezas?
¿En el código es posible mover las piezas como se podría hacer?
Con el mouse, ¿y si llega '*' a la puerta pueda salir del tablero?
Para eso tendrías que agregarle un implements a la clase, algo así:
public class tabler extends Frame implements MouseListener{
en el Metodo constructor le agregas esta linea:
addMouseListener(this);
y vas a necesitar implementar estos metodos:
public void mouseExited(MouseEvent evt){
}
public void mouseEntered(MouseEvent evt){
}
public void mouseReleased(MouseEvent evt){
}
public void mousePressed(MouseEvent evt){
}
public void mouseClicked(MouseEvent evt){
}
Luego en el método mousePressed (Se ejecuta cuando haces un click en el Frame) pones el código para mover los caracteres del arreglo.
Para obtener la posicion X donde se hizo click se utiliza evt.getX(); y para obtener la posicion Y donde se hizo click se utiliza evt.getY();
Ya teniendo la posición en la que se hizo el click ya puedes mover los elementos del arreglo.
Por ejemplo si cada rectángulo pintado en el frame tiene un ancho de 25 y un alto de 25, para obtener el indice de la fila que se debe modificar tendrías que hacer la operación evt. GetY()/25 y para obtener el indice de la columna seria evt. GetX()/25, esto es tomando en cuenta que se empieza a pintar los rectángulos en la coordenada 0,0
Ahora con esto ya deberías poder mover los elementos del tablero.
Pero en si que tienen que hacer cada uno de estos métodos
public void mouseExited(MouseEvent evt){
}
public void mouseEntered(MouseEvent evt){
}
public void mouseReleased(MouseEvent evt){
}
public void mousePressed(MouseEvent evt){
}
public void mouseClicked(MouseEvent evt){
}
Esos métodos son los que van a manejar los eventos del mouse y es necesario poner todos cuando se le pone el implements MouseListener. Pero el único que necesitas utilizar es el mousePressed (se ejecuta cuando se hace presiona un botón del mouse), y es ahí donde pondrías el código para manejar los clicks y mover el tablero.
Ah ok disculpa tanta ignorancia, tu podrías darme un pequeño ejemplo de como válido si '&' es vacío o espacio puedo color ahí una pieza claro dentro del tablero porque fuera del tablero ahí un poco de '&' y disculpa tantas molestias
No se si esto sea exactamente lo que quieras, pero de aquí tu lo puedes ir modificando. Aquí te pongo el código:
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class tabler extends Frame implements MouseListener{
char arreglo[][];
tabler(){
setSize(500,600);
addMouseListener(this);
try{
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream("archivo.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){
super.paint(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=35,alto=35;
Color col=null;
//Recorremos los elementos del arreglo
posY=50;
for(int i=0;i < arreglo.length;i++){
posX=50;
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.LIGHT_GRAY;
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.DARK_GRAY;
else if(arreglo[ i ][ j ]=='&')col=Color.white;
else if(arreglo[ i ][ j ]=='·')col=Color.red;
//Asignamos el color
g.setColor(col);
//Dibujamos el rectangulo
g.fillRect(posX,posY,ancho,alto);
g.setColor(Color.BLACK);
g.drawRect(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
//Como los rectángulos se empiezan a pintar a partir de la coordenada 50,50 le restamos 50.
f=(evt.getY()-50)/35;
c=(evt.getX()-50)/35;
//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.yellow);
}
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas