Rev 108 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 108 | Rev 154 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #include "chess.h" |
1 | #include "chess.h" |
2 | #include "data.h" |
2 | #include "data.h" |
3 | /* last modified |
3 | /* last modified 08/03/16 */ |
4 | /* |
4 | /* |
5 | ******************************************************************************* |
5 | ******************************************************************************* |
6 | * * |
6 | * * |
7 | * Ponder() is the driver for "pondering" (thinking on the opponent's time.) * |
7 | * Ponder() is the driver for "pondering" (thinking on the opponent's time.) * |
8 | * its operation is simple: Find a predicted move by (a) taking the second * |
8 | * its operation is simple: Find a predicted move by (a) taking the second * |
Line 22... | Line 22... | ||
22 | */ |
22 | */ |
23 | int Ponder(int wtm) { |
23 | int Ponder(int wtm) { |
24 | TREE *const tree = block[0]; |
24 | TREE *const tree = block[0]; |
25 | int dalpha = -999999, dbeta = 999999, i; |
25 | int dalpha = -999999, dbeta = 999999, i; |
26 | unsigned *n_ponder_moves, *mv; |
26 | unsigned *n_ponder_moves, *mv; |
27 | int save_move_number, tlom, value; |
27 | int save_move_number, tlom, value, illegal = 0; |
28 | 28 | ||
29 | /* |
29 | /* |
30 | ************************************************************ |
30 | ************************************************************ |
31 | * * |
31 | * * |
32 | * First, let's check to see if pondering is allowed, or * |
32 | * First, let's check to see if pondering is allowed, or * |
Line 93... | Line 93... | ||
93 | if (!ponder_move) { |
93 | if (!ponder_move) { |
94 | TimeSet(puzzle); |
94 | TimeSet(puzzle); |
95 | if (time_limit < 20) |
95 | if (time_limit < 20) |
96 | return 0; |
96 | return 0; |
97 | puzzling = 1; |
97 | puzzling = 1; |
98 | tree->status[1] = tree->status[0]; |
- | |
99 | Print(32, " puzzling over a move to ponder.\n"); |
98 | Print(32, " puzzling over a move to ponder.\n"); |
100 | last_pv.pathl = 0; |
99 | last_pv.pathl = 0; |
101 | last_pv.pathd = 0; |
100 | last_pv.pathd = 0; |
102 | for (i = 0; i < MAXPLY; i++) { |
101 | for (i = 0; i < MAXPLY; i++) { |
103 | tree->killers[i].move1 = 0; |
102 | tree->killers[i].move1 = 0; |
Line 153... | Line 152... | ||
153 | n_ponder_moves = GenerateCaptures(tree, 0, wtm, ponder_moves); |
152 | n_ponder_moves = GenerateCaptures(tree, 0, wtm, ponder_moves); |
154 | num_ponder_moves = |
153 | num_ponder_moves = |
155 | GenerateNoncaptures(tree, 0, wtm, n_ponder_moves) - ponder_moves; |
154 | GenerateNoncaptures(tree, 0, wtm, n_ponder_moves) - ponder_moves; |
156 | for (mv = ponder_moves; mv < ponder_moves + num_ponder_moves; mv++) { |
155 | for (mv = ponder_moves; mv < ponder_moves + num_ponder_moves; mv++) { |
157 | MakeMove(tree, 0, wtm, *mv); |
156 | MakeMove(tree, 0, wtm, *mv); |
158 |
|
157 | illegal = Check(wtm); |
159 |
|
158 | UnmakeMove(tree, 0, wtm, *mv); |
- | 159 | if (illegal) |
|
160 | *mv = 0; |
160 | *mv = 0; |
161 | } else |
- | |
162 | UnmakeMove(tree, 0, wtm, *mv); |
- | |
163 | } |
161 | } |
164 | /* |
162 | /* |
165 | ************************************************************ |
163 | ************************************************************ |
166 | * * |
164 | * * |
167 | * Now, perform an iterated search, but with the special * |
165 | * Now, perform an iterated search, but with the special * |