2011-06-24 7 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(@" "); 
} 

NSMutableArrayのを返してplayHandが演じるのカードを、キャッチしなければならない破棄、および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:はい、すべてが適切に事前に作成されていますが、ちょうどコードスニペットを作成したので、その部分を切り捨てました。カウントは0から変化しません。)

答えて

0

通常の問題は、discardnilです。私はそれが初期化されているのを見ないので、私はここでもそうだと推測しています。

+0

いいえ。私のPSをチェックしてください。 – QuakAttak

関連する問題