Voici une façon de le faire en Python 3.0 en utilisant un générateur et des fractions:
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)))
Sortie:
A B A A|B A B A A|B A B
Une fréquence d'attaque de 0 doit être vérifiée. Je n'ai pas fait cela dans le code ci-dessus pour la simplicité, mais c'est facile à corriger et probablement mieux géré en dehors de cette fonction (une bataille où un joueur ne peut pas attaquer ne serait pas très intéressante de toute façon).
Un avantage de cette idée est qu'elle pourrait facilement être étendue à plus de 2 joueurs simultanés. Un autre avantage est qu'il peut également gérer des taux d'attaque de moins d'une attaque par seconde sans aucune modification (par exemple, des attaques B seulement une fois toutes les deux secondes, c'est-à-dire une fréquence d'attaque = 0,5).
Est-ce une question de concurrence ou voulez-vous juste savoir combien d'attaques? –
Le but est d'obtenir toute la séquence d'attaques jusqu'à ce que l'un d'eux meurt. – user198729
Pourrait-il y avoir plus de 2 rôles dans la même bataille? –