2013-03-12 3 views
2

В моих согласующих картах игр (после курса Стэнфорд) Я должен создать UISwitch, который изменит режим игры между соответствием две карт три карты соответствием, теперь у меня уже есть соответствующий метод, который выглядит следующим образом:Как сравнить между тремя объектами в массиве?

-(int)match:(NSArray *)cardToMatch { 

    int score = 0; 

    if (cardToMatch.count == 1) { 
     PlayingCards *aCard = [cardToMatch lastObject]; 

     if ([aCard.suit isEqualToString: self.suit]) { 
      score = 1; 
     } else if (aCard.rank == self.rank) { 
      score = 4; 
     } 

    } 

    return score; 
} 

Это уже массив, но я проверяю только две карты. Как я могу улучшить этот метод, чтобы проверить на три, или создать отдельный?

Это также метод, который проверяет карты, которые были перевернутые:

-(Card *) cardAtIndex:(NSUInteger)index { 

    return (index < self.cards.count) ? self.cards[index] : nil; 
} 


#define FLIP_COST 1 
#define MISMATCH_PENALTY 2 
#define BONUS 4 

-(void) flipCardAtIndex:(NSUInteger)index { 



    Card *card = [self cardAtIndex:index]; 

    if (!card.isUnplayable) { 

     if (!card.isFaceUp) { 

      for (Card *otherCard in self.cards) { 

       if (otherCard.isFaceUp && !otherCard.isUnplayable) { 

        int matchScore = [card match:@[otherCard]]; 

        if (matchScore) { 

         otherCard.unplayble = YES; 
         card.unplayble = YES; 

         self.notification = [NSString stringWithFormat:@"%@ & %@ match!", card.contents, otherCard.contents]; 

         self.score += matchScore * BONUS; 
        } else { 
         otherCard.faceUp = NO; 
         self.score -= MISMATCH_PENALTY; 
         self.notification = [NSString stringWithFormat:@"%@ did not matched to %@", card.contents, otherCard.contents]; 
        } 
        break; 
       } 

      } 
      self.score -= FLIP_COST; 
     } 
     card.faceUp = !card.isFaceUp; 

    } 
} 

Спасибо.

+0

Это не ответ на ваш вопрос, но может заставить вас думать: Почему вы используете сравнение строк, чтобы соответствовать костюмы? Сравнение строк довольно «дорого», поэтому вы можете использовать «enum» для представления костюмов вместо этого, поскольку их сравнение (целые числа) тривиально. – trojanfoe

+0

это хорошая идея :) спасибо. возможно, у вас есть какое-то решение моего вопроса ..? даже если я пойду с предложением об использовании перечисления, как мне сравнить 3 объекта ..? вождение меня сумасшедшее @trojanfoe – JohnBigs

+0

, и это первый раз, когда я что-то написал и никто не ответил. weird @trojanfoe – JohnBigs

ответ

0

Я предполагаю, что вы уже знаете индекс карт, которые вы пытаетесь сопоставить. Поэтому, если у вас есть три индекса, ваша соответствующая функция возвращает значение bool. Затем вы можете использовать вложенный, если для проверки третьей карты. Это будет выглядеть примерно так.

if([self match:index1 card2:index2]){ 
    if(self match:index1 card2:index3){ 
     NSLog(@"You have a match"); 
    } 
} 
else [email protected]"No match"; 

Ваша функция соответствия будет выглядеть примерно так:

-(BOOL)match:(int)index1 card2:(int)index2{ 
    //Do your matching here and return if YES or NO accordingly 
}