home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / Apps / Games / NeXTGo / Source / suicide.c < prev   
Encoding:
C/C++ Source or Header  |  1977-12-27  |  2.9 KB  |  101 lines

  1. /*
  2.                 GNU GO - the game of Go (Wei-Chi)
  3.                 Version 1.1   last revised 3-1-89
  4.            Copyright (C) Free Software Foundation, Inc.
  5.                       written by Man L. Li
  6.                       modified by Wayne Iba
  7.                     documented by Bob Webber
  8.                     NeXT version by John Neil
  9. */
  10. /*
  11. This program is free software; you can redistribute it and/or modify
  12. it under the terms of the GNU General Public License as published by
  13. the Free Software Foundation - version 1.
  14.  
  15. This program is distributed in the hope that it will be useful,
  16. but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. GNU General Public License in file COPYING for more details.
  19.  
  20. You should have received a copy of the GNU General Public License
  21. along with this program; if not, write to the Free Software
  22. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24. Please report any bug/fix, modification, suggestion to
  25.  
  26. mail address:   Man L. Li
  27.                 Dept. of Computer Science
  28.                 University of Houston
  29.                 4800 Calhoun Road
  30.                 Houston, TX 77004
  31.  
  32. e-mail address: manli@cs.uh.edu         (Internet)
  33.                 coscgbn@uhvax1.bitnet   (BITNET)
  34.                 70070,404               (CompuServe)
  35.  
  36. For the NeXT version, please report any bug/fix, modification, suggestion to
  37.  
  38. mail address:   John Neil
  39.                 Mathematics Department
  40.                 Portland State University
  41.                 PO Box 751
  42.                 Portland, OR  97207
  43.  
  44. e-mail address: neil@math.mth.pdx.edu  (Internet)
  45.                 neil@psuorvm.bitnet    (BITNET)
  46. */
  47.  
  48. #define EMPTY 0
  49. #define BLACKSTONE 2
  50.  
  51. extern unsigned char p[19][19], l[19][19];
  52. extern int currentStone, opposingStone, MAXX, MAXY;
  53. extern int lib;
  54. extern int blackCapturedKoI, blackCapturedKoJ, whiteCapturedKoI, whiteCapturedKoJ;  /* piece captured */
  55.  
  56. int suicide(int i, int j)
  57. /* check for suicide move of opponent at p[i][j] */
  58. {
  59.  int m, n, k, uik, ujk;
  60.  
  61. /* check liberty of new move */
  62.  lib = 0;
  63.  countlib(i, j, currentStone);
  64.  if (lib == 0)
  65. /* new move is suicide then check if kill my pieces and Ko possibility */
  66.    {
  67. /* assume alive */
  68.     p[i][j] = currentStone;
  69.  
  70. /* check opponent pieces */
  71.     eval(opposingStone);
  72.     k = 0;
  73.  
  74.     for (m = 0; m < MAXX; m++)
  75.       for (n = 0; n < MAXY; n++)
  76. /* count pieces that will be killed */
  77.     if ((p[m][n] == opposingStone) && !l[m][n]) ++k;
  78.  
  79.     if (currentStone == BLACKSTONE) {
  80.       uik = blackCapturedKoI;
  81.       ujk = blackCapturedKoJ;
  82.     } else {
  83.       uik = whiteCapturedKoI;
  84.       ujk = whiteCapturedKoJ;
  85.     }
  86.     if ((k == 0) || (k == 1 && ((i == uik) && (j == ujk))))
  87. /* either no effect on my pieces or an illegal Ko take back */
  88.       {
  89.        p[i][j] = EMPTY;   /* restore to open */
  90.        return 1;
  91.       }
  92.     else
  93. /* good move */
  94.       return 0;
  95.    }
  96.  else
  97. /* valid move */
  98.    return 0;
  99. }  /* end suicide */
  100.  
  101.