Subversion Repositories Games.Chess Giants

Rev

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 02/23/14 */
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
    if (Check(wtm)) {
157
    illegal = Check(wtm);
159
      UnmakeMove(tree, 0, wtm, *mv);
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   *