private static void TestMove() { var board = MakeBoard("rnbqkbnr/pppppppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR b KQkq -"); //board.DoMove2(new Move(ChessPosition.D2, ChessPosition.D3, ChessPiece.WhitePawn)); //board.UndoMove(); Console.WriteLine(board.Print()); var slidingMoveGenerator = new MagicBitboardsService(); //var evaluationService = new EvaluationService(); //Console.WriteLine(evaluationService.Evaluate(board)); var attacksService = new AttacksService(slidingMoveGenerator); var pinDetector = new PinDetector(slidingMoveGenerator); var validator = new MoveValidator(attacksService, slidingMoveGenerator, pinDetector); var movesService = new MoveGenerator(attacksService, slidingMoveGenerator, pinDetector, validator); var forWhite = true; var moves = new Move[218]; var moveCount = 0; movesService.GetAllLegalMoves(board, moves, ref moveCount); //var dests = moves.Select(x => x.To); //var toMoveBoard = fact.PositionsToBitBoard(dests); //var attacked = attacksService.GetAllAttacked(board); //var newMove = new Move(4,2,ChessPiece.WhiteKing); //board.DoMove2(newMove); //Debugging.ShowBitBoard(board.BitBoard[ChessPiece.WhiteKing], board.BitBoard[ChessPiece.WhiteRook]); }
private static void DoSearch() { var fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; // Starting pos //fen = "2rr3k/pp3pp1/1nnqbN1p/3pN3/2pP4/2P3Q1/PPB4P/R4RK1 w - -"; // Mate in 3 fen = "r1b1k2r/ppppnppp/2n2q2/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R w KQkq - 0 1"; // Developed fen = "r1b1kb1r/2pp1ppp/1np1q3/p3P3/2P5/1P6/PB1NQPPP/R3KB1R b KQkq - 0 1 "; // Midgame var fact = new BoardFactory(); var board = fact.ParseFEN(fen); var hyperbola = new HyperbolaQuintessence(); var evaluationService = new EvaluationService(); var attacksService = new AttacksService(hyperbola); var movesService = new PossibleMovesService(attacksService, hyperbola); var interruptor = new ConsoleInterruptor(); var searchService = new SearchService(movesService, evaluationService, interruptor); searchService.OnSearchInfo += info => Console.WriteLine(info.ToString()); var sParams = new SearchParams(); //sParams.MaxDepth = 5; sParams.Infinite = true; var move = searchService.Search(board, sParams); }
public EvaluationService2(EvaluationData evaluationData) { _pawnControl = new ulong[2]; _evaluationScores = new EvaluationScores(); _evaluationData = evaluationData; _evalTable = new EvalHashTable(); _evalTable.SetSize(16 * 1024 * 1024); _pawnTable = new EvalHashTable(); _pawnTable.SetSize(16 * 1024 * 1024); _slideGenerator = new MagicBitboardsService(); _pinDetector = new PinDetector(_slideGenerator); _attacks = new AttacksService(_slideGenerator); }
public Game(IInterruptor interruptor) { var hyperbola = new HyperbolaQuintessence(); var evaluationService = new EvaluationService(); var attacksService = new AttacksService(hyperbola); var movesService = new PossibleMovesService(attacksService, hyperbola); var searchService = new SearchService(movesService, evaluationService, interruptor); BoardFact = new BoardFactory(); Hyperbola = hyperbola; Evaluation = evaluationService; Attacks = attacksService; Moves = movesService; Search = searchService; }
public Game() { var slidingMoveGenerator = new MagicBitboardsService(); var evaluationService = new EvaluationService2(new EvaluationData()); //var evaluationService = new NnueEvaluationService(new NnueExternalClient()); var attacksService = new AttacksService(slidingMoveGenerator); var pinDetector = new PinDetector(slidingMoveGenerator); var validator = new MoveValidator(attacksService, slidingMoveGenerator, pinDetector); var movesService = new MoveGenerator(attacksService, slidingMoveGenerator, pinDetector, validator); var searchService = new SearchService2(movesService, evaluationService); BoardFact = new BoardFactory(); Hyperbola = slidingMoveGenerator; Evaluation = evaluationService; Attacks = attacksService; Moves = movesService; Search = searchService; }
private static void TestRepetitions() { var fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; // Starting pos //fen = "2rr3k/pp3pp1/1nnqbN1p/3pN3/2pP4/2P3Q1/PPB4P/R4RK1 w - -"; // Mate in 3 fen = "r1b1k2r/ppppnppp/2n2q2/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R w KQkq - 0 1"; // Developed var fact = new BoardFactory(); var board = fact.ParseFEN(fen); var hyperbola = new HyperbolaQuintessence(); var evaluationService = new EvaluationService(); var attacksService = new AttacksService(hyperbola); var movesService = new PossibleMovesService(attacksService, hyperbola); var interruptor = new ConsoleInterruptor(); var searchService = new SearchService(movesService, evaluationService, interruptor); Console.WriteLine(searchService.IsRepetition(board)); var move = new Move(1, 18, ChessPiece.WhiteKnight); board = board.DoMove(move); Console.WriteLine(move.ToPositionString() + " " + searchService.IsRepetition(board)); move = new Move(57, 42, ChessPiece.BlackKnight); board = board.DoMove(move); Console.WriteLine(move.ToPositionString() + " " + searchService.IsRepetition(board)); move = new Move(18, 1, ChessPiece.WhiteKnight); board = board.DoMove(move); Console.WriteLine(move.ToPositionString() + " " + searchService.IsRepetition(board)); move = new Move(42, 57, ChessPiece.BlackKnight); board = board.DoMove(move); Console.WriteLine(move.ToPositionString() + " " + searchService.IsRepetition(board)); move = new Move(1, 18, ChessPiece.WhiteKnight); board = board.DoMove(move); Console.WriteLine(move.ToPositionString() + " " + searchService.IsRepetition(board)); move = new Move(57, 40, ChessPiece.BlackKnight); board = board.DoMove(move); Console.WriteLine(move.ToPositionString() + " " + searchService.IsRepetition(board)); }
public static void TestSee() { var board = MakeBoard("1k1r3q/1ppn3p/p4b2/4p3/8/P2N2P1/1PP1R1BP/2K1Q3 w - - 0 1"); var slidingMoveGenerator = new MagicBitboardsService(); var attacksService = new AttacksService(slidingMoveGenerator); var seeService = new SeeService(attacksService); var from = ChessPosition.D3; var to = ChessPosition.E5; var move = new Move(from, to, board.ArrayBoard[from], board.ArrayBoard[to]); //board.DoMove2(move); Console.WriteLine(1UL << move.From); Console.WriteLine(1UL << move.To); Console.WriteLine(board.Print()); var score = seeService.See(board, move); Console.WriteLine(score); }
private static void DoPerft() { var fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; //fen = "3k4/3p4/8/K1P4r/8/8/8/8 b - - 0 50"; //fen = "8/1kP5/8/K2p3r/8/8/8/8 w - - 1 53 "; //fen = "r1b1k2r/ppppnppp/2n2q2/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R w KQkq - 0 1"; //fen = "2k5/8/8/8/8/8/6p1/2K5 w - - 1 1 "; //fen = "rnbqkbnr/1ppppppp/8/p7/1P6/P7/2PPPPPP/RNBQKBNR b KQkq b3 0 2 "; var fact = new BoardFactory(); var hyperbola = new HyperbolaQuintessence(); var attacksService = new AttacksService(hyperbola); var movesService = new PossibleMovesService(attacksService, hyperbola); var perft = new PerftService(movesService); var results = perft.GetPossibleMoves(fact.ParseFEN(fen), 1); using (var sharperClient = new SharperPerftClient(@"C:\sharper\Sharper.exe", fen)) { var perftRunner = new PerftRunner(perft, sharperClient, fact); perftRunner.OnOut += Console.Write; perftRunner.Test(fen, 6); } }
public SeeService(AttacksService attacks) { _attacks = attacks; SeeWeights = new short[ChessPiece.Count]; SeeWeights[ChessPiece.WhitePawn] = 100; SeeWeights[ChessPiece.BlackPawn] = 100; SeeWeights[ChessPiece.WhiteKnight] = 325; SeeWeights[ChessPiece.BlackKnight] = 325; SeeWeights[ChessPiece.WhiteBishop] = 325; // 325 instead of 335, exchanging bishop for knight SeeWeights[ChessPiece.BlackBishop] = 325; // is not strictly "losing" SeeWeights[ChessPiece.WhiteRook] = 500; SeeWeights[ChessPiece.BlackRook] = 500; SeeWeights[ChessPiece.WhiteQueen] = 975; SeeWeights[ChessPiece.BlackQueen] = 975; SeeWeights[ChessPiece.WhiteKing] = 0; SeeWeights[ChessPiece.BlackKing] = 0; }
private static void TestMove() { var fact = new BoardFactory(); var board = fact.ParseFEN("r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -"); board.EnPassantFile = Board.Files[3]; var hyperbola = new HyperbolaQuintessence(); var evaluationService = new EvaluationService(); Console.WriteLine(evaluationService.Evaluate(board)); var attacksService = new AttacksService(hyperbola); var movesService = new PossibleMovesService(attacksService, hyperbola); var forWhite = true; var moves = movesService.GetPossibleKingMoves(board).ToList(); var dests = moves.Select(x => x.To); var toMoveBoard = fact.PiecesToBitBoard(dests); var attacked = attacksService.GetAllAttacked(board); var newMove = new Move(4, 2, ChessPiece.WhiteKing); var movedBoard = board.DoMove(newMove); Debugging.ShowBitBoard(movedBoard.BitBoard[ChessPiece.WhiteKing], movedBoard.BitBoard[ChessPiece.WhiteRook]); }