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