Exemple #1
0
 public void GenerateLazyMoves(Moves moves, Moves.enmMovesType movesType)
 {
     Board.AppendPiecePath(moves, m_Base, m_Base.Player, 1, movesType);
     Board.AppendPiecePath(moves, m_Base, m_Base.Player, -1, movesType);
     Board.AppendPiecePath(moves, m_Base, m_Base.Player, -16, movesType);
     Board.AppendPiecePath(moves, m_Base, m_Base.Player, 16, movesType);
 }
Exemple #2
0
        public void GenerateLazyMoves(int depth, Moves moves, Moves.enmMovesType movesType, Square squareAttacking)
        {
//			if (squareAttacking==null)
//			{
            // All moves as defined by movesType
            foreach (Piece piece in this.m_colPieces)
            {
                piece.GenerateLazyMoves(moves, movesType);

                if (movesType != Moves.enmMovesType.All)
                {
                    Move move;
                    int  intIndex;
                    for (intIndex = moves.Count - 1; intIndex >= 0; intIndex--)
                    {
                        move = moves.Item(intIndex);
                        if (!(
                                move.Name == Move.enmName.PawnPromotion
                                ||
                                move.To.Ordinal == squareAttacking.Ordinal
//								||
//								(depth>=-2 && move.From.Piece.BasicValue<move.To.Piece.BasicValue)
                                ||
                                (depth >= -4 && !move.To.CanBeMovedToBy(move.Piece.Player.OtherPlayer))                               // &&
                                )
                            )
                        {
                            moves.Remove(move);
                        }
                    }
                }
            }
//			}
//			else
//			{
//				// Just re-capture moves
//				squareAttacking.AttackerMoveList(moves, this);
//			}

/*
 *
 */
        }
Exemple #3
0
        public static void AppendPiecePath(Moves moves, Piece piece, Player player, int Offset, Moves.enmMovesType movesType)
        {
            int    intOrdinal = piece.Square.Ordinal;
            Square square;

            intOrdinal += Offset;
            while ((square = Board.GetSquare(intOrdinal)) != null)
            {
                if (square.Piece == null)
                {
                    if (movesType == Moves.enmMovesType.All)
                    {
                        moves.Add(0, 0, Move.enmName.Standard, piece, piece.Square, square, null, 0, 0);
                    }
                }
                else if (square.Piece.Player.Colour != player.Colour && square.Piece.CanBeTaken)
                {
                    moves.Add(0, 0, Move.enmName.Standard, piece, piece.Square, square, square.Piece, 0, 0);
                    break;
                }
                else
                {
                    break;
                }
                intOrdinal += Offset;
            }
        }
Exemple #4
0
        public void GenerateLazyMoves(Moves moves, Moves.enmMovesType movesType)
        {
            Square square;

            switch (movesType)
            {
            case Moves.enmMovesType.All:
                square = Board.GetSquare(m_Base.Square.Ordinal - 1); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 15); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 16); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 17); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 1); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 15); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 16); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 17); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }

                if (this.CanCastleKingSide)
                {
                    moves.Add(0, 0, Move.enmName.CastleKingSide, m_Base, m_Base.Square, Board.GetSquare(m_Base.Square.Ordinal + 2), null, 0, 0);
                }
                if (this.CanCastleQueenSide)
                {
                    moves.Add(Game.TurnNo, m_Base.LastMoveTurnNo, Move.enmName.CastleQueenSide, m_Base, m_Base.Square, Board.GetSquare(m_Base.Square.Ordinal - 2), null, 0, 0);
                }

                break;

            case Moves.enmMovesType.Recaptures_Promotions:
            case Moves.enmMovesType.CapturesChecksPromotions:
                square = Board.GetSquare(m_Base.Square.Ordinal - 1); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 15); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 16); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 17); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 1); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 15); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 16); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 17); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                break;
            }
        }
