1 /* 2 * Copyright (c) 1980, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 static char sccsid[] = "@(#)odds.c 8.1 (Berkeley) 05/31/93"; 10 #endif /* not lint */ 11 12 #include "back.h" 13 14 odds (r1,r2,val) 15 register int r1; 16 int r2, val; 17 { 18 register int i, j; 19 20 if (r1 == 0) { 21 for (i = 0; i < 6; i++) 22 for (j = 0; j < 6; j++) 23 table[i][j] = 0; 24 return; 25 } else { 26 r1--; 27 if (r2-- == 0) 28 for (i = 0; i < 6; i++) { 29 table[i][r1] += val; 30 table[r1][i] += val; 31 } 32 else { 33 table[r2][r1] += val; 34 table[r1][r2] += val; 35 } 36 } 37 } 38 39 count () { 40 register int i; 41 register int j; 42 register int total; 43 44 total = 0; 45 for (i = 0; i < 6; i++) 46 for (j = 0; j < 6; j++) 47 total += table[i][j]; 48 return (total); 49 } 50 51 canhit (i,c) 52 int i, c; 53 54 { 55 register int j, k, b; 56 int a, d, diff, place, addon, menstuck; 57 58 if (c == 0) 59 odds (0,0,0); 60 if (board[i] > 0) { 61 a = -1; 62 b = 25; 63 } else { 64 a = 1; 65 b = 0; 66 } 67 place = abs (25-b-i); 68 menstuck = abs (board[b]); 69 for (j = b; j != i; j += a) { 70 if (board[j]*a > 0) { 71 diff = abs(j-i); 72 addon = place+((board[j]*a > 2 || j == b)? 5: 0); 73 if ((j == b && menstuck == 1) && 74 (j != b && menstuck == 0)) 75 for (k = 1; k < diff; k++) 76 if (k < 7 && diff-k < 7 && 77 (board[i+a*k]*a >= 0 || 78 board[i+a*(diff-k)] >= 0)) 79 odds (k,diff-k,addon); 80 if ((j == b || menstuck < 2) && diff < 7) 81 odds (diff,0,addon); 82 } 83 if (j == b && menstuck > 1) 84 break; 85 } 86 return (count()); 87 } 88