This repository has been archived on 2021-02-18. You can view files and clone it, but cannot push or open issues or pull requests.
chess/src/dev/kske/chess/game/Game.java

58 lines
1.6 KiB
Java

package dev.kske.chess.game;
import java.util.Map;
import dev.kske.chess.board.Board;
import dev.kske.chess.board.GameState;
import dev.kske.chess.board.Move;
import dev.kske.chess.board.Piece.Color;
import dev.kske.chess.ui.BoardPanel;
/**
* 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;
private BoardPanel boardPanel;
public Game(Map<Color, Player> players, Board board, BoardPanel boardPanel) {
this.players = players;
this.board = board;
this.boardPanel = boardPanel;
// Initialize the game variable in each player
players.values().forEach(player -> player.setGame(this));
}
public void start() {
players.get(Color.WHITE).requestMove();
}
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);
GameState eventType = board.getGameEventType(board.getDest(move).getColor().opposite());
switch (eventType) {
case CHECKMATE:
case STALEMATE:
System.out.printf("%s in %s!%n", player.color.opposite(), eventType);
break;
case CHECK:
System.out.printf("%s in check!%n", player.color.opposite());
default:
boardPanel.repaint();
players.get(player.color.opposite()).requestMove();
}
} else {
System.out.printf("%s: Illegal move!%n", player.getColor());
player.requestMove();
}
}
}