首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于CS193P作业1的几个问题

关于CS193P作业1的几个问题
EN

Stack Overflow用户
提问于 2014-08-30 08:16:41
回答 1查看 341关注 0票数 0

我学到了CS193P的第一课和第二课,完成了第一次作业,它要求我让Matchismo按随机顺序在一整副扑克牌中翻转,每次显示一张牌。这是我的CardGameViewController.m代码

代码语言:javascript
复制
#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()来达到目标:

代码语言:javascript
复制
- (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您与我分享了您的想法吗?

任何建议都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-30 17:04:50

您只需要用下面这样的if语句来包装它

代码语言:javascript
复制
if (card) {
       //flip the card
}

请记住,cardDeck.h的一个对象,我们已经将Deck设置为在卡用完时返回零。所以,一旦纸牌用完了,它就会停止翻转

还有,最重要的是,没有神奇的数字!即使您已经编写了一个命令来解释它,也不能将53从任何地方抛出。这只是一个糟糕的编程实践

代码语言:javascript
复制
- (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++;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25580439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档