make game saving and restoring rational
[unix-history] / usr / src / games / backgammon / common_source / check.c
CommitLineData
e1105a5b 1static char sccsid[] = " check.c 4.1 82/05/11 ";
4980a535
RH
2
3#include "back.h"
4
5getmove () {
6 register int i, c;
7
8 c = 0;
9 for (;;) {
10 i = checkmove(c);
11
12 switch (i) {
13 case -1:
14 if (movokay(mvlim)) {
15 if (tflag)
16 curmove (20,0);
17 else
18 writec ('\n');
19 for (i = 0; i < mvlim; i++)
20 if (h[i])
21 wrhit(g[i]);
22 nexturn();
23 if (*offopp == 15)
24 cturn *= -2;
25 if (tflag && pnum)
26 bflag = pnum;
27 return;
28 }
29
30 case -4:
31 case 0:
32 if (tflag)
33 refresh();
34 if (i != 0 && i != -4)
35 break;
36 if (tflag)
37 curmove (20,0);
38 else
39 writec ('\n');
40 writel (*Colorptr);
41 if (i == -4)
42 writel (" must make ");
43 else
44 writel (" can only make ");
45 writec (mvlim+'0');
46 writel (" move");
47 if (mvlim > 1)
48 writec ('s');
49 writec ('.');
50 writec ('\n');
51 break;
52
53 case -3:
54 if (quit())
55 return;
56 }
57
58 if (! tflag)
59 proll ();
60 else {
61 curmove (cturn == -1? 18: 19,39);
62 cline ();
63 c = -1;
64 }
65 }
66}
67\f
68movokay (mv)
69register int mv;
70
71{
72 register int i, m;
73
74 if (d0)
75 swap;
76
77 for (i = 0; i < mv; i++) {
78
79 if (p[i] == g[i]) {
80 moverr (i);
81 curmove (20,0);
82 writel ("Attempt to move to same location.\n");
83 return (0);
84 }
85
86 if (cturn*(g[i]-p[i]) < 0) {
87 moverr (i);
88 curmove (20,0);
89 writel ("Backwards move.\n");
90 return (0);
91 }
92
93 if (abs(board[bar]) && p[i] != bar) {
94 moverr (i);
95 curmove (20,0);
96 writel ("Men still on bar.\n");
97 return (0);
98 }
99
100 if ( (m = makmove(i)) ) {
101 moverr (i);
102 switch (m) {
103
104 case 1:
105 writel ("Move not rolled.\n");
106 break;
107
108 case 2:
109 writel ("Bad starting position.\n");
110 break;
111
112 case 3:
113 writel ("Destination occupied.\n");
114 break;
115
116 case 4:
117 writel ("Can't remove men yet.\n");
118 }
119 return (0);
120 }
121 }
122 return (1);
123}