случайная позиция спрайта - PullRequest
1 голос
/ 15 августа 2011

сейчас мне нужен совет, как кодировать код.

У меня есть 4 спрайта в расположении 2x2. все спрайты разные. Как я могу случайным образом / смешать положение, когда я загружаю слой?

Пока я сделал этот код. Есть более простой способ, или этот метод, который я использую, является правильным? У меня есть планы загрузить больше спрайтов в расположении 5X5.

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];

1 Ответ

1 голос
/ 16 августа 2011

Определите некоторые константы и некоторые макросы:

#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 в качестве переменных класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...