在一个 RPG 游戏中,假设有角色 A 和 B。
A每秒将进行x次攻击
B 每秒将进行 y 次攻击
如果我们假设 A 发起攻击,最终的攻击可能是:
亚巴...
如何计算攻击的顺序?
在一个 RPG 游戏中,假设有角色 A 和 B。
A每秒将进行x次攻击
B 每秒将进行 y 次攻击
如果我们假设 A 发起攻击,最终的攻击可能是:
亚巴...
如何计算攻击的顺序?
计算谁的攻击次数更多。叫他更多。除以 MORE/LESS 并发言,结果为 = N。然后每 N 次 MORE 攻击添加一个 LESS 并在完成时用 MORE 攻击填充。那是每一秒。
例子:
MORE = 5
LESS = 2
MORE/LESS floor = 2
Then:
MORE MORE LESS MORE MORE LESS MORE
另一个例子:
MORE = 3
LESS = 2
MORE/LESS floor = 1
Then:
MORE LESS MORE LESS MORE
这是在 Python 3.0 中使用生成器和分数的一种方法:
def get_attack_sequence(a, b):
from fractions import Fraction
count_a = count_b = 0
rate_a = Fraction(1, a)
rate_b = Fraction(1, b)
while 1:
new_count_a = count_a + rate_a
new_count_b = count_b + rate_b
if new_count_a < new_count_b:
yield "A"
count_a = new_count_a
elif new_count_a > new_count_b:
yield "B"
count_b = new_count_b
else:
yield "A|B"
count_a = new_count_a
count_b = new_count_b
attack_sequence = get_attack_sequence(3, 2)
print(' '.join(next(attack_sequence) for _ in range(10)))
输出:
A B A A|B A B A A|B A B
需要检查攻击频率为 0。为简单起见,我在上面的代码中没有这样做,但它很容易修复,并且可能最好在此函数之外处理(无论如何,一个玩家无法攻击的战斗不会很有趣)。
这个想法的一个优点是它可以很容易地扩展到超过 2 个同时播放器。
另一个优点是它还可以在不进行任何修改的情况下处理小于每秒一次攻击的攻击率(例如,B 仅每两秒攻击一次,即攻击频率 = 0.5)。