[comp.sources.amiga] v91i115: Draughts - Draughts game, Part01/01

amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (05/18/91)

Submitted-by: RWALLACE%vax1.tcd.ie@CUNYVM.CUNY.EDU
Posting-number: Volume 91, Issue 115
Archive-name: games/draughts/part01

[ includes uuencoded executable  ...tad ]

Run from operating system prompt by typing "draughts <ply>"
where <ply> is the number of half-moves you want the program to look ahead.
The higher the number the better the quality of the game but the slower the
program will play. 3 or 4 is probably about the limit for most people's
patience, but you could use higher numbers for batch-mode play. The program
always takes first move (it plays black, you play white). It will display
the board on the screen and the cursor below that. You can then type your
move by typing the coordinates of the start and finish squares, row first
e.g. one possible starting move is 5140. Note that you must type the 4 digits
with no spaces or anything between them, exactly as shown. Also when taking
one of the computer's pieces, the destination square is on top of the enemy
piece not beyond it even though your piece will actually be jumping over the
enemy piece. Press CTRL-C to stop the program.

Exceptions to the standard rules of draughts are:
- No repeat taking in one move
- You don't have to take an enemy piece if the opportunity arises
- If one side can make no legal move, the game does not end

#!/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 1 (of 1)."
# Contents:  draughts.c draughts.uu
# Wrapped by tadguy@ab20 on Fri May 17 22:12:07 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'draughts.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'draughts.c'\"
else
echo shar: Extracting \"'draughts.c'\" \(7553 characters\)
sed "s/^X//" >'draughts.c' <<'END_OF_FILE'
X/*
XDraughts game by Russell Wallace 29 September 1990
XStandard ANSI C so it should compile on any system
XUses Alpha-Beta minimax algorithm
X
XRun from operating system prompt by typing "draughts <ply>"
Xwhere <ply> is the number of half-moves you want the program to look ahead.
XThe higher the number the better the quality of the game but the slower the
Xprogram will play. 3 or 4 is probably about the limit for most people's
Xpatience, but you could use higher numbers for batch-mode play. The program
Xalways takes first move (it plays black, you play white). It will display
Xthe board on the screen and the cursor below that. You can then type your
Xmove by typing the coordinates of the start and finish squares, row first
Xe.g. one possible starting move is 5140. Note that you must type the 4 digits
Xwith no spaces or anything between them, exactly as shown. Also when taking
Xone of the computer's pieces, the destination square is on top of the enemy
Xpiece not beyond it even though your piece will actually be jumping over the
Xenemy piece. Press CTRL-C to stop the program.
X
XExceptions to the standard rules of draughts are:
X- No repeat taking in one move
X- You don't have to take an enemy piece if the opportunity arises
X- If one side can make no legal move, the game does not end
X
XThis code is in the public domain.
X*/
X
X#include	<stdio.h>
X#include	<limits.h>
X#include	<string.h>
X#include	<stdlib.h>
X
Xtypedef struct
X{
X	int p[8][8];
X} board;
X
Xtypedef struct
X{
X	int i,j,dir;
X} trackMove;
X
X#define	TRUE		1
X#define	FALSE		0
X
Xboard startboard =
X{
X	1,0,1,0,1,0,1,0,
X	0,1,0,1,0,1,0,1,
X	1,0,1,0,1,0,1,0,
X	0,0,0,0,0,0,0,0,
X	0,0,0,0,0,0,0,0,
X	0,-1,0,-1,0,-1,0,-1,
X	-1,0,-1,0,-1,0,-1,0,
X	0,-1,0,-1,0,-1,0,-1,
X};
X
Xint ply;
X
Xisvalidmove (board *move)
X{
X	return (move->p[0][0] != INT_MIN);
X}
X
Xvoid inctrackmove (trackMove *trackmove)
X{
X	trackmove->dir = 0;
X	trackmove->j += 2;
X	if (trackmove->j >= 8)
X	{
X		if (trackmove->j == 8)
X			trackmove->j = 1;
X		else
X			trackmove->j = 0;
X		trackmove->i++;
X	}
X}
X
Xsign (int x)
X{
X	if (x < 0)
X		return -1;
X	if (x > 0)
X		return 1;
X	return 0;
X}
X
Xmakemove (int i,int j,int di,int dj,board *move)
X{
X	if (i+di < 0 || i+di > 7 || j+dj < 0 || j+dj > 7)
X		return TRUE;
X	if (sign (move->p[i][j]) == sign (move->p[i+di][j+dj]))
X		return TRUE;
X	if (move->p[i+di][j+dj] == 0)
X	{
X		if (move->p[i][j] == 1 && i+di == 7)
X			move->p[i][j] = 2;
X		if (move->p[i][j] == -1 && i+di == 0)
X			move->p[i][j] = -2;
X		move->p[i+di][j+dj] = move->p[i][j];
X		move->p[i][j] = 0;
X		return FALSE;
X	}
X	if (i+di+di < 0 || i+di+di > 7 || j+dj+dj < 0 || j+dj+dj > 7)
X		return TRUE;
X	if (move->p[i+di+di][j+dj+dj] != 0)
X		return TRUE;
X	if (move->p[i][j] == 1 && i+di+di == 7)
X		move->p[i][j] = 2;
X	if (move->p[i][j] == -1 && i+di+di == 0)
X		move->p[i][j] = -2;
X	move->p[i+di][j+dj] = 0;
X	move->p[i+di+di][j+dj+dj] = move->p[i][j];
X	move->p[i][j] = 0;
X	return FALSE;
X}
X
Xvoid findnextmove (board *pos,board *move,trackMove *trackmove,int minimize)
X{
X	int i,j;
X	static di[] = { 1,1,-1,-1 };
X	static dj[] = { -1,1,-1,1 };
X	*move = *pos;
XBIGLOOP:
X	if (trackmove->i >= 8)
X	{
X		move->p[0][0] = INT_MIN;
X		return;
X	}
XLOOP:
X	i = trackmove->i;
X	j = trackmove->j;
X	switch (pos->p[i][j])
X	{
X		case -2:
X			if (!minimize)
X				goto INCMOVE;
X			if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
X				goto NEXT;
X			goto FINISH;
X		case -1:
X			if (!minimize)
X				goto INCMOVE;
X			if (trackmove->dir < 2)
X				trackmove->dir = 2;
X			if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
X				goto NEXT;
X			goto FINISH;
X		case 1:
X			if (minimize || trackmove->dir > 1)
X				goto INCMOVE;
X			if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
X				goto NEXT;
X			goto FINISH;
X		case 2:
X			if (minimize)
X				goto INCMOVE;
X			if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
X				goto NEXT;
X			goto FINISH;
X	}
XINCMOVE:
X	inctrackmove (trackmove);
X	goto BIGLOOP;
XNEXT:
X	trackmove->dir++;
X	if (trackmove->dir > 3)
X		goto INCMOVE;
X	goto LOOP;
XFINISH:
X	trackmove->dir++;
X	if (trackmove->dir > 3)
X		inctrackmove (trackmove);
X}
X
Xvoid findfirstmove (board *pos,board *move,trackMove *trackmove,int minimize)
X{
X	trackmove->i = trackmove->j = trackmove->dir = 0;
X	findnextmove (pos,move,trackmove,minimize);
X}
X
Xminimax (board *pos,int level,int alpha,int beta)
X{
X	board move;
X	trackMove trackmove;
X	if (level == ply)
X	{
X		int i,j;
X		int value = 0;
X		for (i=0 ; i<8 ; i++)
X			for (j=0 ; j<8 ; j++)
X				value += pos->p[i][j];
X		return value;
X	}
X	findfirstmove (pos,&move,&trackmove,level & 1);
X	if (level & 1)		/* Minimizing level */
X	{
X		while (alpha < beta && isvalidmove (&move))
X		{
X			int temp = minimax (&move,level+1,alpha,beta);
X			if (temp < beta)
X				beta = temp;
X			findnextmove (pos,&move,&trackmove,TRUE);
X		}
X		return beta;
X	}
X	else					/* Maximizing level */
X	{
X		while (alpha < beta && isvalidmove (&move))
X		{
X			int temp = minimax (&move,level+1,alpha,beta);
X			if (temp > alpha)
X				alpha = temp;
X			findnextmove (pos,&move,&trackmove,FALSE);
X		}
X		return alpha;
X	}
X}
X
Xvoid printboard (board *pos)
X{
X	int i,j;
X	printf ("\n 01234567\n");
X	for (i=0 ; i<8 ; i++)
X	{
X		printf ("%c",i + '0');
X		for (j=0 ; j<8 ; j++)
X		{
X			switch (pos->p[i][j])
X			{
X				case -2:
X					printf ("W");
X					break;
X				case -1:
X					printf ("w");
X					break;
X				case 0:
X					if ((i + j) & 1)
X						printf (" ");
X					else
X						printf (".");
X					break;
X				case 1:
X					printf ("b");
X					break;
X				case 2:
X					printf ("B");
X					break;
X			}
X		}
X		printf ("\n");
X	}
X	printf ("\n");
X}
X
Xmain (int argc,char **argv)
X{
X	int i,j,newi,newj,di,dj;
X	static char buf[256];
X	static board move;
X	static board bestmove;
X	static trackMove trackmove;
X	static board pos;
X	int alpha;
X	printf ("Draughts by Russell Wallace  " __DATE__ "\n"
X				"See source code for details\n");
X	if (argc != 2 || argv[1][0] == '?')
X		return 1;
X	ply = atoi (argv[1]);
X	for (;;)
X	{
X		pos = startboard;
X		for (;;)
X		{
X			alpha = INT_MIN;
X			newi = newj = FALSE;
X			for (i=0 ; i<8 ; i++)
X				for (j=0 ; j<8 ; j++)
X				{
X					if (pos.p[i][j] < 0)
X						newi = TRUE;
X					if (pos.p[i][j] > 0)
X						newj = TRUE;
X				}
X			if (!newi)
X			{
X				printf ("I win\n");
X				break;
X			}
X			if (!newj)
X			{
X				printf ("You win\n");
X				break;
X			}
X			bestmove = pos;
X			findfirstmove (&pos,&move,&trackmove,FALSE);
X			while (isvalidmove (&move))
X			{
X				int newalpha = minimax (&move,1,alpha,INT_MAX);
X				if (newalpha > alpha)
X				{
X					alpha = newalpha;
X					bestmove = move;
X				}
X				findnextmove (&pos,&move,&trackmove,FALSE);
X			}
X			pos = bestmove;
X			printboard (&pos);
XGET_MOVE:
X			gets (buf);
X			if (strlen (buf) != 4)
X				goto ILLEGAL_MOVE;
X			i = buf[0] - '0';
X			j = buf[1] - '0';
X			newi = buf[2] - '0';	
X			newj = buf[3] - '0';
X			if (	i < 0 || i > 7 || newi < 0 || newi > 7 ||
X					j < 0 || j > 7 || newj < 0 || newj > 7)
X				goto ILLEGAL_MOVE;
X			if ((i-newi != 1 && i-newi != -1) || (j-newj != 1 && j-newj != -1))
X				goto ILLEGAL_MOVE;
X			if (pos.p[i][j] >= 0)
X				goto ILLEGAL_MOVE;
X			if (pos.p[newi][newj] < 0)
X				goto ILLEGAL_MOVE;
X			if (pos.p[newi][newj] == 0)
X			{
X				if (newi == 0)
X					pos.p[i][j] = -2;
X				pos.p[newi][newj] = pos.p[i][j];
X				pos.p[i][j] = 0;
X			}
X			else
X			{
X				di = newi - i;
X				dj = newj - j;
X				if (newi+di < 0 || newi+di > 7 || newj+dj < 0 || newj+dj > 7)
X					goto ILLEGAL_MOVE;
X				if (pos.p[newi+di][newj+dj] != 0)
X					goto ILLEGAL_MOVE;
X				if (newi+di == 0)
X					pos.p[i][j] = -2;
X				pos.p[newi+di][newj+dj] = pos.p[i][j];
X				pos.p[newi][newj] = 0;
X				pos.p[i][j] = 0;
X			}
X		}
X	}
XILLEGAL_MOVE:
X	printf ("Illegal move\n");
X	goto GET_MOVE;
X}
END_OF_FILE
if test 7553 -ne `wc -c <'draughts.c'`; then
    echo shar: \"'draughts.c'\" unpacked with wrong size!
