/// <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; } } } }
/// <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; } }