¿Cómo Mover Un Personaje En Un Tablero? SWING o AWT

Espero me puedan ayudar !
Tengo un proyecto el cual consiste en un juego de batallas entre 2 bandos, de 5 personajes de dimension cuadrada. Cada Jugador, obviamente manejara un solo bando, y cada personaje se debe mover de la siguiente forma:
En el turno correspondiente el jugador, puede elegir la dirección en que se moverá el personaje (arriba, abajo, derecha o izquierda) y las casillas que se moverá en la dirección sellecionada, sera de acuerdo a un dado, indicando el numero de casillas que se moverá a lo largo del tablero. El personje consiste en un duende, es decir, que en el tablero debe aparecer la imagen de un duende, el cual lo pueda mover a lo largo de las casillas!
Lo anterior solo es una idea del proyecto... Tengo conocimientos en Java, pero... No Tantos... Ahora que les di la idea de lo que trata mi proyecto... Viene mis 2 preguntas...
¿Cómo se crea realmente el escenario? El tablero es una matriz... Pero esa matriz ya creada, ¿queda fija hasta que finaliza el juego? ¿O cambia con el progreso del juego? ¿O es simplemente un tablero que sirve de fondo a lo largo del juego?
Y como puedo dibujar esa matriz, ¿alguna idea de lo que debo utilizar para crearla utilizando SWING o AWT (NO APPLETS)?
¿Mi otra pregunta es... Como se mueve el personaje realmente en un tablero? ¿Es esto un vector? Y si lo es... Esa figura... Como se representa, ¿en el tablero?
Este personaje es representado: ¿Por un botón con una imagen encima? ¿O simplemente una imagen que tenga el tamaño acorde a una casilla y que se mueva por medio de coordenadas? Debe ser en SWING o AWT (NO APPLETS).
Espero me puedan ayudar... Pues he buscado información sobre matrices y vectores... Pero en ninguna encuentro como manejar una imagen a lo largo de un tablero, O algo parecido... Tal vez y me puedan audar... Ya sea con código, con las lienas bases para crear lo que necesite, o algún ejemplo de como funciona esto realmente !
Gracias ! Y un saludo desde Guatemala !

1 respuesta

