lithander / leorik Goto Github PK
View Code? Open in Web Editor NEWLeorik is a strong, open-source UCI chess engine written in C#
License: MIT License
Leorik is a strong, open-source UCI chess engine written in C#
License: MIT License
Hi Thomas,
I downloaded Leorik and noticed it misses a dll on my old quadcore with old WIN7.
Downloading the dll threw an exception.
Then I remembered how I compiled Minimal once and tried to compile it the same way.
It told me I have to use DotNet6.0 (since I was still on 5.x), which I downloaded and I could finally build it successfully from cmd.
(I just had to remove the old NuGet.config file after asking 'Dr. Google' for this problem:
C:\Program Files\dotnet\sdk\6.0.200\NuGet.targets(564,5): error : Data at the root level is invalid. Line 1, position 1. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Leorik.Core.csproj]
C:\Program Files\dotnet\sdk\6.0.200\NuGet.targets(564,5): error : NuGet.Config weist kein gültiges XML-Format auf. Pfad: "C:\Users\Guenther Simon\AppData\Roaming\NuGet\NuGet.Config". [C:\msys64\home\Guenther Simon\Leorik\Leorik.Perft\Leorik
.Perft.csproj]
solution => https://medium.com/@vaishali.fresher/nuget-config-is-not-valid-xml-4967e4d66470)
C:\msys64\home\Guenther Simon\Leorik>dotnet build -c Release
Microsoft (R)-Build-Engine, Version 17.1.0+ae57d105c für .NET
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
Wiederherzustellende Projekte werden ermittelt...
"C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Leorik.Core.csproj" wiederhergestellt (in "512 ms").
"C:\msys64\home\Guenther Simon\Leorik\Leorik.Perft\Leorik.Perft.csproj" wiederhergestellt (in "556 ms").
"C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Leorik.Test.csproj" wiederhergestellt (in "556 ms").
"C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\Leorik.Search.csproj" wiederhergestellt (in "556 ms").
"C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj" wiederhergestellt (in "3 ms").
C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Move.cs(5,28): warning CS0660: "Move" definiert den Operator == oder !=, aber überschreibt Object.Equals(object o) nicht. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Leorik.Core.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Move.cs(5,28): warning CS0661: "Move" definiert den Operator == oder !=, aber überschreibt Object.GetHashCode() nicht. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Leorik.Core.csproj]
Leorik.Core -> C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\bin\Release\net6.0\Leorik.Core.dll
C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\Transpositions.cs(64,16): warning CS8618: Non-Nullable-Feld "_table" muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie eine Deklaration von "Feld" als Nulla
ble. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\Leorik.Search.csproj]
Leorik.Search -> C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\bin\Release\net6.0\Leorik.Search.dll
Leorik.Perft -> C:\msys64\home\Guenther Simon\Leorik\Leorik.Perft\bin\Release\net6.0\Leorik.Perft.dll
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(87,30): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(130,23): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(8,35): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(9,29): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Program.cs(49,70): warning CS8604: Mögliches Nullverweisargument für den Parameter "epd" in "int Program.ParseEpd(string epd, out BoardState board, out List<Move> bestMoves)". [C:\msys64\home
\Guenther Simon\Leorik\Leorik.Test\Leorik.Test.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Program.cs(132,30): warning CS8600: Das NULL-Literal oder ein möglicher NULL-Wert wird in einen Non-Nullable-Typ konvertiert. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Leorik.Test.csp
roj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Program.cs(133,31): warning CS8602: Dereferenzierung eines möglichen Nullverweises. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Leorik.Test.csproj]
Leorik.Engine -> C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\bin\Release\net6.0\Leorik.Engine.dll
Leorik.Test -> C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\bin\Release\net6.0\Leorik.Test.dll
Der Buildvorgang wurde erfolgreich ausgeführt.
C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Move.cs(5,28): warning CS0660: "Move" definiert den Operator == oder !=, aber überschreibt Object.Equals(object o) nicht. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Leorik.Core.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Move.cs(5,28): warning CS0661: "Move" definiert den Operator == oder !=, aber überschreibt Object.GetHashCode() nicht. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Leorik.Core.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\Transpositions.cs(64,16): warning CS8618: Non-Nullable-Feld "_table" muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie eine Deklaration von "Feld" als Nulla
ble. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\Leorik.Search.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(87,30): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(130,23): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(8,35): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs(9,29): warning CS8625: Ein NULL-Literal kann nicht in einen Non-Nullable-Verweistyp konvertiert werden. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Leorik.Engine.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Program.cs(49,70): warning CS8604: Mögliches Nullverweisargument für den Parameter "epd" in "int Program.ParseEpd(string epd, out BoardState board, out List<Move> bestMoves)". [C:\msys64\home
\Guenther Simon\Leorik\Leorik.Test\Leorik.Test.csproj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Program.cs(132,30): warning CS8600: Das NULL-Literal oder ein möglicher NULL-Wert wird in einen Non-Nullable-Typ konvertiert. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Leorik.Test.csp
roj]
C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Program.cs(133,31): warning CS8602: Dereferenzierung eines möglichen Nullverweises. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Test\Leorik.Test.csproj]
10 Warnung(en)
0 Fehler
The problem is it will still throw an exception which clearly hints 'my platform' is not supported,
probably due to missing 'bmi' and/or 'popcnt'.
0.234: < Leorik 1.0
0.296: < Unhandled exception. System.TypeInitializationException: The type initializer for 'Leorik.Engine.Program' threw an exception.
0.296: < ---> System.PlatformNotSupportedException: Operation is not supported on this platform.
0.296: < at System.Runtime.Intrinsics.X86.Bmi1.X64.ResetLowestSetBit(UInt64 value)
0.296: < at Leorik.Core.Evaluation.AddPieces(BoardState& board) in C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Evaluation.cs:line 26
0.296: < at Leorik.Core.Notation.GetBoardState(String fen) in C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Notation.cs:line 105
0.296: < at Leorik.Core.Notation.GetStartingPosition() in C:\msys64\home\Guenther Simon\Leorik\Leorik.Core\Notation.cs:line 53
0.296: < at Leorik.Engine.Engine..ctor() in C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Engine.cs:line 12
0.296: < at Leorik.Engine.Program..cctor() in C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Program.cs:line 11
0.296: < --- End of inner exception stack trace ---
0.296: < at Leorik.Engine.Program.Main() in C:\msys64\home\Guenther Simon\Leorik\Leorik.Engine\Program.cs:line 17
0.296: < at Leorik.Engine.Program.<Main>()
Is it possible to add a flag to the build process for the C# compiler, or does it require some code change?
(I don't care, if it would lose some speed)
Hey @lithander, please consider adding a license file 😇
Hi Thomas!
When trying to compile your current branch 'no_handcrafted_terms', I get this error now:
C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\IterativeSearch.cs(6,19): error CS8983: Eine "Struktur" mit Feldinitialisierern muss einen explizit deklarierten Konstruktor enthalten. [C:\msys64\home\Guenther Simon\Leorik\Leorik.Search\L
eorik.Search.csproj]
Best regards,
Guenther
(and merry xmas in advance :)
First of all, I apologize for filling a bug report while it is not one, I just could not find a way to contact you :(
I would like to do a wrapper around Leorik, something that would be similar to that :
class EngineInterface {
Action onNewLine; //called each time engine output a new line
bool start(); //start engine
void stop(); //stop engine
bool startListening(); //if listening call onNewline each time engine output lines, other wise, readLine should be called
bool stopListening();
bool isListening();
bool write(string uciCommand);
string readLine(int timeout);
}
I'm a bit confused by the different projects Core, Engine, etc .... and I was looking for some information about the organisation of the code, is there a documentation somewhere?
Hello Thomas,
Beside of playing, I think one of great usage with chess engine(UCI protocol) is analysis capability. From a standard info line, we could use score and PV information to estimate roughly what would have been (possible CP, possible PV moves) with best available moves. And searchmoves sub-command will help us estimate roughly what would have been with our move. For example, here is one of my self reviewing my match using Stockfish:
1.e4: Best Move
pvCurrent(0.26): e4 e5 Nf3 Nc6 d4 exd4 Nxd4 Nf6 Nxc6 bxc6 Bd3 d5 e5 Nd7 O-O Nc5 f4 Nxd3 Qxd3 Be7 Qc3
pvAI(0.34): e4 e5 Nf3 Nc6 Bb5 Nge7
1...c5: NA
pvCurrent(0.27): c5
pvAI(0.28): e5 Nf3 Nc6 Bc4 Nf6 Ng5 d5 exd5 Na5 Bb5+ Bd7 Bxd7+ Qxd7 O-O Qxd5 Nc3
2.f4: Excellent
pvCurrent(-0.13): f4 e6 Nf3 d5 Bb5+ Bd7 Bxd7+ Qxd7 Ne5 Qd6 Nc3 Nc6
pvAI(0.3): Nf3 Nc6 d4 cxd4 Nxd4 g6 Nc3 Bg7 Be3 Nf6 Nxc6 bxc6 e5 Ng8 f4 d5 Qf3 Nh6 h3 f6 O-O-O
2...d6: Excellent
pvCurrent(0.05): d6 Nf3 Nc6 Nc3 g6 d4 cxd4 Nxd4 Bg7 Be3 Nf6 Qd2 O-O Be2 Nxd4 Bxd4 e5 fxe5 dxe5 Bxe5 Qxd2+ Kxd2
pvAI(-0.07): e6 d3 Nc6 Nf3 Nge7 Be2 g6 Be3 b6 O-O
3.Nf3: Excellent
pvCurrent(0.03): Nf3 Nc6 Nc3 g6 d4 cxd4 Nxd4 Bg7 Be3 Nf6 Be2 O-O a4 Re8 O-O e5 fxe5 Rxe5
pvAI(0.13): d4 Nf6 Nc3 cxd4 Qxd4 Nc6 Bb5 g6 e5 dxe5 Qxd8+ Kxd8 Bxc6 bxc6 fxe5 Nd5 Nxd5 cxd5 Be3 Bg7 Nf3 Ke8 O-O-O
3...Nc6: Best Move
pvCurrent(0.09): Nc6 Nc3 g6 d4 cxd4 Nxd4 Bg7 Be3 Nf6 Be2 O-O Qd3 Bd7 Rd1 Rc8 O-O a6 a4 Ng4 Nxc6 Rxc6
pvAI(0.0): Nc6 d4 cxd4 Nxd4 g6 Nc3 Bg7 Be3 Nf6 Be2 O-O a4 Re8 O-O e5 fxe5 Rxe5 Bf3
4.Bb5: Excellent
pvCurrent(0.01): Bb5 Bd7 b3 Nf6 Bxc6 Bxc6 d3 g6 Bb2 Bg7 O-O O-O Nbd2
pvAI(0.12): Nc3 g6 d4 cxd4 Nxd4 Bg7 Be3 Nf6 Be2 O-O Qd3 Ng4 Bxg4 Bxg4 O-O Nxd4 Bxd4 e5 Be3 exf4 Rxf4
4...Bd7: Best Move
pvCurrent(0.0): Bd7
pvAI(-0.03): Bd7 O-O
5.O-O: Best Move
pvCurrent(0.01): O-O g6 d3 Bg7 Nc3 Nf6 a4 a6 Bxc6 Bxc6 Qe1 b5 e5 Nd5 axb5 axb5 Rxa8 Bxa8 Nxb5 O-O Qh4
pvAI(-0.01): O-O g6
5...a6: Excellent
pvCurrent(0.05): a6 Bxc6 Bxc6 d3 g6 Bd2 b5 Qe1 Bg7 Bc3 Nf6 a3 Qb6
pvAI(0.02): g6 c3 Nf6 Re1 Bg7 d4 Qb6 Bxc6 Qxc6 d5 Qa4
6.Be2: NA
pvCurrent(0.17): Be2
pvAI(0.08): Bxc6 Bxc6 Nc3 g6 Qe1 Bg7 d3 Nf6 Bd2 b5 Ne2 e6
6...Nf6: Excellent
pvCurrent(0.19): Nf6 d3 g6 Qe1 Bg7 h3 b5 Be3 O-O c3 a5 Nbd2 a4 a3 b4 Bd1 bxc3 bxc3 Na5
pvAI(0.17): g6 c3 Nf6 d3 Bg7 h3 b5 Qe1 O-O Be3 a5 Nbd2 Rb8 Qh4 a4 a3 e6 d4 cxd4 Nxd4 Nxd4 Bxd4 Bc6
7.e5: Excellent
pvCurrent(-0.37): e5 dxe5 Nxe5 g6 a4 Bg7 Na3 Nd4 Nxd7 Nxd7 c3 Nxe2+ Qxe2 O-O Nc4 b5
pvAI(0.18): d3 g6 h3 Bg7 c3 b5 Be3 O-O Nbd2 a5 a3 a4 Qe1 b4 cxb4 cxb4 Nc4
7...dxe5: Best Move
pvCurrent(-0.34): dxe5 Nxe5 g6 c3 Bg7 Bf3 Qc7 Nxd7 Qxd7 Na3 b5 Nc2 Rd8 a4 b4 Qe2 Qc8
pvAI(-0.36): dxe5
8.fxe5: Excellent
pvCurrent(-0.63): fxe5 Ng4 b4 Qc7 c3 c4 Bxc4 Ncxe5 Nxe5 Nxe5 Bb3 e6 d4 Ng6 Qf3 Bc6 d5 exd5
pvAI(-0.33): Nxe5 g6 d3 Bg7 Bf3 Qc7 Nxd7 Qxd7 Nd2 Rd8 a4 Nd5 Nb3 Nd4 c3 Nxf3+ Qxf3 Qc6 Qe2
8...Nd5: Inaccuracy
pvCurrent(0.09): Nd5 Nc3 Bf5 d4 cxd4 Nxd4 Nxd4 Qxd4 Nxc3 bxc3 e6 Be3 Qc8 Rfb1 Be7 Bf3 Rb8 Qa7 O-O
pvAI(-0.68): Ng4 Na3 g6 c3 Ngxe5 Nxe5 Nxe5 d4 cxd4 cxd4 Nc6 Bc4 f5 Qb3 Bg7 Bg8 Bxd4+ Kh1 e6 Bxe6
9.Bc4: Excellent
pvCurrent(-0.38): Bc4 Bf5 d4 Nb6 Bd3 Bxd3 cxd3 e6 dxc5 Bxc5+ Kh1 Rc8 Nc3 Be7 Be3 Nd5 Bg1
pvAI(0.09): Nc3 Bf5 d4 Nxc3 bxc3 e6 Bd3 Bxd3 Qxd3 Be7 Rb1 cxd4 cxd4 b5 c4 bxc4 Qxc4 Rc8 Qxa6 O-O Qa4 Qd5 Rb7 Ra8 Qb3
9...e6: Excellent
pvCurrent(0.08): e6 Nc3
pvAI(-0.32): Bf5 Nc3 e6 Bxd5 exd5 d4 cxd4 Nxd4 Bc5 Be3 Bg6 Rf2 Qd7 Qd2 O-O Nxc6 Bxe3 Qxe3 bxc6 Na4 Rae8
10.Nc3: Best Move
pvCurrent(0.01): Nc3 Nde7
pvAI(0.06): Nc3 Nde7 Ne4 Ng6 c3 b5 Be2 Be7 d4 cxd4 cxd4 O-O Bd3 Nb4 Bb1 Bc6 Neg5
10...Nxc3: Inaccuracy
pvCurrent(0.75): Nxc3
pvAI(-0.06): Nf4 Ne4 Ng6 c3 Be7 d4 cxd4 cxd4 O-O Be3 Rc8 Nfg5 Ncxe5 Bb3
11.dxc3: Best Move
pvCurrent(0.79): dxc3 Be7 Qe1 h6 Bf4 g5 Bg3 h5 h3 h4 Bh2 g4 hxg4 Qb6 Rd1 h3 gxh3 Rxh3
pvAI(0.79): dxc3 h6
11...b5: Inaccuracy
pvCurrent(1.44): b5 Bd3 h6 Be4 Qc7 Qe2 Rb8 Be3 Ne7 Rad1 Bc6 Nd2 Nf5
pvAI(0.66): h6 Qe2 Qb6 Rb1 Na5 Nd2 Qc7
12.Be2: Excellent
pvCurrent(0.79): Be2 c4 Be3 Qc7 Qe1 Ne7 Qf2 Nd5 Bd4 Be7 Ng5 O-O Ne4 Bc6 Bg4 Kh8 Rae1
pvAI(1.41): Bd3 h6 Be4 Rc8 Qe2 Qc7 Qf2 Nd8 Bf4 c4 Kh1 Bc6
12...Be7: Excellent
pvCurrent(1.49): Be7 Qe1
pvAI(0.85): c4 Be3 Qc7 Qe1 Ne7 Qf2 Nd5 Bd4 Be7 Nd2 O-O Bf3 f5 exf6 Bxf6 Bxf6 Rxf6 Ne4 Rh6 g3 Bc6 Qc5
13.b3: Inaccuracy
pvCurrent(0.59): b3 Qc7 Bf4 c4 Kh1 O-O Qe1 f5 exf6 Qxf4 fxe7 Nxe7 bxc4 bxc4 Nd2 Qc7
pvAI(1.36): Qe1 O-O Qg3 f5 exf6 Bxf6 Be3 Ne7 Bxc5 Rc8 Bxe7 Qxe7 Bd3 g6 Rae1 Bg7
13...Qc7: Excellent
pvCurrent(0.69): Qc7 Bf4
pvAI(0.6): O-O
14.Bf4: Best Move
pvCurrent(0.57): Bf4 O-O
pvAI(0.66): Bf4 O-O Kh1 b4 Qe1 bxc3 Qg3 Kh8 Bg5 h6 Bd3 Bxg5 Nxg5
14...c4: Excellent
pvCurrent(0.68): c4
pvAI(0.62): O-O Bd3 c4 Be4 cxb3 cxb3 Rac8 Rc1 Bd8 Qd3 h6 Qd2 Ne7 Bb1
15.bxc4: Excellent
pvCurrent(0.64): bxc4
pvAI(0.68): Kh1 O-O bxc4 bxc4 Bxc4 Nb8 Bd3 Bb5 Qe1 Nd7 a4 Bxd3 cxd3 Rac8 c4 Nc5 Qd1 Rb8 Be3
15...Bc5+: Excellent
pvCurrent(0.86): Bc5+ Kh1
pvAI(0.67): O-O Kh1
16.Kh1: Best Move
pvCurrent(0.97): Kh1 Ne7
pvAI(1.08): Kh1 Ne7 Ng5 Bc6 Nxf7 O-O Nd6 Rad8 Bd3 Ng6 Qh5
16...bxc4: Excellent
pvCurrent(1.51): bxc4 Bxc4 h6 Nd2 Ne7 Ne4 Ng6 Bg3 O-O Bd3 Nxe5 Nf6+ gxf6 Rxf6 Be7 Rxh6 Qxc3
pvAI(0.97): Ne7 Ng5 Bc6 Nxf7 Qb7 Bf3 Kxf7 Be3 Nf5 Bxc5 Bxf3 Rxf3 Rhc8 Bd4 Kg8 c5 Qc6 Bf2
17.Bxc4: Best Move
pvCurrent(1.39): Bxc4 h6 Nd2 Ne7 Ne4 Nf5 Bd3 Be7 Qg4 h5 Nd6+ Bxd6 Qf3 O-O exd6 Qc5 c4
pvAI(1.51): Bxc4 Ne7 Ng5 h6 Qh5 g6 Qh3 Nf5 Ne4 Kf8
17...O-O: Inaccuracy
pvCurrent(2.31): O-O Ng5 g6 Qe1 Be7 Qh4 Bxg5 Qxg5 Nb4 Bb3 Qxc3 Qf6
pvAI(1.36): h6 Nd2 Ne7 Ne4 Nf5 Qe2 Qa7 Rad1 Bc6 Bd3 Be7 Nd6+ Bxd6 exd6 O-O c4 Rfd8 h3 Rac8
18.Qd3: Mistake
pvCurrent(0.47): Qd3 Ne7 a4 a5 Ng5 Ng6 Bg3 Bc6 h4 Be7 Nxf7 Rxf7 Rxf7 Kxf7
pvAI(2.42): Ng5 g6 Ne4 Be7 Nf6+ Bxf6 exf6 e5 Bg3 Nd8 Bd5 Bc6 c4 Ne6 Bxe6 fxe6 Qe2 Rad8 Rae1 Qa5
18...f6: Blunder
pvCurrent(5.05): f6 exf6 Qxf4 Qxd7 Rxf6 Bxe6+ Kh8 Qxc6 Raf8 Qxc5 Rxe6 Rad1 Rh6 Rde1 Kg8
pvAI(0.53): Ne7 a4 Bc6 Bxa6 Bxf3 Rxf3 Ng6 Bg3 Nxe5 Qe2 Bd6 Rd1 Rfd8
19.exf6: Best Move
pvCurrent(5.21): exf6 Qxf4 Qxd7 gxf6 Bxe6+ Kh8 Qxc6 Qd6 Qxd6 Bxd6 Rad1 Rad8 g3 Rfe8 Rfe1 Ba3 Rxd8 Rxd8 Bf5 a5 g4 Rb8 g5
pvAI(5.19): exf6 Qxf4 Qxd7 gxf6 Bxe6+ Kh8 Qxc6 Qd6 Qxd6 Bxd6 Rad1 Bc5 Rde1 f5 Bd5 Rab8 g3 f4
19...Qxf4: Best Move
pvCurrent(5.17): Qxf4 Qxd7 gxf6 Bxe6+ Kh8 Qxc6 Be3 Rae1 Rad8 Qxa6 f5 Qc4 Qh6
pvAI(5.3): Qxf4 Qxd7 gxf6 Bxe6+ Kh8 Qxc6 Qd6 Qxd6 Bxd6 Rad1 Rad8 g4 Bc7 Rxd8 Rxd8 Re1 Bf4 Bc4 Bd2 Re7
20.fxg7: Blunder
pvCurrent(2.12): fxg7 Rfd8 Rae1 Qh6 Ng5 Bg1 Qd6 Qxg5 Bxe6+ Bxe6 Qxe6+ Kxg7 Qxc6 Bxh2 Kxh2
pvAI(5.29): Qxd7 gxf6 Bxe6+ Kh8 Qxc6 Qd6 Qxd6 Bxd6 Bf5 Rfd8 g3 Rab8
20...Kxg7: Mistake
pvCurrent(3.99): Kxg7 Qxd7+ Kh8 Bd3 Ne7 Nd4 Qe5 Qxe6 Ng6 Qc6 Rac8 Rxf8+ Rxf8
pvAI(2.17): Rfd8 Rae1
21.Qxd7+: Best Move
pvCurrent(4.03): Qxd7+ Kh8 Bd3 Ne7 Qxe6 Rf6 Ng5 Qxf1+ Rxf1 Rxe6 Nxe6 Ba3 g3 Ng6 Ng5 Rb8 Rf7 Ne5 Rxh7+ Kg8
pvAI(4.02): Qxd7+ Kh8 Bd3 Ne7 Qxe6 Rf6 Ng5 Rxe6 Rxf4 Rc6 Rf7 Nd5 Rxh7+ Kg8
21...Ne7: Inaccuracy
pvCurrent(5.44): Ne7 Nd4 Qh4 Nxe6+ Kh8 Rxf8+ Rxf8 Nxf8 Qxc4 Ne6 Ba3 Re1 Qg4 h3 Qc4 Qd8+ Ng8 Qg5 Qxc3 Qe3 Qxe1+ Qxe1 Bb2 Qd2
pvAI(4.17): Kh8 Bd3 Ne7 Qxe6 Rf6 Ng5 Qxf1+ Rxf1 Rxe6 Nxe6 Be3 Rf7 Ng6 g3 Re8 Nc7 Re5 Rd7 Nf8 Rd5
22.Bxe6: Mistake
pvCurrent(3.26): Bxe6 Rad8 Qb7 Rf6 Rae1 Rb8 Qe4 Qxe4 Rxe4 Nf5 Bxf5 Rxf5
pvAI(5.42): Nd4 Qg4 Rxf8 Rxf8 Nxe6+ Kh8 Nxf8 Qxc4 Ne6 Ba3 Re1 Qg4 h3 Qc4 Qd8+ Ng8 Qg5 Qxc3 Qe3 Qxe1+ Qxe1 Nf6 Qh4 Bb2 g3
22...Rad8: Best Move
pvCurrent(3.33): Rad8 Qb7 Qh6 Bh3 Kh8 Rae1 Nd5 Ne5 Bf2 Nf7+ Rxf7 Qxf7 Bxe1 Rxe1 Nxc3 Re8+ Rxe8 Qxe8+ Kg7 Qe7+ Kg6
pvAI(3.21): Rad8 Qb7 Rf6 Qxa6 Nf5 Qb7+ Kh8 Bxf5 Rxf5 Qb5 Be3 Qb4 Qh6
23.Qb7: Best Move
pvCurrent(3.36): Qb7 Qh6 Bh3 Qf6 Rae1 Kh8 Qc7 Rd5 c4 Bd6 Qb6 Re5 Qxa6 Rxe1 Rxe1 Ng6 Rd1
pvAI(3.33): Qb7 Qh6 Rae1 Kh8 Qe4 Rf6 Nd4 Bd6 Bh3 Rdf8 Rxf6 Qxf6 g3 Qh6 Qg4
23...Rf6: Best Move
pvCurrent(3.56): Rf6 Rae1 Qb8 Qxb8 Rxb8 Nd4 Bxd4 cxd4 Rb2 Rxf6 Kxf6 Kg1 Nc6 c3 Rc2 Bd5 Rxc3 Re6+ Kg7 Bxc6
pvAI(3.47): Rf6 Rae1 Rb8 Qd7 Rbf8 Bd5 Qd6 Qxd6 Bxd6 Bc4 Rh6 g3 Nf5 Kg2 Bc5 Nd4 Rhf6 Nxf5+ Rxf5
24.Qb3: Excellent
pvCurrent(2.88): Qb3 Rdf8 Rae1 Kh8 Qc4 Qxc4 Bxc4 Nf5 Ng5 Ne3
pvAI(3.5): Rae1 Rb8 Qd7 Rbf8 g3 Qb8 Bd5 Qd6 Qxd6 Bxd6 Be4 Nf5 Kg2 Bc5 Bxf5 Rxf5 a4 Bb6 Nd4 Rxf1 Rxf1
24...Rh6: Excellent
pvCurrent(3.19): Rh6 Bh3 Rb8 Ng5 Rxb3 Rxf4 Rxc3 Ne6+ Kh8 Rf8+ Ng8 Rc8 Bb4 Rxc3 Bxc3 Rd1 Rh5 Rd7 Ra5 g3 Rxa2 Bf5
pvAI(2.79): Rb8 Qc4 Qxc4 Bxc4 Nf5 Ng5 Ne3 Rxf6 Kxf6 Ne4+ Kg6 Nxc5 Nxc4 Nxa6 Ra8 Nb4 Ra3 g3
25.Bh3: Best Move
pvCurrent(2.96): Bh3 Rf6 c4 Kh8 Rae1 Nc6 g3 Qh6 Bg2 Rdf8 Qd3
pvAI(2.98): Bh3 Rf6 c4 Rdf8 Rae1 Nf5 Bxf5 Rxf5 Qc3+ R8f6
25...Nd5: Mistake
pvCurrent(4.75): Nd5 Nd4 Kh8 Rxf4 Nxf4 Qc4 Rd5 Rf1 Rf6 Re1 Nxh3 gxh3 Rf2 Re8+ Kg7
pvAI(3.03): Rf6 c4 Rdf8 Rad1 Nc6 g3 Qh6 Bg2 Ne7 Nd2 Rxf1+ Nxf1 Rf2
26.Nd4: Best Move
pvCurrent(5.13): Nd4 Qxf1+ Rxf1 Kh8 Nf5 Rf6 Qb7 Ne7 g3 Rd2 Qb8+ Ng8 Qe5
pvAI(4.82): Nd4 Qg5 Nf5+ Kh8 Nxh6 Qxh6 Qc4 Bb6 Rad1 Qd6 Qe4 Bc7 Qd4+ Qe5 g3 Qxd4 Rxd4 Bb6
26...Qd2: Excellent
pvCurrent(5.55): Qd2 Nf5+ Kh8 Nxh6 Qxh6 Rad1 Qd6 c4 Qe5 cxd5 Bd6 Qg3 Qxg3 hxg3 Bxg3 Rd3 Bd6 Rdf3 Re8 Rb3
pvAI(5.3): Bxd4 Rxf4 Nxf4 cxd4 Rf8 Qe3 Rc6 Qe7+ Rf7 Qe5+ Rff6 Rf1
27.Nf5+: Best Move
pvCurrent(5.87): Nf5+ Kh8 Nxh6 Qxh6 Rad1 Qd6 c4 Rb8 Rxd5 Rxb3 Rxd6 Bxd6 cxb3 Bc5 Rd1 Kg7 Rd8
pvAI(5.78): Nf5+ Kh8 Nxh6 Qxh6 Rad1 Qg5 c4 Rf8 Rxf8+ Bxf8 cxd5 Qe5 Qf3 Bd6 g3 Qb2 c3
27...Kg6: Excellent
pvCurrent(6.5): Kg6 Qb7 Bf8 Rad1 Qxd1 Rxd1 Rxh3 gxh3 Bc5 Nh4+ Kh6 Qf7 Bb6 Qe6+ Kg7 Nf5+ Kf8 Rxd5
pvAI(5.99): Kh8 Nxh6 Qxh6 Rad1 Bd6 Qxd5 Bc7 Qf7 Bd6 Rxd6 Qxd6
28.Nxh6: Inaccuracy
pvCurrent(5.34): Nxh6 Kxh6 Qc4 Be7 Rad1 Qg5 Rf5 Nb6 Qf1 Qh4 Rxd8 Bxd8 Qd3 Nc4
pvAI(6.54): Qb7 Bf8 Rad1 Qe2 Nxh6 Kxh6 Rde1 Qxf1+ Rxf1 Be7 g4 Kg7 c4 Rf8 cxd5
28...Kxh6: Best Move
pvCurrent(5.64): Kxh6 Qc4 Be7 Rad1 Qg5 Rf5 Nb6 Qe2 Rxd1+ Qxd1 Qg6 Qd4 Qd6 Qxd6+ Bxd6 Rf6+ Kg5 Rxd6 Nc4 Rd5+ Kf4 Rf5+ Ke3
pvAI(5.43): Kxh6 Qc4 Be7 Rad1 Qg5 Rf5 Nb6 Qe6+ Qg6 Re1 Bg5 Rf7 Rd6 Bf5 Rxe6 Rxe6 Nc4 Bxg6 hxg6 Rd7 Nd2
29.Rad1: Inaccuracy
pvCurrent(4.62): Rad1 Qg5 Rf5 Nf4 Rf1 Nxh3 gxh3 Rd1 Qe6+ Qg6 Qxg6+ hxg6 Rxd1 gxf5 Rd5 Ba3 Rxf5 Kg6 Rd5 Bb2 Kg2
pvAI(5.64): Qc4 Be7 Rad1 Qg5 Rf5 Nb6 Qe2 Rxd1+ Qxd1 Qg6 Qd4 Qd6 Qxd6+ Bxd6 Rf6+ Kg7 Rxd6 Nc4 Re6 Kg8 Re1 Nd6 g3 Kh8
29...Qe3: Inaccuracy
pvCurrent(6.17): Qe3 Qc4 Qe7 Rxd5 Rxd5 Qxd5 Bd6 c4 Kg7 g3 Kh8 Be6
pvAI(4.77): Qg5 Rf5 Ne7 Qe6+ Ng6 Rdf1 Qe3 Qxa6 Rd2 Qc4 Be7 R5f3 Qe5
30.Rxd5: Best Move
pvCurrent(6.33): Rxd5 Rxd5 Qxd5 Qe7 g3 Ba3 Qd2+ Kg7 Qd4+ Kg6 Bf5+ Kh6
pvAI(6.25): Rxd5 Rf8 Rdd1 Rxf1+ Rxf1 Qe7 Qg8 a5 Qg4 a4 g3 Qe5 Bg2 Qg5 Qh3+ Qh5
30...Re8: Blunder
pvCurrent(#4): Re8 Rh5+ Kxh5 Qf7+ Kh6 Qf6+ Kh5 g4#
pvAI(6.45): Rf8 Rdd1 Rxf1+ Rxf1 Qe7 g3 Bd6 Qd5 Bc7 Qd3 Bd6 Bg2 Qe5
31.Rdd1: Miss Move(Mate)
pvCurrent(6.74): Rdd1 Qg5 Qc4 Rf8 Rxf8 Bxf8 Qf7 Qe7 Qf3 Kg7 Rf1 Kh8 c4 Bh6 c5 Qe5 Qa8+ Kg7 Qf8+ Kg6
pvAI(#4): Rh5+ Kxh5 Qf7+ Kh6 Qf6+ Kh5 g4#
31...Qe2: Blunder
pvCurrent(#11): Qe2 Qf7 Rg8 Qxg8 Qe5 Rd7 Be7 Qf7 Qg7 Qe6+ Qg6 Qxe7 Qe4 Qf6+ Qg6 Qf8+ Kh5 Rf5+ Qg5
pvAI(6.67): Qe5 Qc4 Bd6 g3 Bc5 Bg2 Qg5 Rf7 Re7 Rxe7 Bxe7
32.Rf6+: Miss Move(Mate)
pvCurrent(7.41): Rf6+ Kg5 Rff1 Rf8 Rfe1 Qf2 Qd5+ Kg6 Re6+ Kg7 Qg5+ Kh8 Qe5+ Kg8 Re8 Rxe8 Qxe8+ Qf8 Qe6+ Qf7 Qe5 h6 Qxc5 Qe8 Qd4 Kh7 Bf5+ Kg8
pvAI(#11): Qf7 Rg8 Qxg8 Qe5 Rd7 Be7 Qf7 Qg7 Qe6+ Qg6 Qxe7 Qe4 Qf6+ Qg6 Qf8+ Kh5 Rf5+ Qg5 Rxh7+ Kg6
32...Kg5: Best Move
pvCurrent(#18): Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3 h6 Kg2
pvAI(#26): Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Qd6 Rxd6 Bxd6 Qf7 Be5 Qf5+ Kh6 Qe6+ Kg7 Qxe5+ Kf7 Qe6+ Kg7 Qe7+ Kg6 Qd6+ Kg7
33.Rf5+: Good(You could checkmate faster)
pvCurrent(#20): Rf5+ Kh6 Rf6+ Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3
pvAI(#18): Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3
33...Kh6: Best Move
pvCurrent(#19): Kh6 Rf6+ Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3
pvAI(#19): Kh6 Rf6+ Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3
34.Rf6+: Best Move
pvCurrent(#19): Rf6+ Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3
pvAI(#19): Rf6+ Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6
34...Kg5: Best Move
pvCurrent(#18): Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3 h6
pvAI(#18): Kg5 Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3 h6
35.Rf5+: Miss Move(Mate)
pvCurrent(6.97): Rf5+ Kh6 Rdf1 Bf2 g4 Qe6 R1xf2 Qxb3 cxb3 Re3 R5f3 Re1+ Kg2 Rb1 Rc2 Kg5 b4 Kg6
pvAI(#18): Rd5+ Re5 Rxe5+ Qxe5 Re6 Bd6 Rxe5+ Bxe5 Qg8+ Kh5 Qe8+ Kh6 Qxe5 Kg6 Qe6+ Kg7 Qe7+ Kg6 g3 h6
35...Kh6: Best Move
pvCurrent(7.04): Kh6 Rdf1 Bf2 g4 Qe6 R1xf2 Qxb3 cxb3 Kg7 Kg2 h6 Rc2 Re1 Rf3 Ra1 g5 hxg5 Bc8
pvAI(6.96): Kh6 Rdf1 Bf2 g4 Qe6 R1xf2 Qxb3 cxb3 Re3 R5f3 Re5 Kg2 Kg6 Kg3 Rd5 b4 h5 gxh5+ Kxh5 Bf1
36.Rdf1: Best Move
pvCurrent(7.11): Rdf1 Bf2 g4 Qe6 R1xf2 Qxb3 cxb3 a5 Kg2 Rc8 Rf6+ Kg7 R6f3 Rc5 Rc2 Rg5 Re2
pvAI(7.1): Rdf1 Bf2 g4 Qe6 R1xf2 Qxb3 cxb3 Re3 R5f3 Re1+ Kg2 a5 Rf6+ Kg7 g5 Re4 Bf5 Re5 h4 h5 Rc2 Re3 b4 axb4 cxb4
36...Qe1: Blunder
pvCurrent(#4): Qe1 Rh5+ Kxh5 Qf7+ Kh6 Qf6+ Kh5 g4#
pvAI(7.11): Bf2 g4 Qe6 R1xf2 Qxb3 cxb3 Rc8 R5f3 Rc5 Kg2 Kg7 Re2 Kg6 b4 Rg5 Re6+ Kg7 Rxa6 Re5 Kf2
37.Qf7: Good(You could checkmate faster)
pvCurrent(#6): Qf7 Qxf1+ Rxf1 Rg8 Qxg8 Bf2 Rxf2 a5 Rf6+ Kh5 Qg4#
pvAI(#4): Rh5+ Kxh5 Qf7+ Kh6 Qf6+ Kh5 g4#
37...Rf8: Good(You could delaying checkmate longer)
pvCurrent(#1): Rf8 Rh5#
pvAI(#5): Qxf1+ Rxf1 Rg8 Qxg8 Bf2 Rxf2 a5 Rf6+ Kh5 Qg4#
38.Qh5+: Good(You could checkmate faster)
pvCurrent(#7): Qh5+ Kg7 Qg5+ Kh8 Rxf8+ Bxf8 Qf6+ Bg7 Qd8+ Qe8 Qxe8+ Bf8 Qxf8#
pvAI(#1): Rh5#
38...Kg7: Best Move
pvCurrent(#5): Kg7 Qg5+ Kh8 Rxe1 Rxf5 Re8+ Rf8 Qe5+ Kg8 Be6#
pvAI(#6): Kg7 Qg5+ Kh8 Rxf8+ Bxf8 Qf6+ Bg7 Qd8+ Qe8 Qxe8+ Bf8 Qxf8#
39.Rg5+: Good(You could checkmate faster)
pvCurrent(#7): Rg5+ Kh8 Rxe1 Be7 Bf5 Rxf5 Rxf5 Bf6 Rxf6 Kg7 Qg5+ Kh8 Re8#
pvAI(#5): Qg5+ Kh8 Rxe1 Rxf5 Re8+ Rf8 Qe5+ Kg8 Be6#
39...Kh8: Best Move
pvCurrent(#6): Kh8 Rxe1 Be7 Bf5 Rxf5 Rxf5 Bf6 Rxf6 Kg7 Qg5+ Kh8 Re8#
pvAI(#6): Kh8 Rxe1 Be7 Bf5 Rxf5 Rxf5 Bf6 Rxf6 Kg7 Qg5+ Kh8 Re8#
40.Rxe1: Best Move
pvCurrent(#6): Rxe1 Be7 Bf5 Rxf5 Rxf5 Bf6 Rxf6 Kg7 Qg5+ Kh8 Re8#
pvAI(#6): Rxe1 Be7 Bf5 Rxf5 Rxf5 Bf6 Rxf6 Kg7 Qg5+ Kh8 Re8#
40...Be7: Best Move
pvCurrent(#5): Be7 Bf5 Rxf5 Rxf5 Bf6 Rxf6 Kg7 Qg5+ Kh8 Re8#
pvAI(#5): Be7 Bf5 Rxf5 Rxf5 Bf6 Rxf6 Kg7 Qg5+ Kh8 Re8#
41.Rge5: Good(You could checkmate faster)
pvCurrent(#7): Rge5 Bd8 Re8 Rxe8 Rxe8+ Kg7 Qe5+ Kg6 Rg8+ Kh6 Qg7+ Kh5 Qxh7#
pvAI(#4): Rg7 Kxg7 Rxe7+ Kf6 Rxh7 a5 Qf5#
41...Bf6: Best Alternative Move
pvCurrent(#6): Bf6 Re8 Rxe8 Rxe8+ Kg7 Qg4+ Bg5 Qxg5+ Kf7 Re7+ Kf8 Qg7#
pvAI(#6): Bd8 Re8 Rxe8 Rxe8+ Kg7 Qe5+ Kg6 Rg8+ Kh6 Qg7+ Kh5 Qxh7#
42.Re8: Good(You could checkmate faster)
pvCurrent(#6): Re8 Rxe8 Rxe8+ Kg7 Qg4+ Bg5 Qxg5+ Kf7 Re7+ Kf8 Qg7#
pvAI(#3): Bf5 h6 Qxh6+ Kg8 Qh7#
42...Rxe8: Best Move
pvCurrent(#5): Rxe8 Rxe8+ Kg7 Qg4+ Bg5 Qxg5+ Kf7 Re7+ Kf8 Qg7#
pvAI(#5): Rxe8 Rxe8+ Kg7 Qg4+ Bg5 Qxg5+ Kf7 Re7+ Kf8 Qg7#
43.Qxe8+: Good(You could checkmate faster)
pvCurrent(#6): Qxe8+ Kg7 Qd7+ Kh6 Qf7 Kg5 Re6 Be5 Rxe5+ Kh6 Rh5#
pvAI(#5): Rxe8+ Kg7 Qg4+ Bg5 Qxg5+ Kf7 Re7+ Kf8 Qg7#
43...Kg7: Best Move
pvCurrent(#5): Kg7 Qd7+ Kh6 Qf7 Kg5 Re6 Be5 Rxe5+ Kh6 Rh5#
pvAI(#5): Kg7 Qd7+ Kh6 Qf7 Kg5 Re6 Be5 Rxe5+ Kh6 Rh5#
44.Qd7+: Best Move
pvCurrent(#5): Qd7+ Kh6 Qf7 Kg5 Re6 Be5 Rxe5+ Kh6 Rh5#
pvAI(#5): Qd7+ Kh6 Qf7 Kg5 Re6 Be5 Rxe5+ Kh6 Rh5#
44...Kg6: Best Alternative Move
pvCurrent(#4): Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
pvAI(#4): Kh6 Qf7 Kg5 Re6 Be5 Rxe5+ Kh6 Rh5#
45.Qf5+: Good(You could checkmate faster)
pvCurrent(#6): Qf5+ Kg7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
pvAI(#4): Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
45...Kg7: Best Move
pvCurrent(#5): Kg7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
pvAI(#5): Kg7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
46.Qg4+: Good(You could checkmate faster)
pvCurrent(#6): Qg4+ Kf7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
pvAI(#5): Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
46...Kf7: Best Move
pvCurrent(#5): Kf7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
pvAI(#5): Kf7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
47.Qf3: Good(You could checkmate faster)
pvCurrent(#8): Qf3 a5 Qf5 Kg7 Qd7+ Kh6 Bf5 Bg7 Re6+ Bf6 Qxh7+ Kg5 Qg6+ Kf4 Re4#
pvAI(#5): Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
47...Kg7: Good(You could delaying checkmate longer)
pvCurrent(#6): Kg7 Qg4+ Kf7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
pvAI(#7): a5 Qf5 Kg7 Qd7+ Kh6 Bf5 Bg7 Re6+ Bf6 Qxh7+ Kg5 Qg6+ Kf4 Re4#
48.c4: Good(You could checkmate faster)
pvCurrent(#7): c4 h5 Qxh5 a5 Re8 a4 Qh8+ Kg6 Rg8+ Bg7 Qxg7+ Kh5 Qh7#
pvAI(#6): Qg4+ Kf7 Qd7+ Kg6 Bf5+ Kg5 Qxh7 a5 Qg6+ Kf4 Re4#
There is many engines (like Wasp, Rebel, etc) which support UCI protocol without such nice feature. Of course I know that main focus of authors is not for analyzing but playing strength/style. However it is still a really missing point.
Wish that searchmoves sub-command will be implemented in Leorik.
Regards,
Cong
It's sad that it's not possible to compile the newest version on Android and Linux devices.
Is there a way to set the strength of the engine so that it plays at a weaker ELO?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.