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[] = "@(#)odds.c 5.3 (Berkeley) 06/18/88"; 20 #endif /* not lint */ 21 22 #include "back.h" 23 24 odds (r1,r2,val) 25 register int r1; 26 int r2, val; 27 { 28 register int i, j; 29 30 if (r1 == 0) { 31 for (i = 0; i < 6; i++) 32 for (j = 0; j < 6; j++) 33 table[i][j] = 0; 34 return; 35 } else { 36 r1--; 37 if (r2-- == 0) 38 for (i = 0; i < 6; i++) { 39 table[i][r1] += val; 40 table[r1][i] += val; 41 } 42 else { 43 table[r2][r1] += val; 44 table[r1][r2] += val; 45 } 46 } 47 } 48 49 count () { 50 register int i; 51 register int j; 52 register int total; 53 54 total = 0; 55 for (i = 0; i < 6; i++) 56 for (j = 0; j < 6; j++) 57 total += table[i][j]; 58 return (total); 59 } 60 61 canhit (i,c) 62 int i, c; 63 64 { 65 register int j, k, b; 66 int a, d, diff, place, addon, menstuck; 67 68 if (c == 0) 69 odds (0,0,0); 70 if (board[i] > 0) { 71 a = -1; 72 b = 25; 73 } else { 74 a = 1; 75 b = 0; 76 } 77 place = abs (25-b-i); 78 menstuck = abs (board[b]); 79 for (j = b; j != i; j += a) { 80 if (board[j]*a > 0) { 81 diff = abs(j-i); 82 addon = place+((board[j]*a > 2 || j == b)? 5: 0); 83 if ((j == b && menstuck == 1) && 84 (j != b && menstuck == 0)) 85 for (k = 1; k < diff; k++) 86 if (k < 7 && diff-k < 7 && 87 (board[i+a*k]*a >= 0 || 88 board[i+a*(diff-k)] >= 0)) 89 odds (k,diff-k,addon); 90 if ((j == b || menstuck < 2) && diff < 7) 91 odds (diff,0,addon); 92 } 93 if (j == b && menstuck > 1) 94 break; 95 } 96 return (count()); 97 } 98