All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.co.mruoc.nac.entities.Game Maven / Gradle / Ivy

There is a newer version: 0.1.45
Show newest version
package uk.co.mruoc.nac.entities;

import lombok.Builder;
import lombok.Data;

@Builder(toBuilder = true)
@Data
public class Game {

    private final long id;
    private final Status status;
    private final Board board;

    public Game take(Turn turn) {
        validateGameNotComplete();
        validateIsPlayerTurn(turn);
        Board updatedBoard = board.update(turn);
        return toBuilder()
                .status(toUpdatedStatus(updatedBoard, turn.getToken()))
                .board(updatedBoard)
                .build();
    }

    public boolean isComplete() {
        return status.isComplete();
    }

    public Players getPlayers() {
        return status.getPlayers();
    }

    private void validateGameNotComplete() {
        if (status.isComplete()) {
            throw new GameAlreadyCompleteException(id);
        }
    }

    private void validateIsPlayerTurn(Turn turn) {
        status.validateIsTurn(turn.getToken());
    }

    private Status toUpdatedStatus(Board board, char token) {
        if (board.hasWinner(token)) {
            return status.winningTurnTaken();
        }
        return status.turnTaken();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy