在RPG游戏中,假设角色A和角色B。
A将每秒进行x次攻击
B将每秒进行y次攻击
如果我们假设A发起了攻击并且最终的攻击可能是:
A A B A B ...
如何计算攻击顺序?
最佳答案
这是在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)。
关于frequency - 如何在游戏中实现攻击频率?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1994512/