Esempio n. 1
0
        public GameBoard AfterMove(Square square)
        {
            Debug.Assert(_legalMoves.Contains(square));

            GameBoard nextPosition = new GameBoard();
            nextPosition._moveIndex = _moveIndex + 1;

            nextPosition._pieces = new PieceColor[NumberOfSquares];
            Array.Copy(_pieces, nextPosition._pieces, NumberOfSquares);
            List<Square> capturedPieces = FlankedSquares(square).ToList();
            foreach (Square capturedPiece in capturedPieces)
                nextPosition._pieces[capturedPiece.Index] = _toMove;
            nextPosition._pieces[square.Index] = _toMove;

            nextPosition._toMove = GetOpposite();
            nextPosition.UpdateLegalMoves();

            return nextPosition;
        }
Esempio n. 2
0
        private void UpdateGameBoard()
        {
            _gameBoard = null;
            if (_player != null)
            {
                List<Move> moves = _player.Game.Moves.ToList();
                moves.Sort(new MoveComparer());
                int expectedIndex = 0;
                _gameBoard = GameBoard.OpeningPosition;
                foreach (Move move in moves)
                {
                    if (move.Index != expectedIndex)
                        return;
                    if (move.Player.Index == 0 && _gameBoard.ToMove != PieceColor.Black)
                        return;
                    if (move.Player.Index == 1 && _gameBoard.ToMove != PieceColor.White)
                        return;

                    Square square = Square.FromIndex(move.Square);
                    if (!_gameBoard.LegalMoves.Contains(square))
                        return;

                    _gameBoard = _gameBoard.AfterMove(square);
                    ++expectedIndex;
                }
            }
        }
Esempio n. 3
0
 private void UpdatePreviewBoard()
 {
     _depGameBoard.OnGet();
     if (_mainNavigation.PreviewMove != null && _gameBoard.LegalMoves.Contains(_mainNavigation.PreviewMove))
         _previewBoard = _gameBoard.AfterMove(_mainNavigation.PreviewMove);
     else
         _previewBoard = _gameBoard;
 }
Esempio n. 4
0
        private void UpdateGameBoard()
        {
            _depGameBoardRaw.OnGet();
            _priorBoard = _priorBoardRaw;
            _gameBoard = _gameBoardRaw;

            if (_mainNavigation.PendingMove != null && _gameBoard.LegalMoves.Contains(_mainNavigation.PendingMove))
            {
                _priorBoard = _gameBoard;
                _gameBoard = _priorBoard.AfterMove(_mainNavigation.PendingMove);
            }
        }
Esempio n. 5
0
 private void UpdatePreviewBoard()
 {
     System.Diagnostics.Debug.WriteLine("UpdatePreviewBoard " + ++_updateCount);
     GameBoard gameBoard = GetGameBoard();
     if (_mainNavigation.PreviewMove != null && gameBoard.LegalMoves.Contains(_mainNavigation.PreviewMove))
         _previewBoard = gameBoard.AfterMove(_mainNavigation.PreviewMove);
     else
         _previewBoard = gameBoard;
 }