|
|
1.1 root 1: static char sccsid[] = " one.c 4.1 82/05/11 ";
2:
3: #include "back.h"
4:
5: makmove (i)
6: register int i;
7:
8: {
9: register int n, d;
10: int max;
11:
12: d = d0;
13: n = abs(g[i]-p[i]);
14: max = (*offptr < 0? 7: last());
15: if (board[p[i]]*cturn <= 0)
16: return (checkd(d)+2);
17: if (g[i] != home && board[g[i]]*cturn < -1)
18: return (checkd(d)+3);
19: if (i || D0 == D1) {
20: if (n == max? D1 < n: D1 != n)
21: return (checkd(d)+1);
22: } else {
23: if (n == max? D0 < n && D1 < n: D0 != n && D1 != n)
24: return (checkd(d)+1);
25: if (n == max? D0 < n: D0 != n) {
26: if (d0)
27: return (checkd(d)+1);
28: swap;
29: }
30: }
31: if (g[i] == home && *offptr < 0)
32: return (checkd(d)+4);
33: h[i] = 0;
34: board[p[i]] -= cturn;
35: if (g[i] != home) {
36: if (board[g[i]] == -cturn) {
37: board[home] -= cturn;
38: board[g[i]] = 0;
39: h[i] = 1;
40: if (abs(bar-g[i]) < 7) {
41: (*inopp)--;
42: if (*offopp >= 0)
43: *offopp -= 15;
44: }
45: }
46: board[g[i]] += cturn;
47: if (abs(home-g[i]) < 7 && abs(home-p[i]) > 6) {
48: (*inptr)++;
49: if (*inptr+*offptr == 0)
50: *offptr += 15;
51: }
52: } else {
53: (*offptr)++;
54: (*inptr)--;
55: }
56: return (0);
57: }
58:
59: moverr (i)
60: register int i;
61:
62: {
63: register int j;
64:
65: if (tflag)
66: curmove (20,0);
67: else
68: writec ('\n');
69: writel ("Error: ");
70: for (j = 0; j <= i; j++) {
71: wrint (p[j]);
72: writec ('-');
73: wrint (g[j]);
74: if (j < i)
75: writec (',');
76: }
77: writel ("... ");
78: movback (i);
79: }
80:
81:
82: checkd (d)
83: register int d;
84:
85: {
86: if (d0 != d)
87: swap;
88: return (0);
89: }
90:
91: last () {
92: register int i;
93:
94: for (i = home-6*cturn; i != home; i += cturn)
95: if (board[i]*cturn > 0)
96: return (abs(home-i));
97: }
98:
99: movback (i)
100: register int i;
101:
102: {
103: register int j;
104:
105: for (j = i-1; j >= 0; j--)
106: backone(j);
107: }
108:
109: backone (i)
110: register int i;
111:
112: {
113: board[p[i]] += cturn;
114: if (g[i] != home) {
115: board[g[i]] -= cturn;
116: if (abs(g[i]-home) < 7 && abs(p[i]-home) > 6) {
117: (*inptr)--;
118: if (*inptr+*offptr < 15 && *offptr >= 0)
119: *offptr -= 15;
120: }
121: } else {
122: (*offptr)--;
123: (*inptr)++;
124: }
125: if (h[i]) {
126: board[home] += cturn;
127: board[g[i]] = -cturn;
128: if (abs(bar-g[i]) < 7) {
129: (*inopp)++;
130: if (*inopp+*offopp == 0)
131: *offopp += 15;
132: }
133: }
134: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.