Пример #1
0
        private void PlayerMove(Position userInput)
        {
            _fenStack.Push(GetFen());
            var fromPos = new Position(_selectedPiece.CurrentPosition);

            _selectedPiece.Move(userInput);

            if (_rules[RuleNames.Chess].IsSatisfied())
            {
                UndoLastMove();
                _eventAggregator.GetEvent <Chess.Infrastructure.Events.MessageEvent>().Publish(new MessageInfo(1500, "Move illegal! King in check."));
            }
            else
            {
                _eventAggregator.GetEvent <Chess.Infrastructure.Events.MovedPieceEvent>().Publish(new Move(fromPos, userInput));
                _gameInfo.HalfMoves++;
                _gameInfo.FullMoves++;
                _selectedPiece = null;
                _playerSwitchSystem.NextTurn(this);
            }
            _gameInfo.ColorToMove = _playerSwitchSystem.CurrentPlayer.Color;
            if (_rules[RuleNames.Mate].IsSatisfied())
            {
                _eventAggregator.GetEvent <Chess.Infrastructure.Events.MessageEvent>().Publish(new MessageInfo(0, "You lost! King in check-mate."));
            }
            if (CurrentPlayer.IsAutomatic)
            {
                CurrentPlayer.Act(this);
            }
        }