Определите некоторые константы и некоторые макросы:
#define GRID_SIZE 36.0f
#define GRID_MAX_COLUMNS 4
#define GRID_MAX_ROWS 4
#define RAND_COLUMN() (arc4random()%GRID_MAX_COLUMNS)
#define RAND_ROW() (arc4random()%GRID_MAX_ROWS)
Подкласс CCSprite:
@interface GridSprite : CCSprite {
int column_;
int row_;
}
@property (nonatomic, assign) int column;
@property (nonatomic, assign) int row;
@property (nonatomic, key) NSString* key;
- (void) reposition;
@end
@implementation GridSprite
@synthesize column=column_, row=row_;
- (void) reposition {
CGPoint position = ccp(column_ * GRID_SIZE, row_ * GRID_SIZE);
self.position = position;
}
- (NSString*) key {
return [NSString stringWithFormat:@"%dx%d", column_, row_];
}
@end
Теперь в коде вашей игры:
- (void) setupBoard {
NSMutableArray* pieces = [NSMutableArray alloc] init];
NSMutableDictionary* piecesByKey = [NSMutableDictionary alloc] init];
GridSprite* piece;
uint i, ic = GRID_MAX_COLUMNS * GRID_MAX_ROWS;
for (i=0; i<ic; i++) {
piece = [GridSprite node];
piece.anchorPosition = CGPointZero;
while (1) {
piece.column = RAND_COLUMN();
piece.row = RAND_ROW();
if ([piecesByKey objectForKey:piece.key] == nil) break;
}
[piece reposition];
[pieces addObject:piece];
[pieces setObject:piece forKey:piece.key];
}
}
Это создастслучайно посеянная доска любого размера сетки.Вы, конечно, захотите сохранить кусочки и кускиByKey в качестве переменных класса.