Reputation: 11
right now i need a advice how to code a code.
I have 4 sprites in a 2x2 arrangement. all the sprite is different. How can i random/mix the position when i load the layer?
So far I have done this code. Is there a simpler way or this method im using is correct? I have plans to load more sprites in 5X5 arrangement.
CGPoint grid1 =ccp(60,210);
CGPoint grid2 =ccp(60,280);
CGPoint grid3 =ccp(180,210);
CGPoint grid4 =ccp(180,280);
sprite1 =[CCSprite spriteWithFile:@"sprite1"];
sprite2 =[CCSprite spriteWithFile:@"sprite2"];
sprite3 =[CCSprite spriteWithFile:@"sprite3"];
sprite4 =[CCSprite spriteWithFile:@"sprite4"];
int randomLocation = (arc4random() % 4) + 1;
switch(randomLocation)
{
case 1:
sprite1.position=grid1;
sprite1.position=grid2;
sprite1.position=grid3;
sprite1.position=grid4;
break;
case 2:
sprite1.position=grid2;
sprite1.position=grid3;
sprite1.position=grid1;
sprite1.position=grid4;
break;
case 3:
sprite1.position=grid4;
sprite1.position=grid1;
sprite1.position=grid2;
sprite1.position=grid3;
break;
case 4:
sprite1.position=grid4;
sprite1.position=grid3;
sprite1.position=grid2;
sprite1.position=grid1;
break;
}
[self addChild:sprite1];
[self addChild:sprite2];
[self addChild:sprite3];
[self addChild:sprite4];
Upvotes: 1
Views: 368
Reputation:
Define some constants and some macros:
#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)
Subclass 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
Now in your game code:
- (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];
}
}
That will create a randomly seeded board of any grid size. You'll want to keep pieces and piecesByKey as class variables, of course.
Upvotes: 1