Skip to content

Commit 90c3345

Browse files
committed
Feat: Small UCI changes.
1 parent d7ff226 commit 90c3345

5 files changed

Lines changed: 81 additions & 39 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/* Made by Jan Frase :) */
22
package de.janfrase.blunder;
33

4-
import de.janfrase.blunder.uci.UciParser;
4+
import de.janfrase.blunder.uci.UciMessageHandler;
55

66
public class Main {
77
public static void main(String[] args) {
8-
UciParser.getInstance().startParsing();
8+
UciMessageHandler.getInstance().startParsing();
99
}
1010
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/* Made by Jan Frase :) */
2+
package de.janfrase.blunder.engine.search;
3+
4+
import de.janfrase.blunder.engine.search.algos.NegaMax;
5+
import org.apache.logging.log4j.LogManager;
6+
import org.apache.logging.log4j.Logger;
7+
8+
public class SearchManager {
9+
10+
// logging
11+
private static final Logger LOGGER = LogManager.getLogger();
12+
13+
// singleton pattern
14+
private static final SearchManager INSTANCE = new SearchManager();
15+
16+
private SearchManager() {}
17+
18+
public static SearchManager getInstance() {
19+
return INSTANCE;
20+
}
21+
22+
public void go() {
23+
NegaMax.startSearching(4);
24+
}
25+
}

src/main/java/de/janfrase/blunder/engine/search/NegaMax.java renamed to src/main/java/de/janfrase/blunder/engine/search/algos/NegaMax.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* Made by Jan Frase :) */
2-
package de.janfrase.blunder.engine.search;
2+
package de.janfrase.blunder.engine.search.algos;
33

