/**
* Clase para hacer que un JLabel se pueda mover por la pantalla.
* Ya sea pasandole las coordenadas o agarrandolas cada vez que se hace click en la ventana o form.
* Se deve ejecutar moverse_adelante o moverse_atras.
* El nombre del class se debe a que estoy usando unos JLabel con imagenes de robots.
* @author Rafael Angel Montero Fernández (Angel Continium).
*/
public class Robot{
/**
* Constructor bacio.
*/
public Robot(){
}
/**
* Variables que iran guardando la informacion en formato de texto.
*/
private String sX="", sY="";
/**
* Sirve para usarse en tiempo de ejecucion, cada vez que se agrega informacion, la variable String aumenta.
* Y a su ves los vectores int tambien, sin la necesidad de copiar un vector en otro para luego aumentarle el tamaño al primero y luego vover a copiar a la inversa.
*
* @param x Numero int para la coordenada x.
* @param y Numero int para la coordenada y.
*/
public void add(int x, int y){
if(sX.equals("")==true){
sX=jlRobot.getX() + "";
sY="" + jlRobot.getY();
}
if ( sX.equalsIgnoreCase ("")==true){
sX+=x +"";
sY+=y+"";
}
else{
sX+=" " + x;
sY+=" " + y;
}
addCoordenadas_x(sX);
addCoordenadas_y(sY);
}
/**
* Permite agregar numeros en forma de matriz pero a mi modo, ejemplo: "1 2 3 4 5 6 7";
* Y el codigo se encarga en darle el formato adecuado, todo esto para facilitar la programacion.
* @param nuevas_coordenadas Debe pasarle numeros en formato String, ceparados por un espacio.
*/
private void addCoordenadas_x(String nuevas_coordenadas) {
String[] mCoordenadas = nuevas_coordenadas.split(" ");
mCoordenadas_x = new int[mCoordenadas.length];
int i=0;
while (i <= mCoordenadas_x.length - 1) {
mCoordenadas_x[i] = Integer.parseInt(mCoordenadas[i]);
i++;
}
}
/**
* Permite agregar numeros en forma de matriz pero a mi modo, ejemplo: "1 2 3 4 5 6 7";
* Y el codigo se encarga en darle el formato adecuado, todo esto para facilitar la programacion.
* @param nuevas_coordenadas Debe pasarle numeros en formato String, ceparados por un espacio.
*/
private void addCoordenadas_y(String nuevas_coordenadas) {
String[] mCoordenadas = nuevas_coordenadas.split(" ");
mCoordenadas_y = new int[mCoordenadas.length];
int i=0;
while (i <= mCoordenadas_y.length - 1) {
mCoordenadas_y[i] = Integer.parseInt(mCoordenadas[i]);
i++;
}
}
/**
* Borra toda la memoria de coordenadas o movimientos.
*/
public void borrar_coordenadas(){
this.sX="";
this.sY="";
this.mCoordenadas_x=new int[0];
this.mCoordenadas_y=new int[0];
}
private int[] mCoordenadas_x;
private int[] mCoordenadas_y;
/**
* Para facilitar las impreciones de textoe n la ventana inmediato.
* @param datos
*/
private void msj(String datos){
System.out.println(datos);
}
/**
* Se mueve hacia adelante, de acuerdo a las coordenadas.
*/
public void moverse_adelante(){
Thread h=new Thread(){
int i=0;
public void run(){
try {
if(i<=mCoordenadas_x.length-1){
jlRobot.setBounds(mCoordenadas_x[i], mCoordenadas_y[i], 223, 226);
i++;
sleep(500);
run();
}
} catch (InterruptedException ex) {
// Logger.getLogger(FRM_RTS.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
h.start();
}
/**
* Hace el moviemeinto de regreso de acuerdo a las coordenadas.
*/
public void moverse_atras(){
Thread h=new Thread(){
int i=mCoordenadas_x.length - 1;
public void run(){
try {
if(i >= 0){
jlRobot.setBounds(mCoordenadas_x[i], mCoordenadas_y[i], 223, 226);
i--;
sleep(500);
run();
}
}catch (InterruptedException ex) {
// Logger.getLogger(FRM_RTS.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
h.start();
}
} //Fin del class.
No obstante aquí solo se ejemplifica el uso de las coordenadas. No puse código para el resto del juego pero si logro hacerlo y que funcione bien, lo publicaré.