autopawn / javaboard

Java framework for Board Games (exercise).
0 stars 41 forks source link

Issue #1 "Peg Solitaire" #50

Open javier-tralma opened 4 years ago

javier-tralma commented 4 years ago

Protecto 2 "Peg Solitaire"

Nombre: Javier Tralma Rol: 201873027-0

Acerca del juego:

Al inicio del juego están todos los espacios ocupados, excepto por uno. El jugador debe mover una pieza por vez. Las piezas solo pueden moverse capturando mediante un "salto" sobre otra, como en las damas. Solo se puede capturar en horizontal o en vertical, nunca en diagonal. Así, al principio, solo pocas tienen posibilidad de moverse, capturando una. El objetivo del juego es eliminar todas las piezas, dejando solo una en el tablero, en el centro.

Explicación de los archivos creados:

Play.java:

Class Play es creada para la iniciación y la ejecución del juego. Se crean "2" jugadores teóricos, sin embargo, en la ejecución, solo existe un jugador, que ejecuta movimientos a través de la terminal. Dentro de este archivo, se usan las nuevas clases "Exec", "PlayerMessage", "LosePlayer" y "PegSolitaire", que serán explicadas a continuación.

Exec.java:

Clase que extiende de "Executor" con el propósito de modificar los mensajes de victoria o derrota. Fue extendida y posteriormente reescrita con @Override para modificar la última linea, pasa de: System.out.println("Jugador "+winner+": "+players[winner].victoryMessage()); a: System.out.println(players[winner].victoryMessage()); De esta forma, eliminamos el texto "Jugador X" que salía para el caso de FoxHounds, ya que en este juego solo hay un jugador.

"PlayerMessage.java":

Extiende de "PlayerHumanTerminal", la cual fue iniciada en Play.java. Fue implementada para el jugador principal (por consola), con el objetivo de hacer un @Override al método "victoryMessage()", para modificar el mensaje de victoria sin tener que modificar el contenido de la carpeta "javaboard"

"LosePlayer.Java":

Extiende de "PlayerCPURandom", la cual fue iniciada en Play.java. Fue implementada con el objetivo de hacer un @Override al método "victoryMessage()", para modificar el mensaje de "victoria"(que en este caso, hacer ganar a "LosePlayer" es equivalente a hacer perder al jugador principal, por ende, se modifica por un mensaje de derrota) sin tener que modificar el contenido de la carpeta "javaboard"

"PegSolitaire.java":

Clase en la que está estructurado el juego, posee los siguientes métodos: PegSolitaire(): Agrega las piezas al tablero. Deben estar en las posiciones indicadas por las condicionales, es decir, como se muestra a continuación:

img1

Para agregar las piezas, se usó una clase que extiende de "Piece", llamada "PegPiece", la cual se verá más adelante.

toString(): Método que extiende de "GridGame" y que fue modificado para agregar el string "□" en las posiciónes válidas en las que no hayan piezas, a medida de que uno va jugando, esto se va evidenciado, como se muestra a continuación:

img2

currentWinner(): Sobreescrita por @Override para cambiar las condiciones de victoria a las del PegSolitaire A continuación dos fotos, una donde se gana y otra donde se pierde(Vinculado a la explicación anterior sobre el mensaje de victoria,obviamente):

img3

img4

cloneGame(): Sirve para crear otras instancias a la hora de la ejecución.

PegPiece.java:

Extiende de "Piece", representa cada pieza del "Peg Solitaire". Posee los siguientes métodos: PegPiece(int player, int x, int y): Llama a los atributos de la clase padre. getMovements(Game state): Obtiene los movimientos disponibles en cada turno. Estos movimientos son restringidos, ya que si o si debes moverte por encima de una pieza, y llegar a un espacio vacío, y dentro del tablero (no en los cuadros de las esquinas). asciiRepresentation(): Representación en formato ASCII de cada pieza, la representación es "■" clonePiece(): Clona una pieza.