home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / Apps / Games / NeXTGo / Source / opening.c < prev    next >
Encoding:
C/C++ Source or Header  |  1977-12-27  |  2.7 KB  |  102 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. extern int rd, MAXX, MAXY;
  49. extern void Random(int*);
  50.  
  51. int opening(int *i, int *j, int *cnd, int type)
  52.      /* get move for opening from game tree */
  53. {
  54.   struct tnode {
  55.     int i, j, ndct, next[8];
  56.   };
  57.   
  58.   static struct tnode tree[] = {
  59.     {-1, -1, 8, { 1, 2, 3, 4, 5, 6, 7, 20}},    /* 0 */
  60.     {2, 3, 2, { 8, 9}},
  61.     {2, 4, 1, {10}},
  62.     {3, 2, 2, {11, 12}},
  63.     {3, 3, 6, {14, 15, 16, 17, 18, 19}},
  64.     {3, 4, 1, {10}},  /* 5 */
  65.     {4, 2, 1, {13}},
  66.     {4, 3, 1, {13}},
  67.     {4, 2, 0},
  68.     {4, 3, 0},
  69.     {3, 2, 0},  /* 10 */
  70.     {2, 4, 0},
  71.     {3, 4, 0},
  72.     {2, 3, 0},
  73.     {2, 5, 1, {10}},
  74.     {2, 6, 1, {10}},  /* 15 */
  75.     {3, 5, 1, {10}},
  76.     {5, 2, 1, {13}},
  77.     {5, 3, 1, {13}},
  78.     {6, 2, 1, {13}},
  79.     {2, 2, 0}  /* 20 */
  80.   };
  81.   int m;
  82.   
  83.   /* get i, j */
  84.   if ((type == 1) || (type == 3))
  85.     *i = (18 - tree[*cnd].i)*19/MAXX;   /* inverted */
  86.   else
  87.     *i = tree[*cnd].i*18/MAXX;
  88.   if ((type == 2) || (type == 3))
  89.     *j = (18 - tree[*cnd].j)*19/MAXY;   /* reflected */
  90.   else
  91.     *j = tree[*cnd].j*19/MAXY;
  92.   if (tree[*cnd].ndct)  /* more move */
  93.     {
  94.       Random(&rd);
  95.       m = rd % tree[*cnd].ndct;  /* select move */
  96.       *cnd = tree[*cnd].next[m];    /* new    current node */
  97.       return 1;
  98.     }
  99.   else
  100.     return 0;
  101. }  /* end opening */
  102.