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; }
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; } } }
private void UpdatePreviewBoard() { _depGameBoard.OnGet(); if (_mainNavigation.PreviewMove != null && _gameBoard.LegalMoves.Contains(_mainNavigation.PreviewMove)) _previewBoard = _gameBoard.AfterMove(_mainNavigation.PreviewMove); else _previewBoard = _gameBoard; }
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); } }
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; }