【问题标题】:Dice game: keep individual dice骰子游戏:保留个人骰子
【发布时间】:2014-02-12 11:05:03
【问题描述】:

我对 Objective-c 编程很陌生,但构建自己的掷骰子游戏帮助我理解了它的基础知识。我知道这里有很多关于掷骰子游戏的主题,但没有找到我想要的。 我用 8 个不同的骰子(都在单独的图像视图中)创建了一个游戏,这些骰子使用从 1 到 6 的随机生成的数字。玩家可以一键掷出所有骰子,并且标签会随总点数更新在每一卷。但是,为了提高分数,我想让玩家在掷骰后保留某个骰子(通过点击单个骰子)并继续使用其他骰子。 我已经实现了一个日志,显示是否点击了某个骰子,如下所示:

- (void)viewDidLoad {

UITapGestureRecognizer *recogDice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[self.firstDieView addGestureRecognizer:recogDice]; 
}

-(void)tapRecognized:(UITapGestureRecognizer *)sender {
NSLog(@"Nr 1 touched"); 
}

当然,这确实向我展示了骰子已被点击,但我不知道如何从这里编写代码,以便在其他骰子再次滚动时实际上不会滚动。 我的滚动代码如下:

-(void)throw {
DiceThrowController *diceController = [[DiceThrowController alloc] init];

int firstNumber = [diceController getDieNumber]; //for this example i've cut out the other dice, which are the same as this one, only called 'second' etc.

[self.firstDieView showDieNumber:firstNumber];

self.sumLabel.text = [NSString stringWithFormat:@"%d", firstNumber];
}

任何人都可以在这里指出正确的方向吗?我的游戏运行良好,但我想为其添加一些实际的交互/目标。谢谢

【问题讨论】:

  • 每个 dice-view 都有自己的 diceThrowController 实例吗?

标签: objective-c cocoa-touch dice


【解决方案1】:

如何使用 NSMutableArray 来保存这些抽头分数。只需用 8 个零初始化数组,这样你就知道哪个骰子还没有被敲击:

NSMutableArray diceScores = [NSMutableArray arrayWithCapacitive:8];
[diceScores setArray:@[@0, @0, @0, @0, @0, @0, @0, @0]];

当一个骰子被点击时,只需将分数保存在数组中对应的索引处(所以第一个骰子在索引 0 处,...)replaceObjectAtIndex:withObject:

但请注意,此解决方案需要您稍微更改您的 api。由于您不能将整数保存在数组中,而只能保存对象,因此您应该更改 getDieNumber,使其返回 NSNumber 而不是整数。

【讨论】:

    【解决方案2】:

    如你所见,骰子是一个明确的对象,因此创建一个 Dice 类会很有意义。

    就我个人而言,我可能会为该类提供以下公共属性:

    @property (nonatomic) BOOL locked;
    @property (nonatomic) NSInteger currentValue;
    

    可能还有一个用于显示目的的 imageView。 我个人将逻辑“旋转”骰子作为骰子类中的一种方法:

    -(void)spin{
        if (!self.locked){
            // Your actual spin logic goes here
        }
    };
    

    并由 tapGestureRecognizer 触发。

    在你的DiceThrowController 中,你可以有一个NSArray *diceSet;,包括所有的实例。要获得总分,您只需遍历 diceSet 以汇总分数:

    NSInteger totalScore = 0;
    
    for (Dice *dice in diceSet){
        totalScore += dice.currentValue;
    } 
    

    【讨论】:

      猜你喜欢
      • 2012-02-29
      • 1970-01-01
      • 2021-12-14
      • 2015-08-25
      • 2015-12-24
      • 2014-03-16
      • 2013-09-17
      相关资源
      最近更新 更多