骰子游戏:保持个人骰子

时间:2014-01-22 11:48:56

标签: objective-c cocoa-touch dice

我对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];
}

有人能指出我在正确的方向吗?我的游戏运作完美,但我想为它添加一些实际的互动/目标。感谢

2 个答案:

答案 0 :(得分:1)

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

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

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

但要注意,这个解决方案需要你改变你的api。由于您无法在数组中保存整数但只能保存对象,因此您应该更改getDieNumber,以便它返回NSNumber而不是int。

答案 1 :(得分:0)

骰子是一个清晰的对象,你将会看到它,因此创建一个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;
}