NSMutableArray не добавляет ничего с помощью addObjectsFromArray - PullRequest
4 голосов
/ 24 июня 2011

Я тестирую ИИ для карточной игры, и у меня возникли проблемы, когда я заметил, что метод count объекта NSMutableArray никогда не увеличивался после использования его addObjectsFromArray метод. Я не только использую addObjectsFromArray в тесте, но и в методе для ИИ для добавления NSArray (или NSMutableArray ), и в обоих случаях ничего добавляется. В тесте я создаю полную колоду из 52 карт в случайном порядке, затем раздаю карты 3 ИИ и дополнительному NSMutableArray . Затем я вижу, какие карты уже есть у ИИ, затем вижу, что каждый ИИ будет разыгрывать в свой ход за значение, затем добавляю карты, которые он сыграл, в свою руку, прежде чем перейти к следующему ИИ.

Вот код:

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 карт, имеет count return 13 с использованием addObject , но счет сброса никогда не меняется с 0.)

1 Ответ

0 голосов
/ 24 июня 2011

Обычная проблема заключается в том, что discard равно nil.Я не вижу его инициализации, так что я думаю, что это также и здесь.

...