home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Jeux / Reflexion / Crafty-15.19.lha / crafty-15.19 / src / nextr.c < prev    next >
C/C++ Source or Header  |  1998-09-13  |  3KB  |  90 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "chess.h"
  4. #include "data.h"
  5.  
  6. /* last modified 03/11/97 */
  7. /*
  8. ********************************************************************************
  9. *                                                                              *
  10. *   NextRootMove() is used to select the next move from the root move list.    *
  11. *                                                                              *
  12. ********************************************************************************
  13. */
  14. int NextRootMove(TREE *tree, int wtm)
  15. {
  16.   register int done, *movep;
  17.   char remaining_moves[10];
  18. /*
  19.  ----------------------------------------------------------
  20. |                                                          |
  21. |   for the moves at the root of the tree, the list has    |
  22. |   already been generated and sorted.  on entry, test     |
  23. |   the searched_this_root_move[] array and then take the  |
  24. |   moves in the order they appear in the move list.       |
  25. |                                                          |
  26.  ----------------------------------------------------------
  27. */
  28.   time_abort+=TimeCheck(1);
  29.   if (time_abort) {
  30.     abort_search=1;
  31.     return(NONE);
  32.   }
  33.   done=0;
  34.   if (!annotate_mode && !pondering && !booking &&
  35.       tree->last[1]-tree->last[0]==1 && iteration_depth>4) {
  36.     abort_search=1;
  37.     return(NONE);
  38.   }
  39.   for (movep=tree->last[0];movep<tree->last[1];movep++)
  40.     if (tree->searched_this_root_move[movep-tree->last[0]]) done++;
  41.   if ((done==1) && tree->searched_this_root_move[0] &&
  42.       (root_value==root_alpha) && !search_failed_high) return(NONE);
  43.  
  44.   for (movep=tree->last[0];movep<tree->last[1];movep++)
  45.     if (!tree->searched_this_root_move[movep-tree->last[0]]) {
  46.       if (search_move) {
  47.         if (search_move > 0) {
  48.           if(*movep != search_move) {
  49.             tree->searched_this_root_move[movep-tree->last[0]]=1;
  50.             continue;
  51.           }
  52.         }
  53.         else {
  54.           if(*movep == -search_move) {
  55.             tree->searched_this_root_move[movep-tree->last[0]]=1;
  56.             continue;
  57.           }
  58.         }
  59.       }
  60.       tree->current_move[1]=*movep;
  61.       root_move=movep-tree->last[0];
  62.       tree->searched_this_root_move[root_move]=1;
  63.       if ((tree->nodes_searched > noise_level) && (display_options&32)) {
  64. #if defined(SMP)
  65.         Lock(lock_io);
  66. #endif
  67.         sprintf(remaining_moves,"%d/%d",movep-tree->last[0]+1,tree->last[1]-tree->last[0]);
  68.         end_time=ReadClock(time_type);
  69.         printf("               %2i   %s%7s   ",iteration_depth,
  70.                DisplayTime(end_time-start_time),remaining_moves);
  71.         if (display_options&32 && display_options&64)
  72.           printf("%d. ",move_number);
  73.         if ((display_options&32) && (display_options&64) && !wtm)
  74.           printf("... ");
  75. #if defined(MACOS)
  76.         printf("%s      \n",OutputMove(tree,tree->current_move[1],1,wtm));
  77. #else
  78.         printf("%s      \r",OutputMove(tree,tree->current_move[1],1,wtm));
  79. #endif
  80.         fflush(stdout);
  81. #if defined(SMP)
  82.         UnLock(lock_io);
  83. #endif
  84.       }
  85.       return(ROOT_MOVES);
  86.     }
  87.   return(NONE);
  88. }
  89.  
  90.