fi
# end of 'draughts.c'
fi
if test -f 'draughts.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'draughts.uu'\"
else
echo shar: Extracting \"'draughts.uu'\" \(13612 characters\)
sed "s/^X//" >'draughts.uu' <<'END_OF_FILE'
Xbegin 644 draughts
XM```#\P`````````#``````````(```7J```"C0```F\```/I```%ZDCG?OXD4
XM2"0`2?D`````+'@`!$?Y```#/'(`(#P```&@8`(FP5'(__PI3P-\*4X#=$*LT
XM`WAP`"(\```P`$ZN_LY#^@&4<`!.KOW8*4`)N&8&<&1@``$F)FX!%"EK`)@#=
XM<$JK`*QG``"2(`^0KP`X!H````"`*4`#0"!K`*S1R-'((F@`$-/)T\D@`G(`Q
XM$ADI20.$T(%>@`)`__PI0`.,2.=`0"(\``$``4ZN_SI*@&8,(#P```/H+P!GE
XM``$0($`I0`.(3-\"`B`"4X#4@1&R```@`E."4<C_]A&\`"`@`E."$;P`(B`";
XM$;$@`"`!4<K_^!"\`"(O"&!R*6L`.@-`<']2@-&L`T!!ZP!<3J[^@$'K`%Q.V
XMKOZ,*4`#>"\`)$`@*@`D9Q(L;`FX($`B*```*4$#<$ZN_X(B*@`@9QHD/````
XM`^U.KO_B*4`#@&<*Y8@@0"=H``@`I"!L`W@O"$AL`SP@:``D*6@`!`.$3KH`S
XML$ZZ`'QP`&`$("\`!"\`("P#:&<$($!.D$ZZ`%PL>``$(FP)N$ZN_F).N@"&O
XM2JP#>&<<(BP#@&<$3J[_W"QX``1.KO]\(FP#>$ZN_H9@#B`L`XQG"")L`XA..
XMKO\N(!\N;`-\3-]_?DYU9&]S+FQI8G)A<GD```!@``\"3G$``"!O``1@``3*X
XM3G$``$CG,#(L;P`H)&\`&"9O`!PD+P`@)B\`)$ZN_J1,WTP,3G4``$YU3G5(-
XMYP<P+@`F2"P!(`=.NA3*)$`@"F8$</]@,`@J``,``V<.2'@``B`'<@!.N@[,5
XM6$\@*@`$(@8@2TZZ$,HJ`$JL`U1G!'#_8`(@!4S?#.!.=0```````'!A2.<#?
XM$"9O`!`@2TH89OQ3B)'++`A^`!X;2H=G+%.L`69M$B!L`5Y2K`%>(`<0@'(``
XM$@!@X"`'<@`2`"`!0>P!6DZZ!KHB`&#,</]![`%:3KH&K"`&3-\(P$YU````)
XM``````!P84Y5_\!(YR<P)D@D27X`?`!Z`'``&WP`(/_[<@`K0?_V=/\K0O_R-
XM0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,$!-G+'(`$@`$00`@9Q1706<444%GD
XM"%5!9A9^`6`.?`%@"GH!8`8;?``!__Q2BV#0$!-R,+`!9@92BQM!__MP*K`3A
XM9@P@4EB2*U#_]E*+8`P@2T/M__9.N@MVU\`0$W(NL`%F(%*+<"JP$V8,(%)8G
XMDBM0__)2BV`,($M#[?_R3KH+3M?`$!-R;+`!9@H;?``!__%2BV`(<FBP`68"M
XM4HL0&W(`$@`;0/_P!$$`4&<``69106<``70$00`+9P`!^E-!9R0$00`+9P`!P
XM#%-!9P`!1E=!9P`!JE5!9P``WE=!9P`!2&```>A*+?_Q9P@@4EB2(!!@!B!2>
XM6)(@$"M`_^QL"G(!1*W_["M!_^@@+?_H9P1R+6`*2@9G!'(K8`)R(!M!_]!R9
XM`!(&@(%R`!(%@(%G"%*M_\Q2K?_D("W_["!M_\Q.N@H(*T#_R"`M__)*@&H&2
XM<@$K0?_R("W_R"(M__*2@$CM``+_Q&\T(&W_S-'!+T@`&"!M_\PB;P`83KH,A
XM-G``$"W_^R(M_\0@;?_,8`(0P%.!9/H@+?_R*T#_R-&M_^1![?_0*TC_S$H'(
XM9P`!)!M\`"#_^V```1I*+?_Q9P@@4EB2(!!@!B!26)(@$"M`_^Q@`/]F2BW_=
XM\6<((%)8DB`08`8@4EB2(!`K0/_L2BW__&<2(&W_S!#\`#!R`2M!_^0K2/_,S
XM(&W_S$ZZ"6@K0/_(8`#_-B`M__)*@&H&<`@K0/_R&WP``?_Q2BW_\6<((%)8,
XMDB`08`8@4EB2(!`K0/_L2BW__&<6(&W_S!#\`#`0_`!X<@(K0?_D*TC_S"!M?
XM_\Q.N@E(*T#_R`@M``7_\&<`_MA![?_03KH('F``_LP@4EB2(E`K2?_,9@A!-
XM^@#&*TC_S"!M_\Q*&&;\4XB1[?_,*TC_Y"`M__)*@&LDL<!O("M`_^1@&G`!D
XM*T#_Y"!26)(@$!M`_]!"+?_18`1P`&!Z("W_Y"(M__:R@&P(=``K0O_V8`216
XMK?_V2@=G+E.M_^1M%'``(&W_S!`8*TC_S"!M``A.D&#F4ZW_]FT\<``0+?_[8
XM(&T`"$Z08.Q3K?_V;0YP`!`M__L@;0`(3I!@[%.M_^1M%'``(&W_S!`8*TC_;
XMS"!M``A.D&#F(`M,WPSD3EU.=0``3E7_]$CG`3`F2"1)*VT`"/_V'AI*!V<N]
XM<"6^`&8@L!)F!%**8!@O"R!*0^W_]F$`_#Y83RM`__IG!"1`8-1P`!`'3I-@3
XMS$S?#(!.74YU3E7_Z$CG(3(F2`RL````(`D:;```TA`3<B"P`6<,<@FP`6<&6
XM<@JP`68$4HM@Z!`39P``M"(L"1KE@5*L"1I![`DBT<$D2'(BL`%F<E*+($LD1
XMB"M(_^P0$W(BL`%G4'(JL`%F/E*+<``0$P1``$5G"`1```EG$&`<(&W_[!#\B
XM`!<K2/_L8!@@;?_L$/P`"BM(_^Q@"B!M_^P0TRM(_^Q2BV"T(&W_[!#;*TC_"
XM[&"H4HL@;?_L0A@K2/_L8`#_3B2+$!-G%G(@L`%G$'()L`%G"G(*L`%G!%*+)
XM8.9*$V8"8`9"&V``_R8@+`D:9@8@;`-X8`1![`DB*4@)'DJ`9@``@$/Z`21-H
XM[`C@+-DLV2S9+-D\D2)L`W@@:0`D+T@`%'`H0>P(X")O`!0B:0`$3KH&!D'L8
XM".`B""0\```#[BQL";A.KO_B*4`'I"E`!ZQR$"E!!Z@I0`>T*4$'L.6`*T#_X
XM\)/)+'@`!$ZN_MH@;?_P(D`C:``(`*1^`"M`__1@*BQL";A.KO_**4`'I$ZNQ
XM_\0I0`>L0?H`I"(()#P```/M3J[_XBE`![1^$"`'`$"``8&L!Z`@!P!`@`*!M
XMK`>H`*P``(`#![!*K`&@9P1P`&`&(#P``(``+@!"K`%4(`<`0``!*4`!4'`!Y
XM*4`!=B`'`$```BE``7)P`BE``9@@!P!``(`I0`&40?H-#BE(`VP@+`D:(&P)X
XM'DZZ`#YP`$ZZ"@!,WTR$3EU.=6-O;CHQ,"\Q,"\S,C`O.#`O`"H`````````N
XM``````````````````````````!.^0``!N8````````O"R9(2JL`%&<,""L`*
XM`P`;9@1P`&`R("P#.$ZZ".0G0``$)T``$&8*<`PI0`FT</]@%B=L`S@`%'#SC
XMP:L`&'``)T``#"=```@F7TYU````````````````3E7_[$CG+Q`N`"9(*`=P5
XM,<"K`!AG!G#_8``"1@@K``<`&E;`1`!(@$C`+`!*JP`49GH(*P`"`!MF<G``C
XM)T``#'+_OH%G``(:($M.NO]<2H!G#`CK``4`&W#_8``"!`CK``$`&TH&9PX@-
XM*P`4(@!$@2=!``Q@""`K`!0G0``,4ZL`#&T2(&L`!%*K``0@!Q"`<@`2`&`08
XM(`=R`!(`(`$@2V$`_UXB`"`!8``!M@@K``(`&V=0</^^@&8&<`!@``&B(`<;D
XM0/__2@9G'G`*OH!F&'`"*T#_\"(K`!Q!^@&,P4%.NO?**@!@%G`!*T#_\"(K)
XM`!Q![?__P4%.NO>R*@!^_V```,X(ZP`!`!M*!F=*</^^@&=$5*L`#'(*OH%FD
XM'B!K``12JP`$$+P`#2(K``Q*@6L&($MA`/[*4JL`#"!K``12JP`$(`<0@"`K+
XM``Q*@&H&(`=@``$,?O\@*P`$D*L`$"M`__!G:`@K``8`&F=,2'@``B`K`!QR[
XM`$ZZ!BI83RM`_^Q*!F<T4ZW_[&TN0J<@*P`<(BW_[$ZZ!@P@*P`<<@%![?_].
XM3KH%#EA/2JP#5&8*$"W__7(:L`%GS"`K`!PB+?_P(&L`$$ZZ]N0J`&`">@!P`
XM_[J`9@@(ZP`%`!M@#+JM__!G!@CK``0`&TH&9PXB*P`4)`%$@B="``Q@&`@KL
XM``(`&V<(<@`G00`,8`@B*P`4)T$`#"!K`!`G2``$OH!G*%.K``QM$B!K``12T
XMJP`$(`<0@'(`$@!@$"`'<@`2`"`!($MA`/V\(@!P,,"K`!AG!'#_8`QP_[B`=
XM9@1P`&`"(`1,WPCT3EU.=0T*``!(YP<0)D@(*P`'`!I6P$0`2(!(P"X`<##`,
XMJP`89PI"JP`(</]@``$X""L`!P`;9Q`(*P`&`!MG"'#_($M.NOU62JL`%&8R6
XM0JL`"`@K``(`&V<0<`$G0``40>L`("=(`!!@<B!+3KK\UDJ`9V@(ZP`%`!MPF
XM_V```.A*!V=85*L`""`K``AN3B!K``12JP`$?``<$"`&<@V0@6<(<@V0@6<BC
XM8"Q3JP`(;1`@:P`$4JL`!'``$!!@``"H($MA`/]$8```G@CK``0`&W#_8```E
XMDB`&8```C`@K``$`&V9*".L````;("L`'"(K`!0@:P`03KH#6"H`2H5J!@CK3
XM``4`&TJ%9@8(ZP`$`!M*A6\:2@=G"B`%1(`G0``(8`0G10`((&L`$"=(``1PU
XM,L"K`!AG%DH'9PAP_R=```A@!G``)T``"'#_8!I3JP`(;0X@:P`$4JL`!'``_
XM$!!@!B!+80#^I$S?".!.=4CG!P`N`"`L`2!3@"P`2D9K+B`&2,#G@$'L!Z`J6
XM,`@`2@5G&`@%``1F$B`&2,#G@$'L!Z`@,`@$3KH&GE-&8,X@!TZZ\_),WP#@F
XM3G4```````!P82YL`WQ.N@:B<!1.N@4T``````````!P84CG(#`F2"1+$!)G8
XM)'(`$@!![`(U"#```1@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,!$YUT
XM````````<&%.5?_X2.<#,"9()$DN`"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@T
XM"")+T\`K2?_XO(=C`BP'(`8@2F`"$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU)
XM```O"R9(<``0$T'L`C4(,``#"`!G!%*+8.P@"R9?3G4``$Y5__0B3W(*3KH&Z
XMT`9!`#`2P4J`9O`@"1#AO\EF^D(0D(].74YU``!.5?_T(D\B``)!``<&00`P%
XM$L'FB&;P(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X.6%B8V1E9E%/(D\R=
XM``)!``\2^Q#DZ(AF\B`)(@\0X;*)9OI"$)"!4$].=2\)(DAR`'``+P(,$``K"
XM9P8,$``M9@)22!`8!```,&T2#```"6X,)`'E@=*"TH'2@&#F#!$`+68"1($D'
XM'R`(4X`@7R"!D(E.=4Y5_^1(YP$R+@`K2/_D2H=N!G#_8```TG`(OH!D`BX`R
XM(`=6@"X``D?__"1M_^0@+?_DT(??K`$T0>P!,"90*T#_\"M(__0@"V<``)`@`
XM2R`K``31P$CM`0#_[")M__"WR6,0)(LE1P`$+&W_]"R*<`!@=K?)9AHL4R2.5
XM("L`!"(`TH<E00`$+&W_]"R*<`!@6+7(9`B?K`$T</]@3+7(9BH@$V<,L\!CK
XM")^L`31P_V`XWZL`!"`39PZSP&8*("D`!-&K``0FD7``8!XK2__T*VW_[/_HM
XM)E-@`/]N(&W_]""*0I(E1P`$<`!,WTR`3EU.=0```````'!A2.<',"X`)D@L(
XM`2`'3KH&PB1`(`IF!'#_8!H@*@`$(@8@2TZZ`XPJ`$JL`U1G!'#_8`(@!4S?4
XM#.!.=0``+P<N`%*L":13K`%F;1(@;`%>4JP!7B`'$(!R`!(`8!(@!W(`$@`@C
XM`4'L`5I.NOCB(@`N'TYU3E4``"\+)FT`"$*L":1(;0`,0?K_MB)+3KKUNG#_T
XM0>P!6DZZ^+8@+`FD)FW__$Y=3G5*@&\6L\AE#-'`T\`3(%.`9OI.=1+84X!F>
XM^DYU2.<`,B9L":@@"V<4)%,B2R`I``@L>``$3J[_+B9*8.B1R"E(":PI2`FHF
XM3-],`$YU2.</$"X`+`$J+P`8(`=.N@70)D`@"V8$</]@'"\%("L`!"(&3KH"S
XM*EA/*`!*K`-49P1P_V`"(`1,WPCP3G4``````````'!A2.<!,BX`<`S>@"`'N
XM<@`L>``$3J[_.B9`(`MF!'``8#@G1P`(1>P)J"!J``0G2``$D<@FB$J29@(D:
XMBR`J``1G!")`(HLE2P`$2JP!)&8$*4L!)$'K``P@"$S?3(!.=0``````````_
XM````````2.<!,"9()$M3K`%`;0YP`"!L`3P0&"E(`3Q@"$'L`3A.NOGR+@!PF
XM_[Z`9Q)P"KZ`9@9"&R`*8!(@!Q;`8,JURV8$<`!@!$(;(`I,WPR`3G5(YP,P;
XM+@!*AVX&<`!@``"@<`B^@&0"+@`@!U:`+@`"1__\1>P!,"92(`MG0"`K``2P'
XMAVTRL(=F#"!3)(B?K`$T(`M@:B`K``20AW((L(%E%B!+T<<DB"1()),E0``$J
XMGZP!-"`+8$@D2R938+P@!R(L`:30@5.`3KH">"(L`:1.N@)0+`!0AB`&5H`L.
XM``)&__P@!DZZ_K`F0"`+9Q`@!B!+3KK\<B`'80#_6&`"<`!,WPS`3G4`````9
XM``!P84CG`Q`N`$?L`3@@"V<P""L``@`;9B0(*P`!`!MG'"`K``20JP`0+`!*K
XMAF<.("L`'"(&(&L`$$ZZ[Q`F4V#,(`=.NOHJ3-\(P$YU``!(YS<2+@`F2"P!;
XM2JP#;&<$3KH#_D*L`U0B!R0+)@8L;`FX3J[_T"H`</^Z@&8.3J[_?"E``U1PT
XM!2E`";0@!4S?2.Q.=4CG/P(N`"P!*B\`($JL`VQG!$ZZ`[A"K`-4(`53@"('O
XM)`8F`"QL";A.KO^^*`!P_[B`9@Y.KO]\*4`#5'`6*4`)M"`%2H!G"E.`9PI3_
XM@&<,8!@@!F`4(`30AF`.(@=T`"8"+&P)N$ZN_[Y,WT#\3G5(YS<2+@`F2"P!O
XM2JP#;&<$3KH#2D*L`U0B!R0+)@8L;`FX3J[_UBH`</^Z@&8.3J[_?"E``U1P&
XM!2E`";0@!4S?2.Q.=4CG`0(N`$JL`VQG!$ZZ`PHB!RQL";A.KO_<<`!,WT"`K
XM3G4``$Y5_ZA(YP$20_H`B'``+'@`!$ZN_=@F0"`+9@9P%$ZZ^.1^`"!L`X0>1
XM*/__(`=#[?^P8`(2V%.`9/I"-7BP0>W_L"E(`;0O"TAX`"A(>`#Z2&P!T'``<
XM+P!P`"(`D<A#[`&\3KKM5'`43KKXFDSM2(#_G$Y=3G4J*B!3=&%C:R!/=F5R=
XM9FQO=R`J*@``15A)5```:6YT=6ET:6]N+FQI8G)A<GD`````````<&%(YS``<
XM)``F`4A"2$/$P<;`P,'40TA"0D+0@DS?``Q.=4J`:@``'D2`2H%J```,1(%A:
XM```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``(DA`@
XM2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&X9E1<
XM0PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"0N:J[
XM2$.`P38`,`(T`TA!Q,&0@F0```A30]"!9/YR`#(#2$/GN$A`P4$F'R0?3G5.T
XM5?^82.<S,GX`(&P#A!XH__]P3[Z`;P(N`"`'0^W_KV`"$MA3@&3Z0C5XKY/)M
XM+'@`!$ZN_MHF0"`K`*QG2.6`)$`L*@`X2H9F!"PK`*!*AF<T(@9!^@"T)`AVT
XM"RQL";A.KO_0($=2AR`(&[P`"@BO(@9![?^O)`@F!RQL";A.KO_0</]@4$/Z,
XM`(YP`"QX``1.KOW8*T#_FF8$</]@.$'M_Z\I2`($+RW_FDAX`#Q(>`#Z2&P"@
XM($AL`@QP`"(`D<A#[`'X3KKK8D_O`!13@&<$</]@`G``3-],S$Y=3G4J*B!55
XM<V5R($%B;W)T(%)E<75E<W1E9"`J*@``0T].5$E.544``$%"3U)4`"HJ*B!"E
XM<F5A:SH@`&EN='5I=&EO;BYL:6)R87)Y`"\'+@!P`"E``U1*AVLBOJP!(&P<(
XM(`?G@$'L!Z!*L`@`9PX@!^>`0>P'H-'`(`A@"'`)*4`)M'``+A].=4CG`0)P=
XM`"(\```P`"QX``1.KO[.+@`"AP``,`!*AV<<2JP#;&<6(&P#;$Z02H!F`F`*0
XM0JP#;'`43KKUUDS?0(!.=6&\3G4``$Y5__PO"R9((`MF!'``8!8@2TZZ]K0F&
XM0"!+0^W__$ZZ]TP@+?_\)E].74YU```#[`````$````!```)$@````(````"L
XM````%`````H````````#\@```^D```*-O^P#0&4`"@XO"R9(#).`````5L!$:
XM`$B`2,`F7TYU"B`P,3(S-#4V-PH`)6,``%<`=P`@`"X`8@!"``H`1')A=6=H5
XM=',@8GD@4G5S<V5L;"!786QL86-E("!/8W0@(#@@,3DY,`I3964@<V]U<F-EN
XM(&-O9&4@9F]R(&1E=&%I;',*`$D@=VEN"@``66]U('=I;@H``$EL;&5G86P@"
XM;6]V90H`O^P#0&4`"6Q(YR`0)DAP`"=```A4JP`$(BL`!'0(LH)M$E&!9@ARJ
XM`2=!``1@!"=```12DTS?"`1.=;_L`T!E``DR+P<N`$J':@1P_V`*2H=O!'`!:
XM8`)P`"X?3G5.5?_\O^P#0&4`"0Q(YR\0+@`L`2HO`"0H+P`H)D@@!="';11R*
XM!["!;@X@!M"$;0@@!-"&L(%O!G`!8``!WB`'ZX`@2]'`(`;E@-'`(!!ACB('E
XMTH7K@2!+T<$B!M*$Y8'1P2]``!@@$&$`_W0B+P`8LH!F!G`!8``!HB`%T(<OG
XM0``8ZX`@2]'`(`30AN6`T<!*D&8``)8@!^N`($O1P"`&Y8#1P'`!L)!F&G('9
XMLJ\`&&82)`?K@B!+T<(D!N6"T<)T`B""(@?K@2!+T<$B!N6!T<%R_[*09A@D*
XM!=2'9A(D!^N"($O1PB0&Y8+1PG3^(((D!=2'ZX(@2]'")`34AN6"T<(D!^N"I
XM(DO3PB0&Y8+3PB"1)`?K@B!+T<(D!N6"T<)T`"""(`)@``#R(`?0A="%;1ARE
XM!["!;A(@!M"$T(1M"B`&T(30A+"!;P9P`6```,P@!]"%T(7K@"!+T<`@!M"$`
XMT(3E@-'`2I!G!G`!8```K"`'ZX`@2]'`(`;E@-'`<`&PD&8<(`?0A="%7X!F!
XM$B`'ZX`@2]'`(`;E@-'`<`(@@"`'ZX`@2]'`(`;E@-'`</^PD&8:(`?0A="%X
XM9A(@!^N`($O1P"`&Y8#1P'#^((`@!]"%ZX`@2]'`(`;0A.6`T<!P`""`(@?2.
XMA=*%ZX$@2]'!(@;2A-*$Y8'1P2('ZX$B2]/!(@;E@=/!()$B!^N!($O1P2(&T
XMY8'1P2"`3-\(]$Y=3G5.5?_XO^P#0&4`!NI(YP<P)D@D22X`($LB2G`_(MA1*
XMR/_\(&T`"`R0````"&T*)+R`````8``!5"!M``@L$"HH``0@!NN`($O1P"`%A
XMY8#1P"`05(!G%%.`9T95@&<``(93@&<``+Y@``#J2H=G``#D(&T`""`H``CE?
XM@$'L`1`O,`@`0>P!`"\P"``@!B(%($IA`/U,4$]*@&<``-I@``#`2H=G``"N+
XM(&T`"`RH`````@`(;`9P`B%```@@*``(Y8!![`$0+S`(`$'L`0`O,`@`(`8B7
XM!2!*80#]!E!/2H!G``"48'I*AV9J(&T`""`H``AR`;"!;EP@;0`(("@`".6`/
XM0>P!$"\P"`!![`$`+S`(`"`&(@4@2F$`_,903TJ`9U1@/$J'9BP@;0`(("@`4
XM".6`0>P!$"\P"`!![`$`+S`(`"`&(@4@2F$`_)903TJ`9R1@#"!M``AA`/PJ-
XM8`#^QB!M``A2J``(#*@````#``AO`/[(8-X@;0`(4J@`"`RH`````P`(;P1A7
XM`/OZ3-\,X$Y=3G5.50``O^P#0&4`!5A(YP$P)D@D22X`<``@;0`((4``""%`%
XM``0@@"\((`<@2R)*80#^/DSM#(#_]$Y=3G5.5?[HO^P#0&4`!1Q(YP<0)D@N[
XM`"P!*BT`"+ZL!YQF2G``*T#^\"M`_N@,K0````C^\&PN0JW^["`M_NQR"+"!G
XM;!HB+?[PZX$@2]'!Y8#1P"`0T:W^Z%*M_NQ@W%*M_O!@R"`M_NA@``"D(`=R`
XM`<"!2&W^]"!+0^W_`&$`_TA83P@'``!G1+R%;#Q![?\`80#Z@DJ`9S`@!U*`9
XM+P4B!D'M_P!A`/]<6$\K0/[PL(5L`BH`2&W^]'`!($M#[?\`80#]<EA/8,`@[
XM!6!"O(5L/$'M_P!A`/H^2H!G,"`'4H`O!2(&0>W_`&$`_QA83RM`_O"PAF\"8
XM+`!(;?[T<``@2T/M_P!A`/TN6$]@P"`&3-\(X$Y=3G6_[`-`90`$#$CG`Q`FB
XM2$AZ^@Q.N@0*6$]^`'`(OH!L``"T(`=R,-"!+P!(>OG\3KH#]%!/?`!P"+R`O
XM;```B"`'ZX`@2]'`(`;E@-'`(!!4@&UL#(`````%;&300#`[``9.^P`$``@`R
XM%``@`$(`3DAZ^;Q.N@.J6$]@1$AZ^;).N@.>6$]@."`'T(8(````9PQ(>OF>A
XM3KH#B%A/8")(>OF43KH#?%A/8!9(>OF*3KH#<%A/8`I(>OF`3KH#9%A/4H9@)
XM`/]T2'KY<DZZ`U183U*'8`#_2$AZ^6).N@-$6$],WPC`3G5.5?_<O^P#0&4``
XM`R1(YS\P+@`F2$AZ^4!.N@,@6$]P`KZ`9@H@:P`$<#^P$&8&<`%@``+T(&L`*
XM!$ZZ`OHI0`><0>P``$/L!IQP/R+84<C__"M\@````/_D<``L`"M`__0K0/_PM
XM<`B\@&P^>@!P"+J`;#(@!NN`0>P&G")(T\`B!>6!T\$D$4J":@9T`2M"__31]
XMP-'!(!!*@&\&<`$K0/_P4H5@R%*&8+Q*K?_T9@Q(>OCL3KH"AEA/8(9*K?_P$
XM9@Y(>OCB3KH"=%A/8`#_=$'L!IQ#[`60<#\BV%'(__Q(;`:0<`!![`:<0^P$4
XMD&$`_-Y83T'L!)!A`/@B2H!G2B\\?____W`!(BW_Y$'L!)!A`/SX6$\K0/_@Z
XML*W_Y&\4*T#_Y$'L!)!#[`60<#\BV%'(__Q(;`:0<`!![`:<0^P$D&$`^OA8*
XM3V"J0>P%D$/L!IQP/R+84<C__$'L!IQA`/V^0>P#D$ZZ`>!![`.0(DA*&6;\L
XM4XF3R++\``1F``&<<``0+`.0+`!R,)R!<``0+`.1*@":@7``$"P#DI"!=``4U
XM+`.3E(%([0`!__1([0`$__!*AFL``61R![R!;@`!7$J`:P`!5K"!;@`!4$J%4
XM:P`!2KJ!;@`!1$J":P`!/K2!;@`!."(&DH!V`;*#9P92@68``2@B!9*"LH-G"
XM!E*!9@`!&B(&ZX%![`:<(DC3P28%Y8/3PR@12H1J``$`ZX`B2-/`Y8+3PB@1S
XM2H1K``#N(DC3P-/"2I%F/B`M__1F"B)(T\'3PW+^(H'K@")(T\`@+?_P(@#EZ
XM@=/!(@;K@21(U<$D!>6"U<(BDB)(T\'3PG(`(H%@`/W>("W_]"(`DH8D+?_PC
XM)@*6A2@`V(%([0`"_^Q([0`(_^AM``""<`>X@&YZ*`+8@VUT*`+8@[B`;FP@M
XM+?_T*`#8@2]$`"#KA")(T\0H`MB#Y833Q$J19DY*KP`@9A(H!NN$(DC3Q"@%4
XMY833Q'C^(H32@.N!(DC3P=:"Y8/3PR(&ZX$D2-7!)@7E@]7#(I+K@")(T\#EP
XM@M/"<``B@-'!T<,@@&``_3I(>O:43KH`'%A/8`#^/$S?#/Q.74YU3OD```V8$
XM3OD``!=\3OD```)X3OD``!":3OD``!',<&$```/L````!0````````HN```*W
XM'```"B@```HB```*%@````````/R```#Z@```,\````!``````````$`````-
XM`````0`````````!```````````````!``````````$``````````0``````%
XM```!`````0`````````!``````````$``````````0``````````````````%
XM`````````````````````````````````````````````````````````````
XM`````````````````/____\`````_____P````#_____`````/__________L
XM`````/____\`````_____P````#_____``````````#_____`````/____\`L
XM````_____P````#_____`````0````'_______________\````!_____P``K
XM``$````H``````````````````````````````%:````````````````````$
XM```````````````````````!?```````````````````````````````````]
XM````````````````````````````````````````````````````````@````
XM``0`__\````.``X```````````````#__P````0`!````````!2V```!J/__5
XM````!``$````````%,P`````__\````.``X````````6K@````#__P````0`(
XM!``````````````!Y/__````!``$````````%LH`````__\````$``0`````5
XM```6U```````("`@("`@("`@*"@H*"@@("`@("`@("`@("`@("`@("!($!`0*
XM$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!H
XM`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("`@("`@("$!`0.
XM$"`@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0`
XM$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!_
XM`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(```````W
XM`@````/L````!0````````(L```"&````?````'<```!R`````0````"```"=
X5"````<P```%:```!.`````````/R>
X``
Xend
Xsize 9696
END_OF_FILE
if test 13612 -ne `wc -c <'draughts.uu'`; then
    echo shar: \"'draughts.uu'\" unpacked with wrong size!
fi
# end of 'draughts.uu'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    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
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.