2019-07-07 13:53:57 +02:00
|
|
|
package dev.kske.chess.game;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import dev.kske.chess.board.Board;
|
2019-07-07 21:07:58 +02:00
|
|
|
import dev.kske.chess.board.GameState;
|
2019-07-07 13:53:57 +02:00
|
|
|
import dev.kske.chess.board.Move;
|
|
|
|
import dev.kske.chess.board.Piece.Color;
|
2019-07-09 09:20:30 +02:00
|
|
|
import dev.kske.chess.ui.BoardComponent;
|
2019-07-07 13:53:57 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Project: <strong>Chess</strong><br>
|
|
|
|
* File: <strong>Game.java</strong><br>
|
|
|
|
* Created: <strong>06.07.2019</strong><br>
|
|
|
|
* Author: <strong>Kai S. K. Engelbart</strong>
|
|
|
|
*/
|
|
|
|
public class Game {
|
|
|
|
|
|
|
|
private Map<Color, Player> players;
|
|
|
|
private Board board;
|
2019-07-09 09:20:30 +02:00
|
|
|
private BoardComponent boardComponent;
|
2019-07-07 13:53:57 +02:00
|
|
|
|
2019-07-09 09:20:30 +02:00
|
|
|
public Game(Map<Color, Player> players, BoardComponent boardComponent) {
|
|
|
|
this.players = players;
|
|
|
|
this.boardComponent = boardComponent;
|
|
|
|
this.board = boardComponent.getBoard();
|
2019-07-07 13:53:57 +02:00
|
|
|
|
|
|
|
// Initialize the game variable in each player
|
|
|
|
players.values().forEach(player -> player.setGame(this));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void onMove(Player player, Move move) {
|
|
|
|
if (board.getPos(move).getColor() == player.color && board.attemptMove(move)) {
|
|
|
|
System.out.printf("%s: %s%n", player.color, move);
|
2019-07-07 21:07:58 +02:00
|
|
|
GameState eventType = board.getGameEventType(board.getDest(move).getColor().opposite());
|
|
|
|
switch (eventType) {
|
|
|
|
case CHECKMATE:
|
|
|
|
case STALEMATE:
|
2019-07-08 09:08:10 +02:00
|
|
|
System.out.printf("%s in %s!%n", player.color.opposite(), eventType);
|
2019-07-07 21:07:58 +02:00
|
|
|
break;
|
|
|
|
case CHECK:
|
2019-07-08 09:08:10 +02:00
|
|
|
System.out.printf("%s in check!%n", player.color.opposite());
|
2019-07-07 21:07:58 +02:00
|
|
|
default:
|
2019-07-09 09:20:30 +02:00
|
|
|
boardComponent.repaint();
|
2019-07-07 21:07:58 +02:00
|
|
|
players.get(player.color.opposite()).requestMove();
|
2019-07-08 06:41:10 +02:00
|
|
|
|
2019-07-07 21:07:58 +02:00
|
|
|
}
|
2019-07-09 09:20:30 +02:00
|
|
|
} else player.requestMove();
|
2019-07-07 13:53:57 +02:00
|
|
|
}
|
2019-07-14 12:03:45 +02:00
|
|
|
|
|
|
|
public void start() {
|
|
|
|
players.get(Color.WHITE).requestMove();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void restart() {
|
|
|
|
players.forEach((k, v) -> v.cancelMove());
|
|
|
|
board.initializeDefaultPositions();
|
|
|
|
boardComponent.repaint();
|
|
|
|
start();
|
|
|
|
}
|
2019-07-07 13:53:57 +02:00
|
|
|
}
|