示例#1
0
        public void Move(Position origin, Position destination)
        {
            var originBox      = this[origin];
            var destinationBox = this[destination];

            if (destinationBox.Piece != null)
            {
                CapturedPieceCollection.AddEntry(destinationBox.Piece);
            }

            destinationBox.Piece = originBox.Piece;
            originBox.Piece      = null;

            if (destinationBox.Piece is King)
            {
                UpdateKingPosition(destinationBox);
            }

            BeginPieceRecapturingIfPawnReachedTheEnd(destinationBox);

            if (!RetakingIsActive)
            {
                NextTurn();
            }

            // TODO: Maybe Handle history here
        }
示例#2
0
        public ChessboardClassic()
        {
            InitializeBoxCollection();
            CapturedPieceCollection = new CapturedPieceCollection();

            NewGame();
        }
示例#3
0
        public void NewGame()
        {
            SetChessboardBoxesAsUnavailable();
            CapturedPieceCollection.Clear();

            ClearPieces();
            AddWhitePieces();
            AddBlackPieces();

            CurrentTurn       = PieceColor.White;
            PositionWhiteKing = new Position(1, 5);
            PositionBlackKing = new Position(8, 4);
        }
示例#4
0
        // TODO: Refactor arguments
        public void RetakePiece(Position position, ChessPiece chessPiece)
        {
            var entries = CapturedPieceCollection.GetEntryCount(chessPiece);

            if (entries == 0)
            {
                // TODO: Maybe send notification
                return;
            }

            var box = this[position];

            box.Piece = chessPiece;
            CapturedPieceCollection.DecrementEntry(chessPiece);

            NextTurn();
            RetakingIsActive = false;
        }
示例#5
0
 // TODO: Refactor
 private void BeginPieceRecapturingIfPawnReachedTheEnd(Box destinationBox)
 {
     if (destinationBox.Position.Row == 8 && destinationBox.Piece is Pawn && destinationBox.Piece.Color == PieceColor.White)
     {
         if (CapturedPieceCollection.GetCountTotalCapturedPieces(PieceColor.White, typesToExclude: typeof(Pawn)) > 0)
         {
             RetakingIsActive = true;
             RetakingPosition = destinationBox.Position;
         }
     }
     else if (destinationBox.Position.Row == 1 && destinationBox.Piece is Pawn && destinationBox.Piece.Color == PieceColor.Black)
     {
         if (CapturedPieceCollection.GetCountTotalCapturedPieces(PieceColor.Black, typesToExclude: typeof(Pawn)) > 0)
         {
             RetakingIsActive = true;
             RetakingPosition = destinationBox.Position;
         }
     }
 }