我对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];
}
有人能指出我在正确的方向吗?我的游戏运作完美,但我想为它添加一些实际的互动/目标。感谢
答案 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;
}