Respuesta
1
Lo que te recomiendo que hagas es usar una matrix de enteros para representar el modelo del tablero... tu tablero seria entonces una matrix de enteros de (X filas por Y columnas) donde cada celda tendrá un valor de acuerdo a lo que representara en la interfaz del tablero... por ejemplo, supongamos que nuestro tablero va a ser de 3 filas x 3 columnas, y que definimos el valor 0 como la representación de una casilla vacía en el tablero (sin duendes)... nuestra matrix seria algo así:
// matrix vacia
int [][] matrixTablero = new int [3][3] {
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 }
};
Ahora supongamos que queremos poner un duende en la casilla (1,1) esto es fila 2 y columna 2 (porque los indices para vectores y matrices comienzan con cero)... seria algo así:
//esta es la forma literal
int [][] matrixTablero = new int [3][3] {
{ 0,0,0 },
{ 0,1,0 },
{ 0,0,0 }
};
// y asi seria si quieres poner el valor '1' en la casilla (1,1) de la matriz despues de que ha sido creada
matrixTablero[1][1] = 1;
Lo demás es crear métodos para leer y modificar la matriz y así poder actualizarla a medida que en la interfaz ocurren los eventos...
Y en cuanto a la interfaz gráfica debes decidir si lo vas a hacer usando Swing o awt... porque son cosas diferentes, te recomiendo que uses Swing que es lo ultimo y más fácil de usar.
Bueno eso es todo por ahora... si quieres más aclaración o ayuda en ciertos puntos, siéntete libre de consultarme... y si mi respuesta es suficiente para resolver tu problema te agradezco que
Gracias por la respuesta... ya voy entendiendo un poco...
Entonces... es decir que el tablero del juego, si va variar! ¿Y qué no es solo un fondo?
O seria más fácil solo mover una imagen encima del tablero, ¿qué es como un fondo?
entonces... ¿los personajes? ¿Cómo se representan en el tablero?
Es decir, son una imagen que se mueve encima de este tablero, ¿con la medida de las casillas?, o es un botón que se mueve por coordenadas, con la imagen de un duende, ¿encima del tablero? Me podrías explicar esa parte, de como representarlo...
Y es posible usar AWT y SWING al mismo tiempo... ¿o me complicaría?
No se si es mucho pedir, o molestia...
No tienes algún ejemplo sobre como manejar esta imagen, en el tablero, ya que se me complica un poco esto...
Perdón por las molestias... Y gracias por la respuesta anterior.
Bueno la razón por la que te recomiendo que uses una matrix de enteros para representar tu tablero es porque supongo que vas a necesitar hacer ciertas operaciones con los duendes, como por ejemplo si quieres mover un duende 3 casillas hacia abajo pero resulta que en esa casilla hay otro duende o ya se acabo el tablero, cosas así son más fáciles de implementar si utilizas un modelo básico de datos (como una matriz) para representar lo que la interfaz gráfica va a mostrar, no se si me explico... Por otra parte para representar gráficamente tu matriz, podrías hacer que tu tablero o fondo sea un JPanel sobre el cual dibujas, bien sea una imagen grande como fondo cubriendo todo el área del tablero y pintar encima de ese fondo las imágenes de los duendes, o también podrías usar imágenes cuadradas por cada casilla (como si fueran azulejos) y así tendrías una imagen para representar una casilla vacía y otras para cada tipo de duende.. y para colocar las imágenes en el JPanel podrías usar un GridLayout (http://java.sun.com/j2se/1.4.2/docs/api/java/awt/GridLayout.html) ... o podrías hacer el dibujado todo por ti mismo sin usar el GridLayout... solo debes convertir las casillas de la matriz en puntos en el sistema de coordenadas de tu tablero... aquí tengo un ejemplo:
//suponemos que las imagenes son de 20 x 20 pixeles
int anchoImagen = 20;
int altoImagen = 20;
Point puntoEnTablero = new Point(0,0);
// nuestra matriz de enteros, si las imagenes son de 20 x 20 y nuestro tablero tendra 3 x 3 casillas, las dimensiones de nuestro tablero seran de 60 x 60
int [][] matrixTablero = new int [3][3] {
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 }
};
for( int x=0; x
for( int y=0; y
// Aquí obtenemos lo que tiene la matriz en esa casilla para saber que dibujar (vacío o duende)
int valorCasilla = matrixTablero[x][y];
// aqui hacemos la conversion del sistema de coordenadas de la matriz al sistema del tablero... simplemente multiplicamos el indice de las filas 'x' por el ancho y el indice de las columnas 'y' por la altura
puntoEnTablero.setLocation( (x * anchoImagen, y * altoImagen );
}
}
Bueno creo que con esto ya tienes bastante para comenzar, suerte. Si quieres más aclaración o ayuda en ciertos puntos, siéntete libre de consultarme... y si mi respuesta es suficiente para resolver tu problema te agradezco que
Hola de Nuevo, Gracias por tu respuesta.
Acerca de estas matrices y vectores, tengo una duda...
Yo he manejado un poco, no mucho: arrays y arrays multidimensionales, pero los he utilizado solamente con conceptos básicos, es decir solo he ejecutado mis programas con arrays en el ejecutable MS-DOS de Windows, y ahí mismo se corre mi programa, es decir, que no he utilizado nunca Gráficos relacionados con matrices y vectores.
En conclusión: Que tanto se asemejan matrices y vectores, entre un programa que corre en el mismo ejecutable MS-DOS, ¿y el uso de Gráficos ya sea Swing o Java2D?
¿Hay similitud con la sintaxis? ¿Y si hay diferencia de que forma lo puedo relacionar más fácilmente? Me trataste de explicar en la pregunta anterior, pero no me que do muy claro, el concepto.
Por cierto he investigado acerca se AWT, SWING y JAVA2D... crees que el manejo de personajes y tablero, se pueda hacer perfectamente, ¿solamente con el uso de SWING? ¿O según la conveniencia puedo mezclar? ¿O no e recomendable?
Gracias de antemano ! Saludos desde Guatemala !
Bueno para empezar a aclarar las cosas desde el prinicio, Java nunca corre en el MS-DOS, sino que usa la Maquina Virtual de Java (JVM) para ejecutar tu programa en el lenguaje nativo de tu maquina. Supongo que cuando dices correr tu programa en el MS-DOS te refieres a usar la linea de comandos del MS-DOS para iniciar la ejecución de tu programa. En ese caso no hay diferencias entre un programa que usa Entorno gráfico de ventanas ( como Swing o AWT) y un programa que no... tu puedes iniciar la ejecución de ambos usando la linea de comandos (en conclusión, no hay diferencias de sistaxis para inciar la ejecución de un programa que usa ventanas y uno que no por la linea de comandos del MS-DOS)... la diferencia a la que creo que te refieres, es el hecho que un programa que no usa ventanas todo lo hace usando System. In (para pedir datos) y System. Out (para mostrar datos) los cuales se muestran por la consola del MS-DOS (si lo ejecutamos usando el MS-DOS)... mientras que un programa que usa ventanas podría usar (si quisiera) ambos sistemas, imprimir o pedir datos por consola y/o pedir o imprimir datos usando componentes gráficos en las ventanas. Por cierto cuando yo hago programas que usan ventanas, siempre uso la consola para mostrar variables y encontrar errores... así que la diferencia consiste unicamente en la forma en que se piden o se muestran datos. Espero que te quede claro esto.
Ahora continuando con la matriz, ya teniendo las diferencias claras, el manejo de tu matriz sera el mismo, no diferencias en la sintaxis, la única diferencia sera en la forma en que vas a mostrar gráficamente tu matrix, usando algún componente gráfico como ya te dije un JPanel sobre el cual dibujas imágenes basado en la información que tiene tu matriz.
Hay ciertas cosas que debes investigar para que entiendas mejor el uso de Swing antes de empezar a trabajar con la matriz... te aconsejo que aprendas a usar los JTextfields (campos de texto para pedir datos), los JButtons (botones para ejecutar acciones en tu programa) ... aquí encontré un tutorial que puedes hojear (http://www.zetcode.com/tutorials/javaswingtutorial/) hay muchos más que puedes buscar y aprender...
En cuanto a si usar Swing o AWT... como ya te dije te recomiendo que uses swing, aunque de todas formas siempre se usan algunas librerías de awt cuando se usa swing, así que, en cierta forma, se usan los dos... pero te darás cuenta cuando estés usando Swing por todos los componentes de Swing comienzan por 'J'... eg. JPanel, JButton, JLabel... etc. mientras que los de AWT no llevan la 'J' (Panel, Button, Label... etc)
Bueno espero haber aclarado tus dudas... Si quieres más aclaración o ayuda en ciertos puntos, siéntete libre de consultarme... y si mi respuesta es suficiente para resolver tu problema te agradezco que
Muchas Gracias !
Lo Que me has explicado me ha sido de utilidad... y debo de indagar mucho más, para iniciar de mejor manera mi proyecto...
Si me surge alguna, duda, a ver si te molesto un poco.
Pero verdaderamente muchas Gracias y Un Saludo desde Guatemala !

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas