Ambas clases heredan de la clase Piece y tienen un atributo adicional, el cual es el hp, ambos tienen los mismos atributos, pero difieren en algunos métodos, como AsciiRepresentation o getMovements, sus métodos son los siguientes:
1.a) getMovements(): recibe el estado actual del juego y retorna la lista de todos los movimientos posibles de la pieza actual. Los movimientos de las piezas se definieron como un máximo de 4 unidades y solamente puede efectuar movimientos vertical y horizontalmente (no en diagonal), tal como se modela en la siguiente imagen:
Para obtener esas casillas, se hizo una búsqueda por anchura (BFS) haciendo uso de una LinkedList tipo Queue y un ArrayList, ambos almacenaban objetos del tipo Pares. La ventaja de haber usado la collección Queue fue poder quitar y obtener los datos de la cabecera de manera sencilla (haciendo uso de .poll()) y ahorrándonos posibles errores. Se iteró de manera que se detuviera hasta que Queue ya no tuviera más elementos. Por cada par (x,y) de nuestra queue,se obtenian los pares adyacentes (no diagonales) y se almacenaban en queue si y sólo si el par no estaba en queue (detallado más adelante en la clase Pares). Luego de haber obtenido todas las casillas adyacentes del par actual, se almacena en la ArrayList si no ha sido almacenado anteriormente y el par no es igual a la posición inicial (ya que no es posible moverse a la misma posición)
1.b) asciiRepresentation: Este método retorna: "🧟" en caso de ser Mage_Soldier (no se encontró otro sprite) o "💂" en caso de ser Soldier.
1.c) clonePiece: Crea una nueva instancia de la clase.
1.d) update: Le resta 1 de hp al hp actual del soldado.
2.- Clase Simplewars:
Nuestra clase principal, la cual hereda de GridGame e implementa Evaluable. Tiene un atributo adicional el cual es el String bando, que almacena el equipo que el usuario escoge en terminal (Zombie, Soldier). Además, en su constructor se define el tamaño del tablero (15x10) y la creación de personajes en posiciones aleatorias, esto mediante el uso de la clase Random, la cual escogerá un número de [0-14] en el eje x y [0-9] en el eje y asegurándose de que no haya otra pieza en la posición generada, mediante el uso del método pieceAt(). Los métodos de Simplewars son:
2.- a) currentWinner: Al igual que la super class, este método define al ganador si un jugado ya no tiene movimientos, es decir, todas sus piezas tienen hp = 0.
2.- b) cloneGame: Crea una instancia de simplewars.
2.- c) defaultEvaluationFunction: Tiene como función retornar el hp del player menos el hp de la cpu, esto debido a que mientras menor sea el HP retornado (quiere decir que el movimiento que elija quitará la mayor cantidad de hp al player), al pasarlo a negativo en la clase PlacerCPUEval se tendrá mas en consideración.
3.- Clase Pares:
Clase que se creó para almacenar las celdas al momento de buscar los posibles movimientos de las piezas, esta clase tiene como atributos: posición_x, posición_y y profundidad (la cual va de 0-4). Tiene solo un método y es un Override del equals, que retorne que dos instancias son verdaderas si ambas posiciones (x e y) coinciden.
Nombre : Yi cong Zhou - Rol: 201873024-6
Explicaciones de clases y métodos
1.- Clases Mage_Soldier y Soldier:
Ambas clases heredan de la clase Piece y tienen un atributo adicional, el cual es el hp, ambos tienen los mismos atributos, pero difieren en algunos métodos, como AsciiRepresentation o getMovements, sus métodos son los siguientes:
1.a) getMovements(): recibe el estado actual del juego y retorna la lista de todos los movimientos posibles de la pieza actual. Los movimientos de las piezas se definieron como un máximo de 4 unidades y solamente puede efectuar movimientos vertical y horizontalmente (no en diagonal), tal como se modela en la siguiente imagen:
Para obtener esas casillas, se hizo una búsqueda por anchura (BFS) haciendo uso de una LinkedList tipo Queue y un ArrayList, ambos almacenaban objetos del tipo Pares. La ventaja de haber usado la collección Queue fue poder quitar y obtener los datos de la cabecera de manera sencilla (haciendo uso de .poll()) y ahorrándonos posibles errores. Se iteró de manera que se detuviera hasta que Queue ya no tuviera más elementos. Por cada par (x,y) de nuestra queue,se obtenian los pares adyacentes (no diagonales) y se almacenaban en queue si y sólo si el par no estaba en queue (detallado más adelante en la clase Pares). Luego de haber obtenido todas las casillas adyacentes del par actual, se almacena en la ArrayList si no ha sido almacenado anteriormente y el par no es igual a la posición inicial (ya que no es posible moverse a la misma posición)
1.b) asciiRepresentation: Este método retorna: "🧟" en caso de ser Mage_Soldier (no se encontró otro sprite) o "💂" en caso de ser Soldier.
1.c) clonePiece: Crea una nueva instancia de la clase.
1.d) update: Le resta 1 de hp al hp actual del soldado.
2.- Clase Simplewars:
Nuestra clase principal, la cual hereda de GridGame e implementa Evaluable. Tiene un atributo adicional el cual es el String bando, que almacena el equipo que el usuario escoge en terminal (Zombie, Soldier). Además, en su constructor se define el tamaño del tablero (15x10) y la creación de personajes en posiciones aleatorias, esto mediante el uso de la clase Random, la cual escogerá un número de [0-14] en el eje x y [0-9] en el eje y asegurándose de que no haya otra pieza en la posición generada, mediante el uso del método pieceAt(). Los métodos de Simplewars son:
2.- a) currentWinner: Al igual que la super class, este método define al ganador si un jugado ya no tiene movimientos, es decir, todas sus piezas tienen hp = 0.
2.- b) cloneGame: Crea una instancia de simplewars.
2.- c) defaultEvaluationFunction: Tiene como función retornar el hp del player menos el hp de la cpu, esto debido a que mientras menor sea el HP retornado (quiere decir que el movimiento que elija quitará la mayor cantidad de hp al player), al pasarlo a negativo en la clase PlacerCPUEval se tendrá mas en consideración.
3.- Clase Pares:
Clase que se creó para almacenar las celdas al momento de buscar los posibles movimientos de las piezas, esta clase tiene como atributos: posición_x, posición_y y profundidad (la cual va de 0-4). Tiene solo un método y es un Override del equals, que retorne que dos instancias son verdaderas si ambas posiciones (x e y) coinciden.