This is WagmanComp.m in view mode; [Download] [Up]
/* * Stratgey: Wagman * Description: Try to maximize number of protected pieces * (pieces with a mimimal number of open adjacent sqaures) * Also try to keep pieces in lower left hand corner of * the playing board (why???) * Author: Mat Hostetter (rewritten by Erik_Kay@next.com) */ #import "WagmanComp.h" #include <math.h> @implementation WagmanComp + (const char *)strategyName { return "Wagman"; } - (int)scoreBoard:(Board *)b forPlayer:(square_state)type { int x1,y1,x,y, res = 0, pieceval, radius, penalty; int cols, rows; square_state s1; const int radial_weight = 3; cols = [b cols]; rows = [b rows]; radius = cols * cols + rows * rows / 4; for (x1 = 0; x1 < cols; x1++) for (y1 = 0; y1 < rows; y1++) { s1 = b->board[x1 + y1 * cols]; if (s1 < SQUARE_ONE) continue; pieceval = 10 + radial_weight * (((x1-cols/2)^2) + ((y1-rows/2)^2)) / radius; res += ((s1 == type) ? pieceval : -pieceval); penalty = 0; for (x = MAX(x1 - 1, 0); x <= MIN(x1 + 1, cols - 1); x++) for (y = MAX(y1 - 1, 0); y <= MIN(y1 + 1, rows - 1); y++) if (b->board[x + y * cols] == SQUARE_EMPTY) penalty++; if (penalty > 5) penalty = 5; if (penalty == 0) penalty = -10; res -= ((s1 == type) ? penalty : -penalty); } return res; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.