// // SabotageGame.m // Gridlock // // Created by Brian on 3/27/05. // Copyright 2005 __MyCompanyName__. All rights reserved. // #import "SabotageGame.h" @implementation SabotageGame -(void)reset { [super reset]; [self createGridFromConfiguration]; } -(DCHypergridPosition *)goalPositionForPlayer:(int)pnum { NSString *key = (pnum==1) ? @"p1Goal" : @"p2Goal"; NSArray *coords = [[self configurationInfo] objectForKey:key]; return [DCHypergridPosition positionWithRow:[[coords objectAtIndex:0] intValue] column:[[coords objectAtIndex:1] intValue]]; } -(int)playerWithGoalPosition:(DCHypergridPosition *)pos { int i; for(i=1; i<=[self numberOfPlayers]; i++) { if ([pos isEqual:[self goalPositionForPlayer:i]]) return i; } return 0; } -(int)rangeForPieceAtPosition:(DCHypergridPosition *)pos { int range=0; int c = [pos column]; int r; for(r=0; r<[self numberOfRows]; r++) { int value = [self valueAtRow:r column:c]; if (value==1 || value==2 || value==-1 || value==-2) ++range; } return range; } -(void)appendValidMovesFromPosition:(DCHypergridPosition *)pos forPlayer:(int)pnum intoArray:(NSMutableArray *)moves { int range = [self rangeForPieceAtPosition:pos]; int r = [pos row]; int c = [pos column]; int dr,dc; for(dr=-1; dr<=+1; dr++) { for(dc=-1; dc<=+1; dc++) { if (dr!=0 || dc!=0) { // destination must be empty, enemy, or neutral king if ([self isValidRow:r+range*dr column:c+range*dc]) { if (abs([self valueAtRow:r+range*dr column:c+range*dc])!=pnum) { // destination is valid, path must be clear BOOL good = YES; int d; for(d=1; d