home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / Apps / Games / NeXTGo / Source / count.c < prev    next >
Encoding:
C/C++ Source or Header  |  1977-12-27  |  2.7 KB  |  109 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.  
  50. extern unsigned char p[19][19], ml[19][19];
  51. extern int lib, MAXX, MAXY;
  52.  
  53. void count(int i, int j, int color)
  54.      /* count liberty of color piece at i, j */
  55. {
  56.   /* set current piece as marked */
  57.   ml[i][j] = EMPTY;
  58.   
  59.   /* check North neighbor */
  60.   if (i != EMPTY)
  61.     {
  62.       if ((p[i - 1][j] == EMPTY) && ml[i - 1][j])
  63.     {
  64.       ++lib;
  65.       ml[i - 1][j] = EMPTY;
  66.     }
  67.       else
  68.     if ((p[i - 1][j] == color) && ml[i - 1][j])
  69.       count(i - 1, j, color);
  70.     }
  71.   /* check South neighbor */
  72.   if (i != MAXX - 1)
  73.     {
  74.       if ((p[i + 1][j] == EMPTY) && ml[i + 1][j])
  75.     {
  76.       ++lib;
  77.       ml[i + 1][j] = EMPTY;
  78.     }
  79.       else
  80.     if ((p[i + 1][j] == color) && ml[i + 1][j])
  81.       count(i + 1, j, color);
  82.     }
  83.   /* check West neighbor */
  84.   if (j != EMPTY)
  85.     {
  86.       if ((p[i][j - 1] == EMPTY) && ml[i][j - 1])
  87.     {
  88.       ++lib;
  89.       ml[i][j - 1] = EMPTY;
  90.     }
  91.       else
  92.     if ((p[i][j - 1] == color) && ml[i][j - 1])
  93.       count(i, j - 1, color);
  94.     }
  95.   /* check East neighbor */
  96.   if (j != MAXY - 1)
  97.     {
  98.       if ((p[i][j + 1] == EMPTY) && ml[i][j + 1])
  99.     {
  100.       ++lib;
  101.       ml[i][j + 1] = EMPTY;
  102.     }
  103.       else
  104.     if ((p[i][j + 1] == color) && ml[i][j + 1])
  105.       count(i, j + 1, color);
  106.     }
  107. }  /* end count */
  108.  
  109.