|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char sccsid[] = "@(#)one.c 5.3 (Berkeley) 6/18/88"; ! 20: #endif /* not lint */ ! 21: ! 22: #include "back.h" ! 23: ! 24: makmove (i) ! 25: register int i; ! 26: ! 27: { ! 28: register int n, d; ! 29: int max; ! 30: ! 31: d = d0; ! 32: n = abs(g[i]-p[i]); ! 33: max = (*offptr < 0? 7: last()); ! 34: if (board[p[i]]*cturn <= 0) ! 35: return (checkd(d)+2); ! 36: if (g[i] != home && board[g[i]]*cturn < -1) ! 37: return (checkd(d)+3); ! 38: if (i || D0 == D1) { ! 39: if (n == max? D1 < n: D1 != n) ! 40: return (checkd(d)+1); ! 41: } else { ! 42: if (n == max? D0 < n && D1 < n: D0 != n && D1 != n) ! 43: return (checkd(d)+1); ! 44: if (n == max? D0 < n: D0 != n) { ! 45: if (d0) ! 46: return (checkd(d)+1); ! 47: swap; ! 48: } ! 49: } ! 50: if (g[i] == home && *offptr < 0) ! 51: return (checkd(d)+4); ! 52: h[i] = 0; ! 53: board[p[i]] -= cturn; ! 54: if (g[i] != home) { ! 55: if (board[g[i]] == -cturn) { ! 56: board[home] -= cturn; ! 57: board[g[i]] = 0; ! 58: h[i] = 1; ! 59: if (abs(bar-g[i]) < 7) { ! 60: (*inopp)--; ! 61: if (*offopp >= 0) ! 62: *offopp -= 15; ! 63: } ! 64: } ! 65: board[g[i]] += cturn; ! 66: if (abs(home-g[i]) < 7 && abs(home-p[i]) > 6) { ! 67: (*inptr)++; ! 68: if (*inptr+*offptr == 0) ! 69: *offptr += 15; ! 70: } ! 71: } else { ! 72: (*offptr)++; ! 73: (*inptr)--; ! 74: } ! 75: return (0); ! 76: } ! 77: ! 78: moverr (i) ! 79: register int i; ! 80: ! 81: { ! 82: register int j; ! 83: ! 84: if (tflag) ! 85: curmove (20,0); ! 86: else ! 87: writec ('\n'); ! 88: writel ("Error: "); ! 89: for (j = 0; j <= i; j++) { ! 90: wrint (p[j]); ! 91: writec ('-'); ! 92: wrint (g[j]); ! 93: if (j < i) ! 94: writec (','); ! 95: } ! 96: writel ("... "); ! 97: movback (i); ! 98: } ! 99: ! 100: ! 101: checkd (d) ! 102: register int d; ! 103: ! 104: { ! 105: if (d0 != d) ! 106: swap; ! 107: return (0); ! 108: } ! 109: ! 110: last () { ! 111: register int i; ! 112: ! 113: for (i = home-6*cturn; i != home; i += cturn) ! 114: if (board[i]*cturn > 0) ! 115: return (abs(home-i)); ! 116: } ! 117: ! 118: movback (i) ! 119: register int i; ! 120: ! 121: { ! 122: register int j; ! 123: ! 124: for (j = i-1; j >= 0; j--) ! 125: backone(j); ! 126: } ! 127: ! 128: backone (i) ! 129: register int i; ! 130: ! 131: { ! 132: board[p[i]] += cturn; ! 133: if (g[i] != home) { ! 134: board[g[i]] -= cturn; ! 135: if (abs(g[i]-home) < 7 && abs(p[i]-home) > 6) { ! 136: (*inptr)--; ! 137: if (*inptr+*offptr < 15 && *offptr >= 0) ! 138: *offptr -= 15; ! 139: } ! 140: } else { ! 141: (*offptr)--; ! 142: (*inptr)++; ! 143: } ! 144: if (h[i]) { ! 145: board[home] += cturn; ! 146: board[g[i]] = -cturn; ! 147: if (abs(bar-g[i]) < 7) { ! 148: (*inopp)++; ! 149: if (*inopp+*offopp == 0) ! 150: *offopp += 15; ! 151: } ! 152: } ! 153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.