2013-06-24 38 views
-1

我有一個26塊瓷磚的遊戲。玩家在1到12之間擲出一個數字,然後玩家移動那麼多個牌。我通過按順序擁有一個數組(索引0-25)來實現這一點。這是我穿過的瓷磚移動播放器的方式(這包含從雪碧套件,這是我所知道的是保密協議的代碼,但問題是沒有的事情),此代碼是,如果iOS while循環回覆索引回零

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++; 
} 

問題球員在索引23處的瓦片上並且滾動5,他們應該去索引3處的瓦片,但是它不會移動,因爲它將改爲使currentTileIndex屬性28而不是3。我的問題是我該如何修改這個while循環,以便即使數字必須轉到0而不是26,它仍然可以工作?

+0

我一直認爲如果loop if(condition){}。我不知道這是否有所作爲 – logixologist

回答

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; 
+0

這有幫助,但如果'self.player1.currentTileIndex'傳遞'25',角色仍然無法移動。即使在這裏,'new_index'可以傳遞25,然後'currentTileIndex'將增加超過我的數組邊界。 –

+0

我發佈的代碼將起作用。例。 'currentTileIndex'爲22,玩家擲骰10,'new_index'爲32.循環遍歷。當'currentTileIndex'變爲26時,表達式'self.player1.currentTileIndex%_tiles.count'會根據需要給你0。在循環之後,使用'%'操作符重置索引,所以下一個滾動以0 - 25的值開始。 – rmaddy

+0

我剛剛測試過這個,在一個例子中'currentTileIndex'是23.當我接下來滾動時,它是9,但while循環從未執行過,玩家從未移動過。 –