private void EnsureIsPlayerTurn(Board board, MovesLog movesLog, Location from) { var playerColor = board.GetPieceAt(from).Color; var turnsTracker = new TurnsTracker(movesLog); if (!turnsTracker.IsTurnFor(playerColor)) { throw new Exception("Wrong player moving"); } }
public BoardViewModel(GameService gameService, MovementService movementService, ISubscriptionProvider subscriptionProvider) { this.gameService = gameService; this.movementService = movementService; this.subscriptionProvider = subscriptionProvider; viewPerspective = ChessColor.White; pieceMover = new PieceMover(); movesSequenceTranslator = new MoveSequenceTranslator(); movesReplayer = MovesReplayer.Create(new MovesLog()); turnsTracker = new TurnsTracker(movesReplayer.MovesLog); }
private void UpdateAndNotifyIfGameFinished(Game game, Board board, MovesLog movesLog) { var turnsTracker = new TurnsTracker(movesLog); var playerToMove = turnsTracker.GetCurrentPlayerToMove(); var opponentCanMove = pieceMover.CanPlayerMove(board, movesLog, playerToMove); if (opponentCanMove) { return; } var winner = playerToMove.GetOpposite(); game.UpdateResultToWin(winner); gamesRepository.UpdateGame(game); PublishGameFinishedEvent(game); }