44
import de.janfrase.blunder.engine.backend.movegen.MoveGenerator;
55
import de.janfrase.blunder.engine.backend.movegen.move.Move;
@@ -12,7 +12,7 @@
1212
*/
1313
public class NegaMax {
1414

15-
public static Move search(int depth) {
15+
public static Move startSearching(int depth) {
1616
List<Move> moves = MoveGenerator.generateLegalMoves();
1717

1818
Move bestMove = null;

src/main/java/de/janfrase/blunder/uci/UciParser.java renamed to src/main/java/de/janfrase/blunder/uci/UciMessageHandler.java

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,56 @@
11
/* Made by Jan Frase :) */
22
package de.janfrase.blunder.uci;
33

4+
import de.janfrase.blunder.engine.backend.movegen.MoveGenerator;
45
import de.janfrase.blunder.engine.backend.movegen.move.Move;
56
import de.janfrase.blunder.engine.backend.state.game.FenParser;
67
import de.janfrase.blunder.engine.backend.state.game.GameState;
7-
import de.janfrase.blunder.engine.search.NegaMax;
8+
import de.janfrase.blunder.engine.search.algos.NegaMax;
89
import java.util.Arrays;
910
import java.util.Scanner;
1011
import org.apache.logging.log4j.LogManager;
1112
import org.apache.logging.log4j.Logger;
1213

13-
public class UciParser {
14+
public class UciMessageHandler {
1415

1516
// singleton pattern
16-
private static final UciParser INSTANCE = new UciParser();
17+
private static final UciMessageHandler INSTANCE = new UciMessageHandler();
1718

1819
// logging
1920
private static final Logger LOGGER = LogManager.getLogger();
2021
private static final String IN = "In: ";
2122
private static final String OUT = "Out: ";
2223

23-
// incoming commands
24-
private static final String UCI = "uci";
25-
private static final String QUIT = "quit";
26-
private static final String UCI_NEW_GAME = "ucinewgame";
27-
private static final String POSITION = "position";
28-
private static final String GO = "go";
29-
private static final String STOP = "stop";
30-
private static final String IS_READY = "isready";
24+
private static class IncomingMessage {
25+
// incoming commands
26+
private static final String UCI = "uci";
27+
private static final String DEBUG = "debug";
28+
private static final String IS_READY = "isready";
29+
private static final String SET_OPTION = "setoption";
30+
private static final String REGISTER = "register";
31+
private static final String UCI_NEW_GAME = "ucinewgame";
32+
private static final String POSITION = "position";
33+
private static final String GO = "go";
34+
private static final String STOP = "stop";
35+
private static final String PONDERHIT = "ponderhit";
36+
private static final String QUIT = "quit";
37+
}
3138

32-
// outgoing messages
33-
private static final String ID = "id Blunder";
34-
private static final String UCI_OK = "uciok";
35-
private static final String READY_OK = "readyok";
36-
private static final String BEST_MOVE = "bestmove";
39+
private static class OutgoingMessage {
40+
// outgoing messages
41+
private static final String ID = "id Blunder";
42+
private static final String UCI_OK = "uciok";
43+
private static final String READY_OK = "readyok";
44+
private static final String BEST_MOVE = "bestmove";
45+
private static final String COPYPROTECTION = "copyprotection";
46+
private static final String REGISTRATION = "registration";
47+
private static final String INFO = "info";
48+
private static final String OPTION = "option";
49+
}
3750

38-
private UciParser() {}
51+
private UciMessageHandler() {}
3952

40-
public static UciParser getInstance() {
53+
public static UciMessageHandler getInstance() {
4154
return INSTANCE;
4255
}
4356

@@ -52,7 +65,7 @@ private void parse() {
5265
boolean quit = false;
5366

5467
while (!quit) {
55-
// blocks until next line is found!
68+
// blocks until next line is found
5669
while (!scanner.hasNextLine()) {}
5770
String input = scanner.nextLine();
5871

@@ -64,19 +77,19 @@ private void parse() {
6477
String[] arguments = Arrays.copyOfRange(tokens, 1, tokens.length);
6578

6679
switch (commandName) {
67-
case UCI -> uci();
68-
case QUIT -> quit = true;
69-
case UCI_NEW_GAME -> uciNewGame();
70-
case POSITION -> position(arguments);
71-
case GO -> go(arguments);
72-
case STOP -> stop();
73-
case IS_READY -> isReady();
80+
case IncomingMessage.UCI -> uci();
81+
case IncomingMessage.QUIT -> quit = true;
82+
case IncomingMessage.UCI_NEW_GAME -> uciNewGame();
83+
case IncomingMessage.POSITION -> position(arguments);
84+
case IncomingMessage.GO -> go(arguments);
85+
case IncomingMessage.STOP -> stop();
86+
case IncomingMessage.IS_READY -> isReady();
7487
}
7588
}
7689
}
7790

7891
private void isReady() {
79-
sendReply(READY_OK);
92+
sendReply(OutgoingMessage.READY_OK);
8093
}
8194

8295
private void sendReply(String message) {
@@ -85,13 +98,13 @@ private void sendReply(String message) {
8598
}
8699

87100
private void uci() {
88-
sendReply(ID);
89-
sendReply(UCI_OK);
101+
sendReply(OutgoingMessage.ID);
102+
sendReply(OutgoingMessage.UCI_OK);
90103
}
91104

92105
private void uciNewGame() {
93106
GameState.resetGameState();
94-
sendReply(READY_OK);
107+
sendReply(OutgoingMessage.READY_OK);
95108
}
96109

97110
private void position(String[] arguments) {
@@ -140,11 +153,14 @@ private void go(String[] arguments) {
140153
}
141154
}
142155
}
156+
157+
// TODO: This needs to run on a separate thread!
158+
Move move = NegaMax.startSearching(6);
159+
sendReply(OutgoingMessage.BEST_MOVE + " " + move.toString());
143160
}
144161

145162
private void stop() {
146-
Move move = NegaMax.search(4);
147-
148-
sendReply(BEST_MOVE + " " + move.toString());
163+
Move move = MoveGenerator.generateLegalMoves().getFirst();
164+
sendReply(OutgoingMessage.BEST_MOVE + " " + move.toString());
149165
}
150166
}

‎src/test/java/de/janfrase/blunder/engine/search/NegaMaxTest.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import de.janfrase.blunder.engine.backend.movegen.move.Move;
77
import de.janfrase.blunder.engine.backend.state.game.FenParser;
8+
import de.janfrase.blunder.engine.search.algos.NegaMax;
89
import org.junit.jupiter.api.Test;
910

1011
class NegaMaxTest {
@@ -13,7 +14,7 @@ class NegaMaxTest {
1314
void testSimpleCase() {
1415
FenParser.loadFenString("qR6/8/8/8/8/8/8/k6K w - - 0 1");
1516

16-
Move move = NegaMax.search(4);
17+
Move move = NegaMax.startSearching(4);
1718
String moveString = move.toString();
1819

1920
assertEquals("b8a8", moveString);
@@ -23,7 +24,7 @@ void testSimpleCase() {
2324
void testSimpleCase2() {
2425
FenParser.loadFenString("qR6/k7/8/8/8/8/8/7K w - - 0 1");
2526

26-
Move move = NegaMax.search(4);
27+
Move move = NegaMax.startSearching(4);
2728
String moveString = move.toString();
2829

2930
assertEquals("b8a8", moveString);

0 commit comments

Comments
 (0)