v06i020: gnugo - game of GO from the GNU folks, Part02/03

78 views
Skip to first unread message

ga...@tekred.cna.tek.com

unread,
Mar 13, 1989, 2:47:13 PM3/13/89
to
Submitted-by: Man Lung Li <ma...@sun2.cs.uh.edu>
Posting-number: Volume 6, Issue 20
Archive-name: gnugo/Part02

#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 2 (of 3)."
# Contents: Makefile count.c endgame.c exambord.c findcolr.c
# findnext.c findopen.c findpatn.c findwinr.c fioe.c genmove.c
# getmove.c main.c objs opening.c sethand.c showinst.c
# Wrapped by billr@saab on Mon Mar 13 11:05:00 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(772 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
X# program to play the game of Go (Wei-Chi)
X# makefile modified 3/13/89 bi...@saab.cna.tek.com
X
XSRC = count.c countlib.c endgame.c eval.c exambord.c findcolr.c \
X findnext.c findopen.c findpatn.c findsavr.c findwinr.c \
X fioe.c genmove.c getij.c getmove.c initmark.c main.c matchpat.c \
X opening.c openregn.c random.c seed.c sethand.c \
X showbord.c showinst.c suicide.c
X
XOBJ = count.o countlib.o endgame.o eval.o exambord.o findcolr.o \
X findnext.o findopen.o findpatn.o findsavr.o findwinr.o \
X fioe.o genmove.o getij.o getmove.o initmark.o main.o matchpat.o \
X opening.o openregn.o random.o seed.o sethand.o \
X showbord.o showinst.o suicide.o
X
XPRG = gnugo
X
XCFLAGS = -O
X
X$(PRG) : $(OBJ)
X $(CC) $(OBJ) -o $@
X
Xmatchpat.o : patterns.c
END_OF_FILE
if test 772 -ne `wc -c <'Makefile'`; then
echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'count.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'count.c'\"
else
echo shar: Extracting \"'count.c'\" \(2530 characters\)
sed "s/^X//" >'count.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19], ml[19][19];
Xextern int lib;
X
Xcount(i, j, color)
X/* count liberty of color piece at i, j */
Xint i, j, color;
X{
X/* set current piece as marked */
X ml[i][j] = EMPTY;
X
X/* check North neighbor */
X if (i != EMPTY)
X {
X if ((p[i - 1][j] == EMPTY) && ml[i - 1][j])
X {
X ++lib;
X ml[i - 1][j] = EMPTY;
X }
X else
X if ((p[i - 1][j] == color) && ml[i - 1][j])
X count(i - 1, j, color);
X }
X/* check South neighbor */
X if (i != 18)
X {
X if ((p[i + 1][j] == EMPTY) && ml[i + 1][j])
X {
X ++lib;
X ml[i + 1][j] = EMPTY;
X }
X else
X if ((p[i + 1][j] == color) && ml[i + 1][j])
X count(i + 1, j, color);
X }
X/* check West neighbor */
X if (j != EMPTY)
X {
X if ((p[i][j - 1] == EMPTY) && ml[i][j - 1])
X {
X ++lib;
X ml[i][j - 1] = EMPTY;
X }
X else
X if ((p[i][j - 1] == color) && ml[i][j - 1])
X count(i, j - 1, color);
X }
X/* check East neighbor */
X if (j != 18)
X {
X if ((p[i][j + 1] == EMPTY) && ml[i][j + 1])
X {
X ++lib;
X ml[i][j + 1] = EMPTY;
X }
X else
X if ((p[i][j + 1] == color) && ml[i][j + 1])
X count(i, j + 1, color);
X }
X} /* end count */
END_OF_FILE
if test 2530 -ne `wc -c <'count.c'`; then
echo shar: \"'count.c'\" unpacked with wrong size!
fi
# end of 'count.c'
fi
if test -f 'endgame.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'endgame.c'\"
else
echo shar: Extracting \"'endgame.c'\" \(3325 characters\)
sed "s/^X//" >'endgame.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19];
Xextern int mymove, umove;
Xextern int mk, uk; /* piece captured */
X
Xendgame()
X/* count pieces and announce the winner */
X{
X char an[10];
X int i, j, mtot, utot, cont;
X
X printf("\nTo count score, we need the following steps:\n");
X printf("First, I need you to remove all dead pieces on the board.\n");
X printf("Second, I need you to fill in neutral territories with ");
X printf("pieces.\n");
X printf("Last, I will fill in all pieces and anounce the winner.\n");
X
X/* remove dead pieces */
X printf("\nFirst, you should enter the dead pieces (blank and white) to");
X printf(" be removed. Enter\n");
X printf(" 'stop' when you have finished.\n");
X
X cont = 1;
X do {
X printf("Dead piece? ");
X scanf("%s", an);
X if (strcmp(an, "stop"))
X {
X getij(an, &i, &j);
X if (p[i][j] == mymove)
X {
X p[i][j] = EMPTY;
X mk++;
X }
X else
X if (p[i][j] == umove)
X {
X p[i][j] = EMPTY;
X uk++;
X }
X showboard();
X }
X else
X cont = 0;
X }
X while (cont);
X
X/* fill in neutral */
X printf("Next, you need to fill in pieces (black and white) in all neutral");
X printf(" territories.\n");
X printf("Enter your and my pieces alternately and enter 'stop' when finish\n");
X cont = 1;
X
X do {
X printf("Your piece? ");
X scanf("%s", an);
X if (strcmp(an, "stop"))
X {
X getij(an, &i, &j);
X p[i][j] = umove;
X printf("My piece? ");
X scanf("%s", an);
X getij(an, &i, &j);
X p[i][j] = mymove;
X showboard();
X }
X else
X cont = 0;
X }
X while (cont);
X
X/* set empty to side they belong to */
X for (i = 0; i < 19; i++)
X for (j = 0; j < 19; j++)
X if (p[i][j] == EMPTY)
X p[i][j] = findcolor(i, j);
X
X/* count total */
X mtot = 0; utot = 0;
X for (i = 0; i < 19; i++)
X for (j = 0; j < 19; j++)
X if (p[i][j] == mymove)
X ++mtot;
X else
X if (p[i][j] == umove)
X ++utot;
X
X showboard();
X printf("Your total number of pieces %d\n", utot);
X printf("My total number of pieces %d\n", mtot);
X
X} /* end endgame */
X
END_OF_FILE
if test 3325 -ne `wc -c <'endgame.c'`; then
echo shar: \"'endgame.c'\" unpacked with wrong size!
fi
# end of 'endgame.c'
fi
if test -f 'exambord.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'exambord.c'\"
else
echo shar: Extracting \"'exambord.c'\" \(2453 characters\)
sed "s/^X//" >'exambord.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19], l[19][19];
Xextern int mymove;
Xextern int mik, mjk, uik, ujk, mk, uk; /* piece captured */
X
Xexamboard(color)
X/* examine pieces */
Xint color;
X {
X int i, j, n;
X
X
X/* find liberty of each piece */
X eval(color);
X
X/* initialize piece captured */
X if (color == mymove)
X {
X mik = -1;
X mjk = -1;
X }
X else
X {
X uik = -1;
X ujk = -1;
X }
X n = 0; /* The number of captures this move for Ko purposes */
X
X/* remove all piece of zero liberty */
X for (i = 0; i < 19; i++)
X for (j = 0; j < 19; j++)
X if ((p[i][j] == color) && (l[i][j] == 0))
X {
X p[i][j] = EMPTY;
X/* record piece captured */
X if (color == mymove)
X {
X mik = i;
X mjk = j;
X ++mk;
X }
X else
X {
X uik = i;
X ujk = j;
X ++uk;
X }
X ++n; /* increment number of captures on this move */
X }
X/* reset to -1 if more than one stone captured since no Ko possible */
X if (color == mymove && n > 1)
X {
X mik = -1;
X mjk = -1;
X }
X else if ( n > 1 )
X {
X uik = -1;
X ujk = -1;
X }
X} /* end examboard */
X
END_OF_FILE
if test 2453 -ne `wc -c <'exambord.c'`; then
echo shar: \"'exambord.c'\" unpacked with wrong size!
fi
# end of 'exambord.c'
fi
if test -f 'findcolr.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'findcolr.c'\"
else
echo shar: Extracting \"'findcolr.c'\" \(2385 characters\)
sed "s/^X//" >'findcolr.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19];
X
Xfindcolor(i, j)
X/* find color for empty piece */
Xint i, j;
X{
X int k, color1, color2;
X
X/* check North neighbor */
X color1 = 0;
X k = i;
X do --k;
X while ((p[k][j] == EMPTY) && (k > 0));
X color1 = p[k][j];
X
X/* check South neighbor */
X color2 = 0;
X k = i;
X do k++;
X while ((p[k][j] == EMPTY) && (k < 18));
X color2 = p[k][j];
X
X if (color1)
X {
X if ((color1 == color2) || (color2 == 0))
X return color1;
X else
X return 0; /* cannot determine */
X }
X else
X if (color2)
X return color2;
X else /* both zero */
X {
X/* check West neighbor */
X color1 = 0;
X k = j;
X do --k;
X while ((p[i][k] == EMPTY) && (k > 0));
X color1 = p[i][k];
X
X/* check East neighbor */
X color2 = 0;
X k = j;
X do k++;
X while ((p[i][k] == EMPTY) && (k < 18));
X color2 = p[i][k];
X
X if (color1)
X {
X if ((color1 == color2) || (color2 == 0))
X return color1;
X else
X return 0; /* cannot determine */
X }
X else
X if (color2)
X return color2;
X else
X return 0;
X }
X} /* end findcolor */
X
END_OF_FILE
if test 2385 -ne `wc -c <'findcolr.c'`; then
echo shar: \"'findcolr.c'\" unpacked with wrong size!
fi
# end of 'findcolr.c'
fi
if test -f 'findnext.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'findnext.c'\"
else
echo shar: Extracting \"'findnext.c'\" \(4049 characters\)
sed "s/^X//" >'findnext.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19], ma[19][19];
Xextern int mymove;
Xextern int lib;
X
Xfindnextmove(m, n, i, j, val, minlib)
X/* find new move i, j from group containing m, n */
Xint m, n, *i, *j, *val, minlib;
X {
X int ti, tj, tval;
X int found = 0;
X
X *i = -1; *j = -1; *val = -1;
X/* mark current position */
X ma[m][n] = 1;
X
X/* check North neighbor */
X if (m != 0)
X if (p[m - 1][n] == EMPTY)
X {
X ti = m - 1;
X tj = n;
X lib = 0;
X countlib(ti, tj, mymove);
X tval = fval(lib, minlib);
X found = 1;
X }
X else
X if ((p[m - 1][n] == mymove) && !ma[m - 1][n])
X if (findnextmove(m - 1, n, &ti, &tj, &tval, minlib))
X found = 1;
X
X if (found)
X {
X found = 0;
X if (tval > *val)
X {
X *val = tval;
X *i = ti;
X *j = tj;
X }
X if (minlib == 1) return 1;
X }
X
X/* check South neighbor */
X if (m != 18)
X if (p[m + 1][n] == EMPTY)
X {
X ti = m + 1;
X tj = n;
X lib = 0;
X countlib(ti, tj, mymove);
X tval = fval(lib, minlib);
X found = 1;
X }
X else
X if ((p[m + 1][n] == mymove) && !ma[m + 1][n])
X if (findnextmove(m + 1, n, &ti, &tj, &tval, minlib))
X found = 1;
X
X if (found)
X {
X found = 0;
X if (tval > *val)
X {
X *val = tval;
X *i = ti;
X *j = tj;
X }
X if (minlib == 1) return 1;
X }
X
X/* check West neighbor */
X if (n != 0)
X if (p[m][n - 1] == EMPTY)
X {
X ti = m;
X tj = n - 1;
X lib = 0;
X countlib(ti, tj, mymove);
X tval = fval(lib, minlib);
X found = 1;
X }
X else
X if ((p[m][n - 1] == mymove) && !ma[m][n - 1])
X if (findnextmove(m, n - 1, &ti, &tj, &tval, minlib))
X found = 1;
X
X if (found)
X {
X found = 0;
X if (tval > *val)
X {
X *val = tval;
X *i = ti;
X *j = tj;
X }
X if (minlib == 1) return 1;
X }
X
X/* check East neighbor */
X if (n != 18)
X if (p[m][n + 1] == EMPTY)
X {
X ti = m;
X tj = n + 1;
X lib = 0;
X countlib(ti, tj, mymove);
X tval = fval(lib, minlib);
X found = 1;
X }
X else
X if ((p[m][n + 1] == mymove) && !ma[m][n + 1])
X if (findnextmove(m, n + 1, &ti, &tj, &tval, minlib))
X found = 1;
X
X if (found)
X {
X found = 0;
X if (tval > *val)
X {
X *val = tval;
X *i = ti;
X *j = tj;
X }
X if (minlib == 1) return 1;
X }
X
X if (*val > 0) /* found next move */
X return 1;
X else /* next move failed */
X return 0;
X} /* end findnextmove */
X
X
Xfval(newlib, minlib)
X/* evaluate new move */
Xint newlib, minlib;
X{
X int k, val;
X
X if (newlib <= minlib)
X val = -1;
X else
X {
X k = newlib - minlib;
X val = 40 + (k - 1) * 50 / (minlib * minlib * minlib);
X }
X return val;
X} /* end fval */
END_OF_FILE
if test 4049 -ne `wc -c <'findnext.c'`; then
echo shar: \"'findnext.c'\" unpacked with wrong size!
fi
# end of 'findnext.c'
fi
if test -f 'findopen.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'findopen.c'\"
else
echo shar: Extracting \"'findopen.c'\" \(3130 characters\)
sed "s/^X//" >'findopen.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19], ma[19][19];
Xextern int mik, mjk; /* piece captured */
X
Xfindopen(m, n, i, j, color, minlib, ct)
X/* find all open spaces i, j from m, n */
Xint m, n, i[], j[], color, minlib, *ct;
X{
X/* mark this one */
X ma[m][n] = 1;
X
X/* check North neighbor */
X if (m != 0)
X {
X if ((p[m - 1][n] == EMPTY) && (((m - 1) != mik) || (n != mjk)))
X {
X i[*ct] = m - 1;
X j[*ct] = n;
X ++*ct;
X if (*ct == minlib) return 1;
X }
X else
X if ((p[m - 1][n] == color) && !ma[m - 1][n])
X if (findopen(m - 1, n, i, j, color, minlib, ct) && (*ct == minlib))
X return 1;
X }
X
X/* check South neighbor */
X if (m != 18)
X {
X if ((p[m + 1][n] == EMPTY) && (((m + 1) != mik) || (n != mjk)))
X {
X i[*ct] = m + 1;
X j[*ct] = n;
X ++*ct;
X if (*ct == minlib) return 1;
X }
X else
X if ((p[m + 1][n] == color) && !ma[m + 1][n])
X if (findopen(m + 1, n, i, j, color, minlib, ct) && (*ct == minlib))
X return 1;
X }
X
X/* check West neighbor */
X if (n != 0)
X {
X if ((p[m][n - 1] == EMPTY) && ((m != mik) || ((n - 1) != mjk)))
X {
X i[*ct] = m;
X j[*ct] = n - 1;
X ++*ct;
X if (*ct == minlib) return 1;
X }
X else
X if ((p[m][n - 1] == color) && !ma[m][n - 1])
X if (findopen(m, n - 1, i, j, color, minlib, ct) && (*ct == minlib))
X return 1;
X }
X
X/* check East neighbor */
X if (n != 18)
X {
X if ((p[m][n + 1] == EMPTY) && ((m != mik) || ((n + 1) != mjk)))
X {
X i[*ct] = m;
X j[*ct] = n + 1;
X ++*ct;
X if (*ct == minlib) return 1;
X }
X else
X if ((p[m][n + 1] == color) && !ma[m][n + 1])
X if (findopen(m, n + 1, i, j, color, minlib, ct) && (*ct == minlib))
X return 1;
X }
X
X/* fail to find open space */
X return 0;
X} /* end findopen */
END_OF_FILE
if test 3130 -ne `wc -c <'findopen.c'`; then
echo shar: \"'findopen.c'\" unpacked with wrong size!
fi
# end of 'findopen.c'
fi
if test -f 'findpatn.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'findpatn.c'\"
else
echo shar: Extracting \"'findpatn.c'\" \(4315 characters\)
sed "s/^X//" >'findpatn.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19];
Xextern int mymove, umove;
Xextern int opn[9];
X
Xfindpatn(i, j, val)
X/* find pattern to match for next move */
Xint *i, *j, *val;
X{
X int m, n;
X int ti, tj, tval;
X static int cnd, mtype; /* game tree node number, move type */
X/* mtype = 0, basic; 1, inverted; 2, reflected; 3, inverted & reflected */
X
X/* open game then occupy corners */
X if (opn[4]) /* continue last move */
X {
X opn[4] = 0; /* clear flag */
X if (opening(i, j, &cnd, mtype)) opn[4] = 1; /* more move then reset flag */
X if (p[*i][*j] == EMPTY) /* valid move */
X {
X *val = 80;
X return 1;
X }
X else
X opn[4] = 0;
X }
X
X if (opn[0]) /* Northwest corner */
X {
X opn[0] = 0; /* clear flag */
X if (openregion(0, 0, 5, 5))
X {
X cnd = 0;
X mtype = 0;
X opening(i, j, &cnd, mtype); /* get new node for next move */
X if (opening(i, j, &cnd, mtype)) opn[4] = 1;
X *val = 80;
X return 1;
X }
X }
X
X if (opn[1]) /* Southwest corner */
X {
X opn[1] = 0;
X if (openregion(13, 0, 18, 5))
X {
X cnd = 0;
X mtype = 1;
X opening(i, j, &cnd, mtype); /* get new node for next move */
X if (opening(i, j, &cnd, mtype)) opn[4] = 1;
X *val = 80;
X return 1;
X }
X }
X
X if (opn[2]) /* Northeast corner */
X {
X opn[2] = 0;
X if (openregion(0, 13, 5, 18))
X {
X cnd = 0;
X mtype = 2;
X opening(i, j, &cnd, mtype); /* get new node for next move */
X if (opening(i, j, &cnd, mtype)) opn[4] = 1;
X *val = 80;
X return 1;
X }
X }
X
X if (opn[3]) /* Northeast corner */
X {
X opn[3] = 0;
X if (openregion(13, 13, 18, 18))
X {
X cnd = 0;
X mtype = 3;
X opening(i, j, &cnd, mtype); /* get new node for next move */
X if (opening(i, j, &cnd, mtype)) opn[4] = 1;
X *val = 80;
X return 1;
X }
X }
X
X/* occupy edges */
X if (opn[5]) /* North edge */
X {
X opn[5] = 0;
X if (openregion(0, 6, 4, 11))
X {
X *i = 3;
X *j = 9;
X *val = 80;
X return 1;
X }
X }
X
X if (opn[6]) /* South edge */
X {
X opn[6] = 0;
X if (openregion(18, 6, 14, 11))
X {
X *i = 15;
X *j = 9;
X *val = 80;
X return 1;
X }
X }
X
X if (opn[7]) /* West edge */
X {
X opn[7] = 0;
X if (openregion(6, 0, 11, 4))
X {
X *i = 9;
X *j = 3;
X *val = 80;
X return 1;
X }
X }
X
X if (opn[8]) /* East edge */
X {
X opn[8] = 0;
X if (openregion(6, 18, 11, 14))
X {
X *i = 9;
X *j = 15;
X *val = 80;
X return 1;
X }
X }
X
X *i = -1;
X *j = -1;
X *val = -1;
X
X/* find local pattern */
X for (m = 0; m < 19; m++)
X for (n = 0; n < 19; n++)
X if ((p[m][n] == mymove) &&
X (matchpat(m, n, &ti, &tj, &tval) && (tval > *val)))
X {
X *val = tval;
X *i = ti;
X *j = tj;
X }
X if (*val > 0) /* pattern found */
X return 1;
X else /* no match found */
X return 0;
X} /* end findpatn */
END_OF_FILE
if test 4315 -ne `wc -c <'findpatn.c'`; then
echo shar: \"'findpatn.c'\" unpacked with wrong size!
fi
# end of 'findpatn.c'
fi
if test -f 'findwinr.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'findwinr.c'\"
else
echo shar: Extracting \"'findwinr.c'\" \(2716 characters\)
sed "s/^X//" >'findwinr.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19], l[19][19];
Xextern int mymove, umove;
Xextern int lib;
X
Xfindwinner(i, j, val)
X/* find opponent piece to capture or attack */
Xint *i, *j, *val;
X{
X int m, n, ti[3], tj[3], tval, ct, u, v, lib1;
X
X *i = -1; *j = -1; *val = -1;
X
X/* find opponent with liberty less than four */
X for (m = 0; m < 19; m++)
X for (n = 0; n < 19; n++)
X if ((p[m][n] == umove) && (l[m][n] < 4))
X {
X ct = 0;
X initmark();
X if (findopen(m, n, ti, tj, umove, l[m][n], &ct))
X {
X if (l[m][n] == 1)
X {
X if (*val < 120)
X {
X *val = 120;
X *i = ti[0];
X *j = tj[0];
X }
X }
X else
X for (u = 0; u < l[m][n]; u++)
X for (v = 0; v < l[m][n]; v++)
X if (u != v)
X {
X lib = 0;
X countlib(ti[u], tj[u], mymove);
X if (lib > 0) /* valid move */
X {
X lib1 = lib;
X p[ti[u]][tj[u]] = mymove;
X /* look ahead opponent move */
X lib = 0;
X countlib(ti[v], tj[v], umove);
X if ((lib1 == 1) && (lib > 0))
X tval = 0;
X else
X tval = 120 - 20 * lib;
X if (*val < tval)
X {
X *val = tval;
X *i = ti[u];
X *j = tj[u];
X }
X p[ti[u]][tj[u]] = EMPTY;
X }
X }
X }
X }
X if (*val > 0) /* find move */
X return 1;
X else /* fail to find winner */
X return 0;
X} /* end findwinner */
END_OF_FILE
if test 2716 -ne `wc -c <'findwinr.c'`; then
echo shar: \"'findwinr.c'\" unpacked with wrong size!
fi
# end of 'findwinr.c'
fi
if test -f 'fioe.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'fioe.c'\"
else
echo shar: Extracting \"'fioe.c'\" \(2585 characters\)
sed "s/^X//" >'fioe.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
Xextern unsigned char p[19][19];
Xextern int mymove;
X
Xfioe(i, j)
X
Xint i, j;
X{
X/* check top edge */
X if (i == 0)
X {
X if ((j == 0) && ((p[1][0] == mymove) && (p[0][1] == mymove))) return 1;
X if ((j == 18) && ((p[1][18] == mymove) && (p[0][17] == mymove))) return 1;
X if ((p[1][j] == mymove) &&
X ((p[0][j - 1] == mymove) && (p[0][j + 1] == mymove))) return 1;
X else
X return 0;
X }
X/* check bottom edge */
X if (i == 18)
X {
X if ((j == 0) && ((p[17][0] == mymove) && (p[18][1] == mymove))) return 1;
X if ((j == 18) && ((p[17][18] == mymove) && (p[18][17] == mymove))) return 1;
X if ((p[17][j] == mymove) &&
X ((p[18][j - 1] == mymove) && (p[18][j + 1] == mymove)))
X return 1;
X else
X return 0;
X }
X/* check left edge */
X if (j == 0)
X if ((p[i][1] == mymove) &&
X ((p[i - 1] [0] == mymove) && (p[i + 1][0] == mymove)))
X return 1;
X else
X return 0;
X/* check right edge */
X if (j == 18)
X if ((p[i][17] == mymove) &&
X ((p[i - 1] [18] == mymove) && (p[i + 1][18] == mymove)))
X return 1;
X else
X return 0;
X/* check center pieces */
X if (((p[i][j - 1] == mymove) && (p[i][j + 1] == mymove)) &&
X ((p[i - 1][j] == mymove) && (p[i + 1][j] == mymove)))
X return 1;
X else
X return 0;
X} /* fioe */
END_OF_FILE
if test 2585 -ne `wc -c <'fioe.c'`; then
echo shar: \"'fioe.c'\" unpacked with wrong size!
fi
# end of 'fioe.c'
fi
if test -f 'genmove.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'genmove.c'\"
else
echo shar: Extracting \"'genmove.c'\" \(3395 characters\)
sed "s/^X//" >'genmove.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X#define MAXTRY 400
X
Xextern unsigned char p[19][19];
Xextern int mymove, umove;
Xextern int rd, lib, pass;
X
Xgenmove(i, j)
X/* generate computer move */
Xint *i, *j;
X {
X int ti, tj, tval;
X char a;
X int ii, m, n, val;
X int try = 0; /* number of try */
X
X/* initialize move and value */
X *i = -1; *j = -1; val = -1;
X
X/* re-evaluate liberty of opponent pieces */
X eval(umove);
X
X/* find opponent piece to capture or attack */
X if (findwinner(&ti, &tj, &tval))
X if (tval > val)
X {
X val = tval;
X *i = ti;
X *j = tj;
X }
X
X/* save any piece if threaten */
X if (findsaver(&ti, &tj, &tval))
X if (tval > val)
X {
X val = tval;
X *i = ti;
X *j = tj;
X }
X
X/* try match local play pattern for new move */
X if (findpatn(&ti, &tj, &tval))
X if (tval > val)
X {
X val = tval;
X *i = ti;
X *j = tj;
X }
X
X/* no urgent move then do random move */
X if (val < 0)
X do {
X random(&rd);
X *i = rd % 19;
X/* avoid low line and center region */
X if ((*i < 2) || (*i > 16) || ((*i > 5) && (*i < 13)))
X {
X random(&rd);
X *i = rd % 19;
X if ((*i < 2) || (*i > 16))
X {
X random(&rd);
X *i = rd % 19;
X }
X }
X random(&rd);
X *j = rd % 19;
X/* avoid low line and center region */
X if ((*j < 2) || (*j > 16) || ((*j > 5) && (*j < 13)))
X {
X random(&rd);
X *j = rd % 19;
X if ((*j < 2) || (*j > 16))
X {
X random(&rd);
X *j = rd % 19;
X }
X }
X lib = 0;
X countlib(*i, *j, mymove);
X }
X/* avoid illegal move, liberty one or suicide, fill in own eye */
X while ((++try < MAXTRY)
X && ((p[*i][*j] != EMPTY) || (lib < 2) || fioe(*i, *j)));
X
X if (try >= MAXTRY) /* computer pass */
X {
X pass++;
X printf("I pass.\n");
X *i = -1;
X }
X else /* find valid move */
X {
X pass = 0;
X printf("my move: ");
X if (*j < 8)
X a = *j + 65;
X else
X a = *j + 66;
X printf("%c", a);
X ii = 19 - *i;
X if (ii < 10)
X printf("%1d\n", ii);
X else
X printf("%2d\n", ii);
X }
X} /* end genmove */
END_OF_FILE
if test 3395 -ne `wc -c <'genmove.c'`; then
echo shar: \"'genmove.c'\" unpacked with wrong size!
fi
# end of 'genmove.c'
fi
if test -f 'getmove.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'getmove.c'\"
else
echo shar: Extracting \"'getmove.c'\" \(2630 characters\)
sed "s/^X//" >'getmove.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xextern unsigned char p[19][19];
Xextern int mymove, umove;
Xextern int play, pass;
Xextern int mk, uk; /* piece captured */
Xextern int opn[9];
X
Xgetmove(move, i, j)
X/* interpret response of human move to board position */
Xchar move[];
Xint *i, *j;
X {
X FILE *fp;
X int m, n;
X
X if (strcmp(move, "stop") == 0)
X/* stop game */
X play = 0;
X else
X {
X if (strcmp(move, "save") == 0)
X/* save data and stop game */
X {
X fp = fopen("gnugo.dat", "w");
X/* save board configuration */
X for (m = 0; m < 19; m++)
X for (n = 0; n < 19; n++)
X fprintf(fp, "%c", p[m][n]);
X/* my color, pieces captured */
X fprintf(fp, "%d %d %d ", mymove, mk, uk);
X/* opening pattern flags */
X for (m = 0; m < 9; m++)
X fprintf(fp, "%d ", opn[m]);
X
X fclose(fp);
X play = -1;
X }
X else
X {
X if (strcmp(move, "pass") == 0)
X/* human pass */
X {
X pass++;
X *i = -1; /* signal pass */
X }
X else
X {
X pass = 0;
X/* move[0] from A to T, move[1] move[2] from 1 to 19 */
X/* convert move to coordinate */
X if (!getij(move, i, j) || (p[*i][*j] != EMPTY) || suicide(*i, *j))
X {
X printf("illegal move !\n");
X printf("your move? ");
X scanf("%s", move);
X getmove(move, i, j);
X }
X }
X }
X }
X} /* end getmove */
END_OF_FILE
if test 2630 -ne `wc -c <'getmove.c'`; then
echo shar: \"'getmove.c'\" unpacked with wrong size!
fi
# end of 'getmove.c'
fi
if test -f 'main.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'main.c'\"
else
echo shar: Extracting \"'main.c'\" \(4210 characters\)
sed "s/^X//" >'main.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define EMPTY 0
X
Xunsigned char p[19][19], l[19][19], ma[19][19], ml[19][19];
Xint mymove, umove;
Xint rd, lib, play, pass;
Xint mik, mjk, uik, ujk, mk, uk; /* piece captured */
Xint opn[9]; /* opening pattern flag */
X
Xmain()
X {
X FILE *fp;
X int i, j;
X char move[10], ans[5];
X int cont = 0;
X
X/* show instruction */
X showinst();
X
X if ((fp = fopen("gnugo.dat", "r")) != NULL) /* continue old game */
X {
X cont = 1;
X
X/* read board configuration */
X for (i = 0; i < 19; i++)
X for (j = 0; j < 19; j++)
X fscanf(fp, "%c", &p[i][j]);
X
X/* read my color, pieces captured */
X fscanf(fp, "%d %d %d ", &mymove, &mk, &uk);
X/* read opening pattern flags */
X for (i = 0; i < 9; i++)
X fscanf(fp, "%d ", &opn[i]);
X
X fclose(fp);
X umove = 3 - mymove;
X
X/* delete file */
X unlink("gnugo.dat");
X }
X else
X {
X/* init opening pattern numbers to search */
X for (i = 0; i < 9; i++)
X opn[i] = 1;
X opn[4] = 0;
X
X/* init board */
X for (i = 0; i < 19; i++)
X for (j = 0; j < 19; j++)
X p[i][j] = EMPTY;
X/* init global variables */
X mk = 0; uk = 0;
X }
X
X/* init global variables */
X play = 1;
X pass = 0;
X mik = -1; mjk = -1;
X uik = -1; ujk = -1;
X seed(&rd); /* start random number seed */
X
X if (!cont) /* new game */
X {
X/* ask for handicap */
X printf("Number of handicap for black (0 to 17)? ");
X scanf("%d", &i);
X getchar();
X sethand(i);
X
X/* display game board */
X showboard();
X
X/* choose color */
X printf("\nChoose side(b or w)? ");
X scanf("%c",ans);
X if (ans[0] == 'b')
X {
X mymove = 1; /* computer white */
X umove = 2; /* human black */
X if (i)
X {
X genmove(&i, &j); /* computer move */
X p[i][j] = mymove;
X }
X }
X else
X {
X mymove = 2; /* computer black */
X umove = 1; /* human white */
X if (i == 0)
X {
X genmove(&i, &j); /* computer move */
X p[i][j] = mymove;
X }
X }
X }
X
X showboard();
X
X/* main loop */
X while (play > 0)
X {
X printf("your move? ");
X scanf("%s", move);
X getmove(move, &i, &j); /* read human move */
X if (play > 0)
X {
X if (i >= 0) /* not pass */
X {
X p[i][j] = umove;
X examboard(mymove); /* remove my dead pieces */
X }
X if (pass != 2)
X {
X genmove(&i, &j); /* computer move */
X if (i >= 0) /* not pass */
X {
X p[i][j] = mymove;
X examboard(umove); /* remove your dead pieces */
X }
X }
X showboard();
X }
X if (pass == 2) play = 0; /* both pass then stop game */
X }
X
X if (play == 0)
X {
X/* finish game and count pieces */
X getchar();
X printf("Do you want to count score (y or n)? ");
X scanf("%c",ans);
X if (ans[0] == 'y') endgame();
X }
X } /* end main */
END_OF_FILE
if test 4210 -ne `wc -c <'main.c'`; then
echo shar: \"'main.c'\" unpacked with wrong size!
fi
# end of 'main.c'
fi
if test -f 'objs' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'objs'\"
else
echo shar: Extracting \"'objs'\" \(208 characters\)
sed "s/^X//" >'objs' <<'END_OF_FILE'
XCOUNT COUNTLIB ENDGAME EVAL EXAMBORD FINDCOLR FINDNEXT FINDOPEN +
XFINDPATN FINDSAVR FINDWINR FIOE GENMOVE GETIJ GETMOVE INITMARK MAIN MATCHPAT +
XOPENING OPENREGN RANDOM SEED SETHAND SHOWBORD SHOWINST SUICIDE
END_OF_FILE
if test 208 -ne `wc -c <'objs'`; then
echo shar: \"'objs'\" unpacked with wrong size!
fi
# end of 'objs'
fi
if test -f 'opening.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'opening.c'\"
else
echo shar: Extracting \"'opening.c'\" \(2432 characters\)
sed "s/^X//" >'opening.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
Xextern int rd;
X
Xopening(i, j, cnd, type)
X/* get move for opening from game tree */
Xint *i, *j, *cnd, type;
X{
X struct tnode {
X int i, j, ndct, next[8];
X };
X
X static struct tnode tree[] = {
X {-1, -1, 8, { 1, 2, 3, 4, 5, 6, 7, 20}}, /* 0 */
X {2, 3, 2, { 8, 9}},
X {2, 4, 1, {10}},
X {3, 2, 2, {11, 12}},
X {3, 3, 6, {14, 15, 16, 17, 18, 19}},
X {3, 4, 1, {10}}, /* 5 */
X {4, 2, 1, {13}},
X {4, 3, 1, {13}},
X {4, 2, 0},
X {4, 3, 0},
X {3, 2, 0}, /* 10 */
X {2, 4, 0},
X {3, 4, 0},
X {2, 3, 0},
X {2, 5, 1, {10}},
X {2, 6, 1, {10}}, /* 15 */
X {3, 5, 1, {10}},
X {5, 2, 1, {13}},
X {5, 3, 1, {13}},
X {6, 2, 1, {13}},
X {2, 2, 0} /* 20 */
X};
Xint m;
X
X/* get i, j */
X if ((type == 1) || (type == 3))
X *i = 18 - tree[*cnd].i; /* inverted */
X else
X *i = tree[*cnd].i;
X if ((type == 2) || (type == 3))
X *j = 18 - tree[*cnd].j; /* reflected */
X else
X *j = tree[*cnd].j;
X if (tree[*cnd].ndct) /* more move */
X {
X random(&rd);
X m = rd % tree[*cnd].ndct; /* select move */
X *cnd = tree[*cnd].next[m]; /* new current node */
X return 1;
X }
X else
X return 0;
X} /* end opening */
X
END_OF_FILE
if test 2432 -ne `wc -c <'opening.c'`; then
echo shar: \"'opening.c'\" unpacked with wrong size!
fi
# end of 'opening.c'
fi
if test -f 'sethand.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'sethand.c'\"
else
echo shar: Extracting \"'sethand.c'\" \(2343 characters\)
sed "s/^X//" >'sethand.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#include <stdio.h>
X
X#define BLACK 2
X
Xextern unsigned char p[19][19];
X
Xsethand(i)
X/* set up handicap pieces */
Xint i;
X
X{
X if (i > 0)
X {
X p[3][3] = BLACK;
X if (i > 1)
X {
X p[15][15] = BLACK;
X if (i > 2)
X {
X p[3][15] = BLACK;
X if (i > 3)
X {
X p[15][3] = BLACK;
X if (i == 5)
X p[9][9] = BLACK;
X else
X if (i > 5)
X {
X p[9][15] = BLACK;
X p[9][3] = BLACK;
X if (i == 7)
X p[9][9] = BLACK;
X else
X if (i > 7)
X {
X p[15][9] = BLACK;
X p[3][9] = BLACK;
X if (i > 8)
X p[9][9] = BLACK;
X if (i > 9)
X {p[2][2] = 2;
X if (i > 10)
X {p[16][16] = 2;
X if (i > 11)
X {p[2][16] = 2;
X if (i > 12)
X {p[16][2] = 2;
X if (i > 13)
X {p[6][6] = 2;
X if (i > 14)
X {p[12][12] = 2;
X if (i > 15)
X {p[6][12] = 2;
X if (i > 16)
X p[12][6] = 2;
X }
X }
X }
X }
X }
X }
X }
X }
X }
X }
X }
X }
X }
X} /* end sethand */
END_OF_FILE
if test 2343 -ne `wc -c <'sethand.c'`; then
echo shar: \"'sethand.c'\" unpacked with wrong size!
fi
# end of 'sethand.c'
fi
if test -f 'showinst.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'showinst.c'\"
else
echo shar: Extracting \"'showinst.c'\" \(4230 characters\)
sed "s/^X//" >'showinst.c' <<'END_OF_FILE'
X/*
X GNU GO - the game of Go (Wei-Chi)
X Version 1.1 last revised 3-1-89
X Copyright (C) Free Software Foundation, Inc.
X written by Man L. Li
X modified by Wayne Iba
X documented by Bob Webber
X*/
X/*
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation - version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
XGNU General Public License in file COPYING for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; if not, write to the Free Software
XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
XPlease report any bug/fix, modification, suggestion to
X
Xmail address: Man L. Li
X Dept. of Computer Science
X University of Houston
X 4800 Calhoun Road
X Houston, TX 77004
X
Xe-mail address: ma...@cs.uh.edu (Internet)
X cos...@uhvax1.bitnet (BITNET)
X 70070,404 (CompuServe)
X*/
X
X#define SUN 68000
X
X#include <stdio.h>
X
Xshowinst()
X/* show program instructions */
X{
X printf("XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOX");
X printf("OXOXOXOXOXOX\n");
X printf("O ");
X printf(" O\n");
X printf("X GNU GO (Previously Hugo) ");
X printf(" X\n");
X printf("O the game of Go (Wei-Chi) ");
X printf(" O\n");
X printf("X ");
X printf(" X\n");
X printf("O version 1.1 3-1-89 ");
X printf(" O\n");
X printf("X Copyright (C) 1989 Free Software Foundation, Inc. ");
X printf(" X\n");
X printf("O Author: Man L. Li ");
X printf(" O\n");
X printf("X GNU GO comes with ABSOLUTELY NO WARRANTY; see COPYING for");
X printf(" X\n");
X printf("O detail. This is free software, and you are welcome to ");
X printf(" O\n");
X printf("X redistribute it; see COPYING for copying conditions. ");
X printf(" X\n");
X printf("O ");
X printf(" O\n");
X
X#ifdef SUN
X
X printf("X Please report all bugs, modifications, suggestions ");
X printf(" X\n");
X printf("O to ma...@cs.uh.edu (Internet) ");
X printf(" O\n");
X
X#endif
X
X printf("X ");
X printf(" X\n");
X printf("OXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO");
X printf("XOXOXOXOXOXO\n");
X printf("\n\n\n\n\n\n\n\nPress return to continue");
X getchar();
X printf("\n\nTo play this game first select number of handicap pieces (0 to");
X printf(" 17) for the\nblack side. Next choose your color (black or white).");
X printf(" To place your piece,\nenter your move as coordinate on the board");
X printf(" in column and row. The column\nis from 'A' to 'T'(excluding 'I').");
X printf(" The row is from 1 to 19.\n\nTo pass your move enter 'pass' for");
X printf(" your turn. After both you and the computer\npassed the game will");
X printf(" end. To save the board and exit enter 'save'. The game\nwill");
X printf(" continue the next time you start the program. To stop the game in");
X printf(" the\nmiddle of play enter 'stop' for your move. You will be");
X printf(" asked whether you want\nto count the result of the game. If you");
X printf(" answer 'y' then you need to remove the\nremaining dead pieces and");
X printf(" fill up neutral turf on the board as instructed.\nFinally, the");
X printf(" computer will count all pieces for both side and show the result.\n\n");
X} /* end showinst */
X
END_OF_FILE
if test 4230 -ne `wc -c <'showinst.c'`; then
echo shar: \"'showinst.c'\" unpacked with wrong size!
fi
# end of 'showinst.c'
fi
echo shar: End of archive 2 \(of 3\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 3 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0

Reply all
Reply to author
Forward
0 new messages