RPGゲームで、ロールAとロールBがいるとします。
A は 1 秒あたり x 回の攻撃を行います
Bは毎秒y回の攻撃を行います
Aが攻撃を開始し、最終的な攻撃は次のようになると仮定すると:
アアバ...
攻撃のシーケンスを計算する方法は?
RPGゲームで、ロールAとロールBがいるとします。
A は 1 秒あたり x 回の攻撃を行います
Bは毎秒y回の攻撃を行います
Aが攻撃を開始し、最終的な攻撃は次のようになると仮定すると:
アアバ...
攻撃のシーケンスを計算する方法は?
誰がより多くの攻撃を持っているかを数えます。彼をもっと呼んでください。MORE/LESS を割ると、結果は N になります。MORE の N 回の攻撃ごとに、LESS の 1 つを追加し、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 でそれを行う 1 つの方法を次に示します。
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 であることを確認する必要があります。簡単にするために、上記のコードではこれを行っていませんが、修正は簡単で、おそらくこの関数の外で処理するのが最適です (いずれにせよ、1 人のプレイヤーが攻撃できない戦闘はあまり面白くありません)。
このアイデアの利点は、2 人以上の同時プレイヤーに簡単に拡張できることです。
もう 1 つの利点は、変更なしで 1 秒あたり 1 回未満の攻撃率も処理できることです (たとえば、B 攻撃は 2 秒に 1 回のみ、つまり攻撃頻度 = 0.5)。