Commit | Line | Data |
---|---|---|
2e451ce8 RH |
1 | static char sccsid[] = " allow.c 1.1 82/05/11 "; |
2 | ||
3 | #include "back.h" | |
4 | ||
5 | movallow () { | |
6 | ||
7 | register int i, m, iold; | |
8 | int r; | |
9 | ||
10 | if (d0) | |
11 | swap; | |
12 | m = (D0 == D1? 4: 2); | |
13 | for (i = 0; i < 4; i++) | |
14 | p[i] = bar; | |
15 | i = iold = 0; | |
16 | while (i < m) { | |
17 | if (*offptr == 15) | |
18 | break; | |
19 | h[i] = 0; | |
20 | if (board[bar]) { | |
21 | if (i == 1 || m == 4) | |
22 | g[i] = bar+cturn*D1; | |
23 | else | |
24 | g[i] = bar+cturn*D0; | |
25 | if (r = makmove(i)) { | |
26 | if (d0 || m == 4) | |
27 | break; | |
28 | swap; | |
29 | movback (i); | |
30 | if (i > iold) | |
31 | iold = i; | |
32 | for (i = 0; i < 4; i++) | |
33 | p[i] = bar; | |
34 | i = 0; | |
35 | } else | |
36 | i++; | |
37 | continue; | |
38 | } | |
39 | if ((p[i] += cturn) == home) { | |
40 | if (i > iold) | |
41 | iold = i; | |
42 | if (m == 2 && i) { | |
43 | movback(i); | |
44 | p[i--] = bar; | |
45 | if (p[i] != bar) | |
46 | continue; | |
47 | else | |
48 | break; | |
49 | } | |
50 | if (d0 || m == 4) | |
51 | break; | |
52 | swap; | |
53 | movback (i); | |
54 | for (i = 0; i < 4; i++) | |
55 | p[i] = bar; | |
56 | i = 0; | |
57 | continue; | |
58 | } | |
59 | if (i == 1 || m == 4) | |
60 | g[i] = p[i]+cturn*D1; | |
61 | else | |
62 | g[i] = p[i]+cturn*D0; | |
63 | if (g[i]*cturn > home) { | |
64 | if (*offptr >= 0) | |
65 | g[i] = home; | |
66 | else | |
67 | continue; | |
68 | } | |
69 | if (board[p[i]]*cturn > 0 && (r = makmove(i)) == 0) | |
70 | i++; | |
71 | } | |
72 | movback (i); | |
73 | return (iold > i? iold: i); | |
74 | } |