wnj changes
[unix-history] / usr / src / games / backgammon / teachgammon / tutor.c
CommitLineData
e1105a5b 1static char sccsid[] = " tutor.c 4.1 82/05/11 ";
4d11daa4
RH
2
3#include "back.h"
4#include "tutor.h"
5
6extern int maxmoves;
7extern char *finis[];
8
9extern struct situatn test[];
10
11static char better[] = "That is a legal move, but there is a better one.\n";
12
13tutor () {
14 register int i, j;
15
16 i = 0;
17 begscr = 18;
18 cturn = -1;
19 home = 0;
20 bar = 25;
21 inptr = &in[0];
22 inopp = &in[1];
23 offptr = &off[0];
24 offopp = &off[1];
25 Colorptr = &color[0];
26 colorptr = &color[2];
27 colen = 5;
28 wrboard();
29
30 while (1) {
31 if (! brdeq(test[i].brd,board)) {
32 if (tflag && curr == 23)
33 curmove (18,0);
34 writel (better);
35 nexturn();
36 movback (mvlim);
37 if (tflag) {
38 refresh();
39 clrest ();
40 }
41 if ((! tflag) || curr == 19) {
42 proll();
43 writec ('\t');
44 }
45 else
46 curmove (curr > 19? curr-2: curr+4,25);
47 getmove();
48 if (cturn == 0)
49 leave();
50 continue;
51 }
52 if (tflag)
53 curmove (18,0);
54 text (*test[i].com);
55 if (! tflag)
56 writec ('\n');
57 if (i == maxmoves)
58 break;
59 D0 = test[i].roll1;
60 D1 = test[i].roll2;
61 d0 = 0;
62 mvlim = 0;
63 for (j = 0; j < 4; j++) {
64 if (test[i].mp[j] == test[i].mg[j])
65 break;
66 p[j] = test[i].mp[j];
67 g[j] = test[i].mg[j];
68 mvlim++;
69 }
70 if (mvlim)
71 for (j = 0; j < mvlim; j++)
72 if (makmove(j))
73 writel ("AARGH!!!\n");
74 if (tflag)
75 refresh();
76 nexturn();
77 D0 = test[i].new1;
78 D1 = test[i].new2;
79 d0 = 0;
80 i++;
81 mvlim = movallow();
82 if (mvlim) {
83 if (tflag)
84 clrest();
85 proll();
86 writec('\t');
87 getmove();
88 if (tflag)
89 refresh();
90 if (cturn == 0)
91 leave();
92 }
93 }
94 leave();
95}
96
97clrest () {
98 register int r, c, j;
99
100 r = curr;
101 c = curc;
102 for (j = r+1; j < 24; j++) {
103 curmove (j,0);
104 cline();
105 }
106 curmove (r,c);
107}
108
109brdeq (b1,b2)
110register int *b1, *b2;
111
112{
113 register int *e;
114
115 e = b1+26;
116 while (b1 < e)
117 if (*b1++ != *b2++)
118 return(0);
119 return(1);
120}