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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top