【发布时间】:2014-08-30 08:16:41
【问题描述】:
我已经学习了 CS193P 的第一课和第二课,并完成了第一项作业,该作业要求我让 Matchismo 以随机顺序翻阅一副扑克牌,一次显示一张牌。这是我的 CardGameViewController.m 代码
#import "CardGameViewController.h"
#import "Deck.h"
#import "PlayingCardDeck.h"
@interface CardGameViewController ()
@property (weak, nonatomic) IBOutlet UILabel *flipsLabel;
@property (nonatomic) int flipCount;
@property (strong, nonatomic) Deck *fullDeck;
@end
@implementation CardGameViewController
- (void)setFlipCount:(int)flipCount{
_flipCount = flipCount;
self.flipsLabel.text = [NSString stringWithFormat:@"Flips: %d",self.flipCount];
NSLog(@"flipCount changed to %d",self.flipCount);
}
- (Deck *)fullDeck{
if (!_fullDeck) _fullDeck =[[PlayingCardDeck alloc] init];
return _fullDeck;
}
- (IBAction)touchCardButton:(UIButton *)sender {
if (!sender.currentTitle) {
[sender setBackgroundImage:[UIImage imageNamed:@"cardfront"]
forState:UIControlStateNormal];
[sender setTitle:[[self.fullDeck drawRandomCard] contents]
forState:UIControlStateNormal];
} else {
[sender setBackgroundImage:[UIImage imageNamed:@"cardback"]
forState:UIControlStateNormal];
[sender setTitle:nil forState:UIControlStateNormal];
}
self.flipCount++;
}
@end
当然,在此之前,我先删除了teching demo按钮上的“A♣︎”,因为提示告诉我应该让它显示卡的背面。我成功构建了应用程序它似乎工作得很好。
但是,作业的提示告诉我:
一个好的解决方案会考虑如果牌堆中的每张牌都已显示并且用户仍然不断翻转会发生什么。做一些简单而明智的事情(例如,您不应该以任何方式修改模型中的类)。
但我的解决方案会让用户无限地翻转卡片。所以我尝试通过添加这样的 if() 来达到目标:
- (IBAction)touchCardButton:(UIButton *)sender {
if (self.flipCount < 53){ /*There are 52 cards in a deck */
if (!sender.currentTitle) {
[sender setBackgroundImage:[UIImage imageNamed:@"cardfront"]
forState:UIControlStateNormal];
[sender setTitle:[[self.fullDeck drawRandomCard] contents]
forState:UIControlStateNormal];
} else {
[sender setBackgroundImage:[UIImage imageNamed:@"cardback"]
forState:UIControlStateNormal];
[sender setTitle:nil forState:UIControlStateNormal];
}
self.flipCount++;
}
}
然后当我运行应用程序并触摸屏幕时,当翻转标签达到 52 时,它将不再翻转。
这个解决方案是否幼稚荒谬?我已经搜索了 github 以查看其他人的解决方案,并且似乎忽略了提示。您可以与我分享您的想法吗?
任何建议将不胜感激!!!
【问题讨论】: