|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 2547 (0x9f3) Types: TextFile Names: »score.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Othello/score.c«
/* * score.c * * score a board position */ # include "reversi.h" #ifdef SDEBUG extern int sdebug; #endif boardT base = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, -10, -5, -5, -10, -40, 0, 0, 0, 0, -10, 3, 1, 1, 3, -10, 0, 0, 0, 0, -5, 1, 0, 0, 1, -5, 0, 0, 0, 0, -5, 1, 0, 0, 1, -5, 0, 0, 0, 0, -10, 3, 1, 1, 3, -10, 0, 0, 0, 0, -40, -10, -5, -5, -10, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short edgemod[10][3] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -10, 5, 5, -5, 5, 5, -5, 5, 5, -10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; extern short cornerscores[3][3][3][3]; extern short edgescores[6561]; # define edgesc(a,b,c,d,e,f,g,h) edgescores[a*2187 + b*729 + c*243 + \ d*81 + e*27 + f*9 + g*3 + h + 3280] score (board, player) register boardT board; int player; { register char *j, *b; char *l; register int score; int i; int n, m; #ifdef SDEBUG if (sdebug) { display (board); } #endif score = 0; for (i = 3; i < SIZE - 1; i++) { j = & board[i][3]; b = & base [i][3]; l = & board[i][SIZE-1]; while (j != l) { n = *j++; score += n * *b++; } score += board[2][i] * edgemod[i][board[1][i]+1]; score += board[SIZE-1][i] * edgemod[i][board[SIZE][i]+1]; score += board[i][2] * edgemod[i][board[i][1]+1]; score += board[i][SIZE-1] * edgemod[i][board[i][SIZE]+1]; } score += cornerscores[board[1][1] + 1] [board[1][2] + 1] [board[2][1] + 1] [board[2][2] + 1] + cornerscores[board[1][8] + 1] [board[1][7] + 1] [board[2][8] + 1] [board[2][7] + 1] + cornerscores[board[8][1] + 1] [board[8][2] + 1] [board[7][1] + 1] [board[7][2] + 1] + cornerscores[board[8][8] + 1] [board[8][7] + 1] [board[7][8] + 1] [board[7][7] + 1]; score += edgesc (board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7], board[1][8]) + edgesc (board[8][1], board[8][2], board[8][3], board[8][4], board[8][5], board[8][6], board[8][7], board[8][8]); score += edgesc (board[1][1], board[2][1], board[3][1], board[4][1], board[5][1], board[6][1], board[7][1], board[8][1]) + edgesc (board[1][8], board[2][8], board[3][8], board[4][8], board[5][8], board[6][8], board[7][8], board[8][8]); #ifdef SDEBUG if (sdebug) printf ("score: %d\n", score); #endif return score * player; }