2011-06-24 56 views
4

我測試了AI的紙牌遊戲,並有問題添加任何時,我注意到一個的NSMutableArray對象的計數方法利用其addObjectsFromArray方法後,從未增加。我不僅在測試中使用addObjectsFromArray,而且在AI中添加NSArray(或NSMutableArray)的方法中,並且在這兩種情況下都沒有添加任何內容。在測試中,我創建了一個完整的52張牌套牌,洗牌,然後將這張牌交給3個AI以及一個額外的NSMutableArray。然後,我看到AI已經擁有了什麼牌,然後看看每個AI在其轉身時會發揮什麼樣的價值,然後將其回放的牌添加到其手中,然後再轉向下一個AI。NSMutableArray的不addObjectsFromArray

下面的代碼:

for(int k = 1; k < 14; k++) 
{ 
    NSLog(@"-|-|-|-|-|- Current Value: %i", k); 
    NSLog(@"----- Easy"); 
    [discard addObjectsFromArray:(NSArray*)[easy playHand:(NSUInteger)k]]; 
    NSLog(@"Discard's Count: %i", [discard count]); 
    for(Card* cd in discard) 
    { 
     NSLog(@"card displayed = true"); 
     [cd displayCard]; 
     NSLog(@"card displayed = true"); 
    } 
    //[discard makeObjectsPerformSelector:@selector(displayCard)]; 
     [easy addCards:discard]; 
     [discard removeAllObjects]; 

     NSLog(@"------ Medium"); 
    blah = (NSArray*) [Medium playHand:k]; 
    [discard addObjectsFromArray:blah]; 
    NSLog(@"Discard's Count: %i", [discard count]); 
    //[discard addObjectsFromArray:[Medium playHand:(NSUInteger)k]]; 
    for(Card* cd in discard) 
    { 
     [cd displayCard]; 
    } 
    //[discard makeObjectsPerformSelector:@selector(displayCard)]; 
     [Medium addCards:discard]; 
     [discard removeAllObjects]; 

     NSLog(@"------ Hard"); 
     [discard addObjectsFromArray:[HARD playHand:(NSUInteger)k]]; 
    for(Card* cd in discard) 
    { 
     [cd displayCard]; 
    } 
    //[discard makeObjectsPerformSelector:@selector(displayCard)]; 
     [HARD addCards:discard]; 
     [discard removeAllObjects]; 
     NSLog(@" "); 
     NSLog(@" "); 
} 

從這裏,丟棄應抓住通過playHand發揮的卡,這是返回一個的NSMutableArray,並addObjectsFromArray需要一個的NSArray(所有指針的課程)。我不應該直接使用下面的行傳遞它們嗎?

[discard addObjectsFromArray:[easy playHand:k]]; 

快速的變通辦法不起作用或者,用一個單獨的指針:

NSArray* blah = nil; 
blah = [easy playHand]; 
[discard addObjectsFromArray:blah]; 

...或強制轉換的指針(我測試了這一點,它不工作) :

NSArray* blahblah = nil; 
blahblah = (NSArray*)[easy playHand:k]; 
[discard addObjectsFromArray:blahblah]; 

我在做什麼錯?這不是一個自動類型轉換,還是我需要使用另一種類型轉換?或者有什麼我可以忽略的?我會嘗試讓它返回一個NSArray來代替,但AI類中的容器是一個NSMutableArray,所以我可以很容易地爲其添加卡片,而不必在每次卡片對象()都創建數組副本時)添加/刪除。 (PS:是的,一切都正確預先創建的,我只是剪掉的那部分了,因爲它提出的代碼片段相當長的和額外的的NSMutableArray持有其餘13張牌有使用ADDOBJECT計數返回13,但丟棄的。計數從不會從0改變)。

回答

0

通常的問題是discardnil。我沒有看到它被初始化,所以我猜這也是這種情況。

+0

沒有。檢查我的PS。 – QuakAttak

相關問題