Come implementare la frequenza di attacco in gioco?
-
22-09-2019 - |
Domanda
In un gioco di ruolo, supponiamo che ci siano ruolo A e B.
Un condurrà x attacchi al secondo
B condurrà attacchi y al secondo
Se supponiamo A inizia l'attacco e gli attacchi finale può essere:
A A B A B ...
Come si calcola la sequenza di attacchi?
Soluzione
Ecco un modo per farlo in Python 3.0 utilizzando un generatore e frazioni:
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)))
Output:
A B A A|B A B A A|B A B
Una frequenza degli attacchi di 0 deve essere controllato per. Non ho fatto questo nel codice qui sopra per semplicità, ma è facile da risolvere e probabilmente meglio gestite al di fuori di questa funzione (una battaglia in cui un giocatore non può attaccare, non sarebbe molto interessante in ogni caso).
Un vantaggio di questa idea è che potrebbe essere facilmente esteso a più di 2 giocatori simultanei.
Un altro vantaggio è che può anche gestire velocità di attacco inferiori a un attacco per secondo senza alcuna modifica (per esempio attacchi B solo una volta ogni due secondi, vale a dire la frequenza degli attacchi = 0,5).
Altri suggerimenti
Conte che ha più attacchi. Chiamatelo PIÙ. Dividono più / meno e prendere pavimento, il risultato è = N, quindi per ogni N attacchi di PIÙ aggiungere uno dei MENO e pad con attacchi di più quando finito. Questo è ogni secondo.
Esempio:
MORE = 5
LESS = 2
MORE/LESS floor = 2
Then:
MORE MORE LESS MORE MORE LESS MORE
Un altro esempio:
MORE = 3
LESS = 2
MORE/LESS floor = 1
Then:
MORE LESS MORE LESS MORE