autopawn / haboard

Haskell framework for board games (exercise)
1 stars 30 forks source link

Issue #1 Peg Solitaire #45

Open v1ch1n opened 3 years ago

v1ch1n commented 3 years ago

Issue #1

Vicente De la Rosa Sánchez 201873002-5

Descripción del problema

Al igual que para el proyecto 2 en Java, se pidió implementar Peg Solitaire, siguiendo una estructura similar a Fox and Hounds.

Implementación del juego

Nuevamente, el juego se implementó con la versión inglesa del tablero:

Peg

Condiciones de victoria

Se crea una instancia de Game llamada PegSolitaire, la cual posee las condiciones de victoria del juego: si queda solo una pieza en el tablero, gana el jugador 0 (jugador por defecto y el que siempre va a jugar, pues es un juego de un jugador); si el jugador se queda sin movimientos, gana el jugador 1 (nunca juega pero sirve para hacer que pierda el jugador 0); si no se cumpla ninguna condición, se sigue jugando.

Límites del tablero

Para verificar que una pieza estuviera dentro del tablero (pues este no es cuadrado), se creo la función validPosition, la cual retorna True si la pieza está dentro, y, por el contrario, retorna False.

Movimiento de las piezas

Se creó la función movePeg, sin modificar movePiece en el archivo Piece.hs pues esta tiene una estructura más general y no se quería arruinar para los demás juegos. Esta función permite que, realizado un movimiento, la pieza que ha sido comida se elimina de la lista de piezas. Además, en la función pieceMoves, se explican las condiciones de movimiento que deben existir para que una pieza se mueva.

Inicialización del juego

El juego se inicializa creando listas que determinan los sectores del tablero, para concatenarlas entre todas y permitir inicializar el juego con todas las piezas en la lista, y con el jugador 0.

Makefile

El Makefile NO lo modifiqué, puesto que compilaba los archivos .hs con Stack y al agregar stack ghc al Makefile, me generaba errores. De todas formas, si se desea se puede agregar al Makefile lo siguiente y debiera compilar sin problemas:

pegsolitaire:
    mkdir -p bin
    ghc $(COMMON_SOURCES) PegSolitaire.hs -o bin/pegsolitaire

Para compilar, ingresaba por consola stack script PegSolitaire.hs --resolver lts-14.18 y compilaba y ejecutaba sin problemas.