-1

26 タイルのボードでゲームをしています。プレーヤーは 1 から 12 までの数字をロールし、その数のタイルを移動します。これは、タイルの配列 (インデックス 0 ~ 25) を順番に持つことで行います。これは、プレイヤーをタイル間で移動させる私の方法です (これにはスプライト キットのコードが含まれており、NDA の下にあることがわかっていますが、問題はそれに関するものではありません)。

NSInteger rolled_number = arc4random() % 12;
while (rolled_number == 0)
    rolled_number = arc4random() % 12;
NSLog(@"%d", rolled_number);
NSInteger new_index = self.player1.currentTileIndex + rolled_number;
if (!(new_index <= 25))
    new_index = new_index - 26;
NSMutableArray *actions = [NSMutableArray array];
while (self.player1.currentTileIndex < new_index) {
    SKSpriteNode *node = [_tiles objectAtIndex:self.player1.currentTileIndex];
    SKAction *move = [SKAction moveTo:node.position duration:1];
    [actions addObject:move];
    NSLog(@"currentTileIndex: %d", self.player1.currentTileIndex);
    if (self.player1.currentTileIndex + 1 > 25)
        self.player1.currentTileIndex -= 26;
    else
        self.player1.currentTileIndex++;
}

このコードの問題は、プレーヤーが index のタイルにいて23をロールした5場合、 index のタイルに移動する必要がありますが、代わりにプロパティ3を作成するため、移動しません。私の質問は、この while ループをどのように変更すれば、数値をの代わりに移動する必要がある場合でも機能するようにするにはどうすればよいかということです。currentTileIndex283026

4

1 に答える 1

2

まず、1 から 12 までの数字を取得するには、次のようにします。

NSInteger rolled_number = arc4random_uniform(12) + 1;

次に、モジュロ演算子を適切に使用して数値をラップします。

NSInteger new_index = self.player1.currentTileIndex + rolled_number;
NSMutableArray *actions = [NSMutableArray array];
while (self.player1.currentTileIndex < new_index) {
    SKSpriteNode *node = _tiles[self.player1.currentTileIndex % _tiles.count];
    SKAction *move = [SKAction moveTo:node.position duration:1];
    [actions addObject:move];
    NSLog(@"currentTileIndex: %d", self.player1.currentTileIndex % _tiles.count);
    self.player1.currentTileIndex++;
}

self.player1.currentTileIndex = self.player1.currentTileIndex % _tiles.count;
于 2013-06-24T21:27:53.840 に答える