Пример #1
0
        private void CapturedPieceBoxClick(object sender, EventArgs e)
        {
            if (!chessboard.RetakingIsActive || chessboard.CurrentTurn != playerTurn)
            {
                return;
            }

            var clickedCapturedPieceBox = (CapturedPieceBoxUserControl)sender;
            var chessPieceToRetake      = clickedCapturedPieceBox.ChessPiece;
            var count = chessboard.CapturedPieceCollection.GetEntryCount(chessPieceToRetake);

            if (count <= 0)
            {
                return;
            }

            var retakingPosition = chessboard.RetakingPosition;

            chessboard.RetakePiece(retakingPosition, chessPieceToRetake);
            networkManager?.NotifyOfRetakeSelection(retakingPosition, chessboard[retakingPosition].Piece);
            EndTurn();
        }
Пример #2
0
        private AIResponse HandleRetaking(IChessboard chessboard)
        {
            var canRetakePieces = chessboard.CapturedPieceCollection.GetCountTotalCapturedPieces(Turn, typeof(Pawn)) > 0;

            if (!canRetakePieces)
            {
                return(AIResponse.SuccessfulMove);
            }

            var capturedTypes = chessboard.CapturedPieceCollection.GetIndividualCountsForCapturedPieces(Turn, typeof(Pawn))
                                .Where(x => x.Value > 0)
                                .ToList();

            var choice        = rng.Next(0, capturedTypes.Count);
            var pieceType     = capturedTypes[choice].Key;
            var pieceToRetake = ChessPieceProvider.GetChessPiece(pieceType, Turn);

            chessboard.RetakePiece(chessboard.RetakingPosition, pieceToRetake);

            return(AIResponse.SuccessfulMove);
        }