我学到了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当然,在这样做之前,我先删除了技术演示按钮上的"A♣︎“,因为提示告诉我应该让它显示出卡的背面,我成功地构建了应用程序,并且看起来很好。
然而,任务的提示告诉我:
一个很好的解决方案会考虑到,如果每一张牌都已经显示,并且用户仍然不停地翻转,会发生什么。做一些简单而明智的事情(例如,您不应该以任何方式修改模型中的类)。
但是我的解决方案将允许用户翻转卡片infinitely.So,我尝试通过添加如下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以查看其他人的解决方案,提示是ignored.Can您与我分享了您的想法吗?
任何建议都将不胜感激!
发布于 2014-08-30 17:04:50
您只需要用下面这样的if语句来包装它
if (card) {
//flip the card
}请记住,card是Deck.h的一个对象,我们已经将Deck设置为在卡用完时返回零。所以,一旦纸牌用完了,它就会停止翻转
还有,最重要的是,没有神奇的数字!即使您已经编写了一个命令来解释它,也不能将53从任何地方抛出。这只是一个糟糕的编程实践
- (IBAction)touchCardButton:(UIButton *)sender {
// No magic number! --> if (self.flipCount < 53){
if (!sender.currentTitle) {
Card *card = [self.fullDeck drawRandomCard];
if (card) { // <----- this is what I'm talking about
[sender setBackgroundImage:[UIImage imageNamed:@"cardfront"]
forState:UIControlStateNormal];
[sender setTitle:card.contents
forState:UIControlStateNormal];
}
} else {
[sender setBackgroundImage:[UIImage imageNamed:@"cardback"]
forState:UIControlStateNormal];
[sender setTitle:nil forState:UIControlStateNormal];
}
self.flipCount++;
}https://stackoverflow.com/questions/25580439
复制相似问题