Пример #1
0
 /// <summary>
 /// Removes piece from board to its corresponding place outside
 /// </summary>
 /// <param name="piecePos"> The position of the piece to kill </param>
 /// <param name="pieceType"> The type and color of the piece to kill </param>
 private void killPiece(byte piecePos, ControllerPieceType pieceType)
 {
     if (pieceType._pieceType != Engine.ChessPieceType.Pawn)
     {
         for (int i = 0; i < _deadPieces[pieceType].Length; ++i)
         {
             if (!_deadPieces[pieceType][i]._state)
             {
                 _currCommands.Add(get2DPos(piecePos).Concat(
                                       _deadPieces[pieceType][i]._position).ToArray());
                 _deadPieces[pieceType][i]._state = true;
                 break;
             }
         }
     }
     else
     {
         for (int i = 0; i < _deadPawns.Length; ++i)
         {
             if (!_deadPawns[i]._state)
             {
                 _currCommands.Add(get2DPos(piecePos).Concat(
                                       _deadPawns[i]._position).ToArray());
                 _deadPawns[i]._state = true;
                 break;
             }
         }
     }
 }
Пример #2
0
        /// <summary>
        /// Generates basic movement commands based on
        /// current move type
        /// </summary>
        private void generateCommands()
        {
            _currCommands = new List <byte[]>();
            switch (_currMoveType)
            {
            case (ControllerMoveTypes.MOVE2EMPTY):
                _currCommands.Add(get2DPos(_currMove.MovingPiecePrimary.SrcPosition).Concat(
                                      get2DPos(_currMove.MovingPiecePrimary.DstPosition)).ToArray());
                checkPromotion();
                break;

            case (ControllerMoveTypes.MOVE_AND_KILL):
                ControllerPieceType tempKilledPiece = new ControllerPieceType();
                tempKilledPiece._pieceColor = _currMove.TakenPiece.PieceColor;
                tempKilledPiece._pieceType  = _currMove.TakenPiece.PieceType;
                killPiece(_currMove.TakenPiece.Position, tempKilledPiece);
                _currCommands.Add(get2DPos(_currMove.MovingPiecePrimary.SrcPosition).Concat(
                                      get2DPos(_currMove.MovingPiecePrimary.DstPosition)).ToArray());
                checkPromotion();
                break;

            case (ControllerMoveTypes.CASTLING):
                _currCommands.Add(get2DPos(_currMove.MovingPiecePrimary.SrcPosition).Concat(
                                      get2DPos(_currMove.MovingPiecePrimary.DstPosition)).ToArray());
                _currCommands.Add(get2DPos(_currMove.MovingPieceSecondary.SrcPosition).Concat(
                                      get2DPos(_currMove.MovingPieceSecondary.DstPosition)).ToArray());
                break;

            default:
                break;
            }
        }