Me pide hacer un historial de las coordenadas introducidas por
los jugadores. Este historial lo puede solicitar cualquiera de los jugadores, sin que ello
suponga el cambio de turno entre jugadores.
La manera de indicar al sistema que queremos mostrar un historial de
coordenadas introducidas serán introduciendo la coordenada 0-0.
Solamente deberá mostrar aquellas coordenadas introducidas por los jugadores,
que han sido válidas.
El número de coordenadas que nuestro juego debe almacenar serán siempre el
cuadrado del tamaño del tablero. Si en algún momento, ese tamaño es sobrepasado, se
deberán ir desplazando las posiciones de tal forma que las coordenadas más antiguas
serán las que van desapareciendo.
Muchas Gracias
Copyright © 2024 Q2A.ES - All rights reserved.
Answers & Comments
Verified answer
El historial puedes hacerlo utilizando una estructura de datos tipo lista o incluso con un arreglo alcanzaría.
No conozco el juego. Pero te dejo la lógica, puedes adaptarla según tus necesidades.
1. Crear Lista
2. En el turno del jugador, si el movimiento es valido
2.1. Si el tamaño de la lista es mayor o igual al limite del historial
2.1.1. Desplazar una posición.
2.2. Insertar nuevas coordenadas.
3. Continuar lógica normal.
En código java puede utilizar las clases ArrayList o Vector, pero como es una estructura dinámica, puedes almacenar incluso mas información que el limite impuesto.
Si utilizas arreglos, entonces sera cuestion de controlar los indices para que no existan desbordamientos.
En cualquiera de los dos casos vas a tener que crear una clase que contenga dos variables, que seran los datos de las coordenadas. O puedes utilizar alguno preexistente como Point. Te recomiendo lo primero.
Despues de eso, la estructura que utilices contendra instancias de la clase creada. Por ejemplo.
ArrayList <Coordenada> historial = new ArrayList<Coordenada> ();
Eso le indica al ArrayList que contiene solamente datos de tipo Coordenada, sino contendría tipo Object y tendrías que hacer downcasting al imprimir...
Bue...
Para ver la info, es bastante sencillo.
Si utilizas arreglos lo imprimís directamente.
Y si usas una colección como el ArrayList, entonces vas recorriendo los elementos con un for desde el inicio hasta "limiteHistorial"
Si necesitas algún código de ejemplo me avisas y te ayudo...
Espero que te ayude...
Saludos!
//la clase que tienes que crear que es coordenada
public class Coordenadas {
public Integer PosX;
public Integer PosY;
public Integer NumJugador;
public String horaJugada;
public Coordenadas(Integer PosX, Integer PosY,Integer NumJ,String hoJ ){
this.PosX=PosX; this.PosY=PosY; this.NumJugador=NumJ; this.horaJugada=hoJ;
}
}
///////////////////////////
///////////////////////
//la clase que maneje a la clase anterior
import java.util.LinkedList;
public class ListaCoordenadas {
LinkedList<Coordenadas> lista=new LinkedList<Coordenadas>();
Integer tamTableroX=9;
Integer tamTableroY=10;
public ListaCoordenadas(){
}
//Insertar pero validado
public void Insertar(Integer x,Integer y,Integer Jug){
// Si esta dentro del tablero
if(x<=this.tamTableroX && x>=0 && y<=this.tamTableroY && y>=0){
//Aqui se ponen las demas validaciones que necesites
//Si es permitido o no
java.util.Calendar fecha = java.util.Calendar.getInstance();
String fe=fecha.get(java.util.Calendar.DATE)+"/" ;
fe=fe +(fecha.get(java.util.Calendar.MONTH)+1)+ "/";
fe=fe+ fecha.get(java.util.Calendar.YEAR)+" ";
fe=fe+ fecha.get(java.util.Calendar.HOUR)+":";
fe=fe+ fecha.get(java.util.Calendar.MINUTE);
lista.add(new Coordenadas(x,y,Jug,fe));
}
}
// Cambiar el tamaño del tablero
public void CambiarTama(int x, int y){
for(Integer i=0; i<lista.size(); i++){
Coordenadas cor=lista.get(i);
if(x<cor.PosX && y<cor.PosY ){
lista.remove(cor);
}
}
this.tamTableroX=x;
this.tamTableroY=y;
}
// mostrar en consola
public void mostrarLista(){
for(Integer i=0; i<lista.size(); i++){
Coordenadas cor=lista.get(i);
System.out.println("Jugador "+cor.NumJugador+ " x,y: " +cor.PosX +","+ cor.PosY+ " hora "+cor.horaJugada );
}
System.out.println("-----------");
}
public static void main(String[] args) {
// TODO code application logic here
ListaCoordenadas lis=new ListaCoordenadas();
lis.Insertar(3, 4, 1);
lis.Insertar(1, 11, 1);
lis.Insertar(6, 4, 1);
lis.Insertar(8, 8, 1);
lis.mostrarLista();
lis.CambiarTama(6,6);
lis.mostrarLista();
}
}