开始游戏时:
点击Re-Deal按钮后:
再点击头像发现Score并未重置为0
请问在控制其中如何做到当点击Re-Deal按钮后,重新开始游戏时让Score重置为0.
// ViewController.m
#import "ViewController.h"
#import "PlayingCardDeck.h"
#import "CardMatchingGame.h"
@interface ViewController ()
@property (nonatomic,strong) Deck *deck;
@property (nonatomic,strong) CardMatchingGame *game;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *cardButtons;
@property (weak, nonatomic) IBOutlet UILabel *scoreLable;
@end
@implementation ViewController
- (IBAction)touchReDealCardButton {
[self reDealUI];
}
- (void)reDealUI
{
for (UIButton *cardButton in self.cardButtons) {
NSUInteger cardIndex = [self.cardButtons indexOfObject:cardButton];
Card *card = [self.game cardAtIndex:cardIndex];
[cardButton setTitle:@"" forState:UIControlStateNormal];
[cardButton setBackgroundImage:[UIImage imageNamed:@"cardback"] forState:UIControlStateNormal];
cardButton.enabled = YES;
card.matched = NO;
card.chosen = NO;
}
self.scoreLable.text = [NSString stringWithFormat:@"Score: 0"];
}
#pragma mark - game
- (CardMatchingGame *)game
{
if (!_game) {
_game = [[CardMatchingGame alloc] initWithCardCount:self.cardButtons.count usingDeck:self.deck];
}
return _game;
}
#pragma mark - deck
- (Deck *)deck
{
if (!_deck) {
_deck = [self createDeck];
}
return _deck;
}
- (Deck *)createDeck
{
return [[PlayingCardDeck alloc] init];
}
#pragma mark - touchCardButton
- (IBAction)touchCardButton:(UIButton *)sender {
NSUInteger cardIndex = [self.cardButtons indexOfObject:sender]; // 得倒这个发送按钮在数组中的什么地方
[self.game chooseCardAtIndex:cardIndex]; // 让游戏选择那一下标处的纸牌!
[self updateUI]; // 更新UI,控制器的首要任务之一:它会同步模型和UI
}
#pragma mark - updateUI
- (void)updateUI // 遍历所有纸牌按钮,获得那个纸牌按钮,同时在模型中观察相应纸牌,确保纸牌按钮展示出它所应该展示的纸牌内容
{
for (UIButton *cardButton in self.cardButtons) { // 得倒纸牌按钮和纸牌
NSUInteger cardIndex = [self.cardButtons indexOfObject:cardButton];
Card *card = [self.game cardAtIndex:cardIndex];
[cardButton setTitle:[self titleForCard:card] forState:UIControlStateNormal];
[cardButton setBackgroundImage:[self backgroundImageForCard:card] forState:UIControlStateNormal];
cardButton.enabled = !card.isMatched;
}
self.scoreLable.text = [NSString stringWithFormat:@"Score: %ld",self.game.score];
}
- (NSString *)titleForCard:(Card *)card
{
return card.isChosen ? card.contents : @"";
}
- (UIImage *)backgroundImageForCard:(Card *)card
{
return [UIImage imageNamed:card.isChosen ? @"cardfront" : @"cardback"];
}
@end
对
self.scoreLable.text
的设置一共在两个地方出现了。分别在:reDealUI
函数中的:还有
updateUI
函数中的:所以是不是只要在
reDealUI
的时候一起self.game.score = 0
了就好了?