iphone - 如何扩展我的方法来检查 2 张卡是否匹配到 3 张匹配的卡?
<p><p>我正在学习斯坦福的类(class),我们必须为应用程序构建一个方法来检查 2 张卡片是否匹配,这就是具有逻辑的模型的样子(查看那里的方法是 flipCardAtIndex):</p>
<pre><code>#import "CardMatchingGame.h"
#import "PlayingCardsDeck.h"
@interface CardMatchingGame()
@property (readwrite, nonatomic) int score;
@property (strong, nonatomic) NSMutableArray *cards;
@property (strong, nonatomic) NSString *notification;
@end
@implementation CardMatchingGame
-(NSMutableArray *) cards {
if (!_cards) _cards = [ init];
return _cards;
}
-(id)initWithCardCount:(NSUInteger)count usingDeck:(Deck *)deck {
self = ;
if (self) {
for (int i = 0; i < count; i++) {
Card *card = ;
if (!card) {
self = nil;
} else {
self.cards = card;
}
}
}
return self;
}
-(Card *) cardAtIndex:(NSUInteger)index {
return (index < self.cards.count) ? self.cards : nil;
}
#define FLIP_COST 1
#define MISMATCH_PENALTY 2
#define BONUS 4
-(void) flipCardAtIndex:(NSUInteger)index {
Card *card = ;
if (!card.isUnplayable) {
if (!card.isFaceUp) {
for (Card *otherCard in self.cards) {
if (otherCard.isFaceUp && !otherCard.isUnplayable) {
int matchScore = ];
if (matchScore) {
otherCard.unplayble = YES;
card.unplayble = YES;
self.notification = ;
self.score += matchScore * BONUS;
} else {
otherCard.faceUp = NO;
self.score -= MISMATCH_PENALTY;
self.notification = ;
}
break;
}
}
self.score -= FLIP_COST;
}
card.faceUp = !card.isFaceUp;
}
}
@end
</code></pre>
<p>这是整个游戏的类模型,得到了实际的匹配方法:</p>
<pre><code>#import "PlayingCards.h"
@implementation PlayingCards
@synthesize suit = _suit;
//overriding the :match method of cards to give different acore if its only a suit match or a number match
-(int)match:(NSArray *)cardToMatch {
int score = 0;
if (cardToMatch.count == 1) {
PlayingCards *aCard = ;
if () {
score = 1;
} else if (aCard.rank == self.rank) {
score = 4;
}
}
return score;
}
//more stuff...
</code></pre>
<p>W 已经用数组创建了它,所以我们可以为更多对象扩展它,但现在我想弄清楚如何扩展它:/</p>
<p>这是我的项目的 github <a href="https://github.com/NirOhayon/Matchismo" rel="noreferrer noopener nofollow">https://github.com/NirOhayon/Matchismo</a> </p>
<p>我是 Objective C 的新手,如果你能帮我弄清楚,我会很感激。 </p>
<p>非常感谢</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您可以使用循环将它们链接起来以检查它们。非常基本的方法。只需遍历每张卡片,并对照您拥有的“ self ”卡片检查它,然后增加分数而不是设置分数。</p>
<pre><code>-(int)match:(NSArray *)cardToMatch {
int score = 0;
for(int i = 0; i < cardToMatch.count; i++) {
PlayingCards *aCard = cardToMatch;
if () {
score += 1;
} else if (aCard.rank == self.rank) {
score += 4;
}
}
return score;
}
</code></pre>
<p>对于flipCardAtIndex: ,我会将其更改为flipCardsAtIndexes:(NSArray*)indexes,其中indexes 是NSNumber 的NSArray。然后我会运行一个 for 循环检查并删除任何无法播放或面朝上的牌,并通过这些索引处的剩余牌来检查匹配,并检索匹配分数。</p>
<p>告诉您的 ViewController 添加另一张卡取决于您如何设置 ViewController 。您可以在 ViewController 成为委托(delegate)的方法中执行协议(protocol),并通过协议(protocol)方法告诉它切换。它也可能比这更简单,这取决于它如何检查您的卡片模型以决定显示什么,如果它看到三张可用卡片而不是两张,它可以切换。</p>
<p>由于本练习的重点是学习 iOS 编程,我想给你一个良好的开端,你应该自己调整和解决一些问题。我感觉你是编程的新手,如果你是新手,你会惊讶于在你的阶段有多少编程是反复试验。最终它将成为第二天性。 </p></p>
<p style="font-size: 20px;">关于iphone - 如何扩展我的方法来检查 2 张卡是否匹配到 3 张匹配的卡?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/15413903/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/15413903/
</a>
</p>
页:
[1]