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");
            }
        }
예제 #2
0
        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);
        }