假设我有 20 个攻击回合的回合制游戏,玩家的攻击速度决定了他们攻击的频率,当一个人的攻击速度为 5 而另一个人的攻击速度为速度8?(这些是测试值,我将使用的值会有所不同。20个攻击回合将是上限,但是,每个玩家都可以投资自己的攻击速度,他们的技能点最高为10)
我已经用 C 编程了大约 2 年,目前我正在使用 Obj-C 制作我的第一个 indy 游戏,任何建议或知识都会有很大帮助。
假设我有 20 个攻击回合的回合制游戏,玩家的攻击速度决定了他们攻击的频率,当一个人的攻击速度为 5 而另一个人的攻击速度为速度8?(这些是测试值,我将使用的值会有所不同。20个攻击回合将是上限,但是,每个玩家都可以投资自己的攻击速度,他们的技能点最高为10)
我已经用 C 编程了大约 2 年,目前我正在使用 Obj-C 制作我的第一个 indy 游戏,任何建议或知识都会有很大帮助。
如果我正确理解问题:
第一个攻击将是min(a,b)
,在哪里a
和b
是你的初始“攻击速度”,5 和 8。然后减去两者的最小值,如果结果为 0 或更小,则再次添加攻击者的原始值。所以在第一次攻击之后,a=5
再次,但现在b=8-5=3
。然后轮到b:
a = 5 - 8 = -3
b = 3 - 8 = -5
两者都小于零,所以再次添加 5 和 8:
a = 2
b = 3
攻击:
a = -3 -> a = 2
b = -2 -> b = 6
因此 a 得到另一个命中。依此类推,直到打成平手——你一定会以这样或那样的方式遇到这种情况。您可以返回“平局”结果,或者让最后一个攻击者或最后一个防守者“赢得”那个结果。考虑一下,因为如果两个玩家具有相同的“攻击”值怎么办?
这个数学问题告诉我轮到谁了——
例如:有 11 次攻击,你攻击 8 次,而你的敌人攻击 3 次 确定一个均匀分布且始终可重复的攻击顺序。
在这种情况下: 1. 玩家 1 攻击 2. 玩家 1 攻击 3. 玩家 2 攻击 4. 玩家 1 攻击 5. 玩家 1 攻击 6. 玩家 1 攻击 7. 玩家 2 攻击 8. 玩家 1 攻击 9. 玩家 1 攻击 10 . 玩家 1 攻击 11. 玩家 2 攻击(根据需要重复这 11 个步骤)
我最初认为解决方案最好用除法来完成,直到我遇到 20 面墙,所以
我选择减法,因为它可以被复制并且以编程方式更好地工作,而不是通过除法创建攻击序列并将其存储为数组并在每次需要确定人员转弯时索引数组。
所以我的代码是:
if (playerTwoWent == 0)
{
difference = difference - player_twos_speed;
}
else if (playerTwoWent == 1)
{
difference = player_ones_speed + difference;
playerTwoWent = 0;
}
if (difference >= 0)
{
printf("player 1s turn: %d\n", difference);
}
else if (difference < 0)
{
if (playerTwoWent == 0)
{
printf("player 2s turn: %d\n", difference);
playerTwoWent = 1;
}
}