2010-01-03 5 views
2

Dans un jeu de RPG, suppose qu'il ya rôle A et B.Comment implémenter la fréquence d'attaque dans le jeu?

A effectuera des attaques de x par seconde

B effectuera les attaques y par seconde

Si nous supposons A initie l'attaque et la les attaques finales peuvent être:

AABAB ...

Comment calculer t La séquence d'attaques?

+0

Est-ce une question de concurrence ou voulez-vous juste savoir combien d'attaques? –

+0

Le but est d'obtenir toute la séquence d'attaques jusqu'à ce que l'un d'eux meurt. – user198729

+0

Pourrait-il y avoir plus de 2 rôles dans la même bataille? –

Répondre

3

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).

+0

Cela devrait être 'A B A A | B ...' – user198729

+0

Que signifie la ligne après le troisième A?Attaque simultanée? –

+0

Oui, c'est ce que cela signifie. Quelle est votre opinion? – user198729

3

Compte qui a le plus d'attaques. Appelez-le PLUS. Divisez PLUS/MOINS et prenez le plancher, le résultat est = N. Ensuite, pour chaque N attaques de PLUS, ajoutez l'une des LESS et pad avec des attaques de MORE quand vous avez terminé. C'est chaque seconde.

Exemple:

MORE = 5 
LESS = 2 
MORE/LESS floor = 2 

Then: 
MORE MORE LESS MORE MORE LESS MORE 

Un autre exemple:

MORE = 3 
LESS = 2 
MORE/LESS floor = 1 

Then: 
MORE LESS MORE LESS MORE 
+0

+1 J'aime vraiment cette solution aussi - simple et efficace. Après avoir clarifié la question un peu plus, cela ne répond pas tout à fait à toutes les exigences. Peut-être que cela pourrait être adapté au travail. –

Questions connexes