Exemple #5
0
        public void GenerateLazyMoves(Moves moves, Moves.enmMovesType movesType)
        {
            Square square;
            bool   blnIsPromotion = this.m_Base.Player.Colour == Player.enmColour.White && this.m_Base.Square.Rank == 6
                                    ||
                                    this.m_Base.Player.Colour == Player.enmColour.Black && this.m_Base.Square.Rank == 1;

            // Forward one
            if (movesType == Moves.enmMovesType.All || blnIsPromotion)
            {
                if ((square = Board.GetSquare(m_Base.Square.Ordinal + m_Base.Player.PawnForwardOffset)) != null && square.Piece == null)
                {
                    moves.Add(0, 0, (blnIsPromotion ? Move.enmName.PawnPromotion : Move.enmName.Standard), this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
            }

            // Forward two
            if (movesType == Moves.enmMovesType.All)
            {
                if (!m_Base.HasMoved)
                {
                    // Check one square ahead is not occupied
                    if ((square = Board.GetSquare(m_Base.Square.Ordinal + m_Base.Player.PawnForwardOffset)) != null && square.Piece == null)
                    {
                        if ((square = Board.GetSquare(m_Base.Square.Ordinal + m_Base.Player.PawnForwardOffset + m_Base.Player.PawnForwardOffset)) != null && square.Piece == null)
                        {
                            moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                        }
                    }
                }
            }

            // Take right
            if ((square = Board.GetSquare(m_Base.Square.Ordinal + m_Base.Player.PawnAttackRightOffset)) != null)
            {
                if (square.Piece != null && square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
            }

            // Take left
            if ((square = Board.GetSquare(m_Base.Square.Ordinal + m_Base.Player.PawnAttackLeftOffset)) != null)
            {
                if (square.Piece != null && square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
            }

            // En Passent
            if (
                this.m_Base.Square.Rank == 4 && this.m_Base.Player.Colour == Player.enmColour.White
                ||
                this.m_Base.Square.Rank == 3 && this.m_Base.Player.Colour == Player.enmColour.Black
                )
            {
                Piece piecePassed;
                // Left
                if ((piecePassed = Board.GetPiece(m_Base.Square.Ordinal - 1)) != null && piecePassed.NoOfMoves == 1 && piecePassed.LastMoveTurnNo == Game.TurnNo && piecePassed.Name == Piece.enmName.Pawn && piecePassed.Player.Colour != m_Base.Player.Colour)
                {
                    square = Board.GetSquare(m_Base.Square.Ordinal + m_Base.Player.PawnAttackLeftOffset);
                    moves.Add(0, 0, Move.enmName.EnPassent, this.m_Base, this.m_Base.Square, square, piecePassed, 0, 0);
                }
                // Right
                if ((piecePassed = Board.GetPiece(m_Base.Square.Ordinal + 1)) != null && piecePassed.NoOfMoves == 1 && piecePassed.LastMoveTurnNo == Game.TurnNo && piecePassed.Name == Piece.enmName.Pawn && piecePassed.Player.Colour != m_Base.Player.Colour)
                {
                    square = Board.GetSquare(m_Base.Square.Ordinal + m_Base.Player.PawnAttackRightOffset);
                    moves.Add(0, 0, Move.enmName.EnPassent, this.m_Base, this.m_Base.Square, square, piecePassed, 0, 0);
                }
            }
        }
Exemple #6
0
        public void GenerateLazyMoves(Moves moves, Moves.enmMovesType movesType)
        {
            Square square;

            switch (movesType)
            {
            case Moves.enmMovesType.All:
                square = Board.GetSquare(m_Base.Square.Ordinal + 33); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 18); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 14); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 31); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 33); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 18); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 14); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 31); if (square != null && (square.Piece == null || (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                break;

            case Moves.enmMovesType.Recaptures_Promotions:
            case Moves.enmMovesType.CapturesChecksPromotions:
                square = Board.GetSquare(m_Base.Square.Ordinal + 33); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 18); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 14); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 31); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 33); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal - 18); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 14); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                square = Board.GetSquare(m_Base.Square.Ordinal + 31); if (square != null && (square.Piece != null && (square.Piece.Player.Colour != m_Base.Player.Colour && square.Piece.CanBeTaken)))
                {
                    moves.Add(0, 0, Move.enmName.Standard, this.m_Base, this.m_Base.Square, square, square.Piece, 0, 0);
                }
                break;
            }
        }