This is DensityComp.m in view mode; [Download] [Up]
/* * Stratgey: Density * Description: attempt to maintain a high density of pieces * Note: this one could use a lot of work * Author: Erik_Kay@next.com */ #import "DensityComp.h" @implementation DensityComp + (const char *)strategyName { return "Density"; } - (int)scoreBoard:(Board *)b forPlayer:(square_state)type { int minx = 0,miny = 0,maxx = 1,maxy = 1,x,y,sc; int cols,rows, width, height; float dens; cols = [b cols]; rows = [b rows]; for (y = 0; y < rows; y++) { for (x = 0; x < cols; x++) { if (b->board[x + y * cols] == type) { miny = y; break; } } if (x < cols) break; } for (y = rows - 1; y >= 0; y--) { for (x = 0; x < cols; x++) { if (b->board[x + y * cols] == type) { maxy = y; break; } } if (x < cols) break; } for (x = 0; x < cols; x++) { for (y = 0; y < rows; y++) { if (b->board[x + y * cols] == type) { minx = x; break; } } if (x < cols) break; } for (x = cols - 1; x >= 0; x++) { for (y = 0; y < rows; y++) { if (b->board[x + y * cols] == type) { maxx = x; break; } } if (x < cols) break; } dprintf (("(%d,%d)x(%d,%d) : ",minx,miny,maxx,maxy)); width = 1 + maxx - minx; height = 1 + maxy - miny; dens = ((float)[b numberOfPiece:type] / (float)((width * height))); sc = dens * MIN(width,height) * MIN(cols,rows) + ([b numberOfPiece:type] - [b numberOfPiece:OTHER_PLAYER(type)]); dprintf (("score: %d (%d,%d) to (%d,%d)\n",sc, b->currentMove.from.col, b->currentMove.from.row, b->currentMove.to.col, b->currentMove.to.row)); return sc; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.