This is ProtectComp.m in view mode; [Download] [Up]
/* * Stratgey: Protect * Description: greedy + try to maximize number of protected pieces * (pieces with a mimimal number of open adjacent sqaures) * Author: Erik_Kay@next.com (ideas taken from Wagman by Mat Hostetter) */ #import "ProtectComp.h" @implementation ProtectComp + (const char *)strategyName { return "Protect"; } -(int)scoreBoard:(Board *)b forPlayer:(square_state)player { int x1,y1,x,y, score = 0, penalty; int cols, rows; square_state piece; score = 10 * ([b numberOfPiece:player] - [b numberOfPiece:OTHER_PLAYER(player)]); cols = [b cols]; rows = [b rows]; for (x1 = 0; x1 < cols; x1++) for (y1 = 0; y1 < rows; y1++) { piece = b->board[x1 + y1 * cols]; // we only care about squares that have player pieces in them if ((piece != SQUARE_ONE) && (piece != SQUARE_TWO)) continue; 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; score -= ((piece == player) ? penalty : -penalty); } return score; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.