-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEngineInterface.java
More file actions
executable file
·128 lines (96 loc) · 2.63 KB
/
EngineInterface.java
File metadata and controls
executable file
·128 lines (96 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.io.*;
import java.util.*;
public class EngineInterface{
public static BufferedReader in;
public static BufferedWriter out;
public BoardPanel boardPanel;
public Log outputLog;
public EngineInterface(){}
public void pipe(String msg)
{
try
{
outputLog.addText(msg);
out.write(msg +"\n");
out.flush();
}
catch(IOException e)
{
}
catch(NullPointerException e)
{
//there's no engine connected!
}
}
public static void print(String msg)
{
System.out.println(msg);
}
public static void handleIDandOptions()
{
String response;
try
{
while(!(response = in.readLine()).equals("uciok"))
{
Log.addText(response);
}
}
catch (IOException e){}
}
public void loadEngine(String enginePath)
{
try
{
Process p = new ProcessBuilder(enginePath).start();
in = new BufferedReader( new InputStreamReader(p.getInputStream()) );
out = new BufferedWriter( new OutputStreamWriter(p.getOutputStream()));
pipe("uci");
handleIDandOptions();
pipe("isready");
print(in.readLine());
}
catch (IOException e)
{
System.out.println("Error loading engine.");
System.out.println(e);
}
}
public void getEngineMove()
{
if(out == null || in == null) return;
pipe("position fen " + boardPanel.board.toString());
pipe("go depth " + SettingsMenu.settings.getInt("depth", 1));
String response;
try
{
do{
response = in.readLine();
Log.addText(response);
}while(!response.split(" ")[0].equals("bestmove"));
response = response.split(" ")[1];
SquarePanel a = boardPanel.squares[Character.getNumericValue(response.charAt(1)) - 1][response.charAt(0) - 'a'];
boardPanel.setActiveSquare(a);
SquarePanel b = boardPanel.squares[Character.getNumericValue(response.charAt(3)) - 1][response.charAt(2) - 'a'];
try
{
boardPanel.movePiece(a,b);
}
catch (Exception e)
{
Log.addText("engine fucked up");
}
}
catch(IOException e)
{
}
}
public void attatchBoard(BoardPanel board)
{
this.boardPanel = board;
}
public void attatchLog(Log log)
{
this.outputLog = log;
}
}