Algoritmo per uno strumento per la creazione di statistiche teoriche basate su un gioco (league of legends)


10

Vorrei creare un simulatore (sostanzialmente a scopo di test) per un gioco (League of legends).

Le basi del gioco:

hai un eroe che ha alcune statistiche:

  • Punto di salute
  • Danno d'attacco
  • Velocità d'attacco
  • Armatura
  • Penetrazione dell'armatura
  • Velocità di movimento

L'eroe può avere 4 abilità (ottieni un punto abilità per ogni livello) (Vengono attivate manualmente, il più delle volte, ha tempo di recupero, danni, potenza di attacco / scala di attacco e livello di abilità) + un'abilità passiva

Puoi uccidere eroi nemici o mostri neutrali, hanno le stesse statistiche:

  • Punto di salute
  • Danno d'attacco
  • Velocità d'attacco
  • Armatura

Cosa vorrei fare:

Crea uno strumento per verificare se un particolare oggetto o un particolare aumento delle statistiche accelererebbe la tua potenza / velocità di uccisione.

mappa: http://evtron.com/Evtron-Alpha/wp-content/uploads/2011/02/Summoners-Rift.jpg

Esempi statistici:

  • Hp: 420
  • Annuncio: 55
  • Velocità d'attacco: 0,613 (attacchi / s -> ogni attacco a 1 / 0,613 s)
  • penetrazione armatura: 25

Il personaggio attaccherà il nemico con 1 / velocità d'attacco e danneggiandosi con il danno d'attacco (c'è un formulato per calcolare il danno, ma questo non è importante in questa fase immagino), una volta che sono morti, passando al successivo con velocità di movimento ( puoi vedere i campi sulla mappa, i teschi gialli)

Stavo pensando all'algoritmo:

  1. Ho pensato che se dovessi fare un for da i = 0 a i = 30000 (contando ms), quindi posso solo controllare il PS nemico e il mio hp anche ogni ms si è rivelato così male (piuttosto CPU pesante, e mi piacerebbe per metterne un po 'a caso, quindi dovrei essere in grado di riassumere 1k iterazione, che è impossibile)

  2. In secondo luogo, ho pensato che avrei dovuto fare un for da i = 1 a 30, e controllare ogni secondo e controllare cosa è successo nell'ultimo secondo, ma alcuni dei mostri neutrali si trovano in un grande accampamento (fino a 4 mostri), e in questo modo il codice stava diventando sempre più complicato.

  3. Creerò discussioni per ogni giocatore / mostri e, una volta terminato, cercheranno quando moriranno e ridurranno il PS del giocatore.

La mia domanda, è questa la strada giusta da percorrere?

TLDR: Vorrei creare uno strumento per creare analisi (iterare 1k e calcolare la media) su un gioco il cui aumento delle statistiche renderebbe il personaggio uccidendo mostri neutri più veloci.

Preferirei Java, ma atm sono bloccato all'algoritmo.


@Karoly S: Sì, è il mio male, .com -> .eu

Ho lavorato su questo:

Sto controllando il tempo rimanente su ogni oggetto (abilità del giocatore, autoattacco, buff) e seleziono sempre il tempo più breve, memorizzo l'ultimo_tempo e aggiungo il tempo di volta in volta, al turno successivo calcolo il tempo di (tempo- ultima volta)

Se l'oggetto ha il tempo rimanente 0, farà tutto ciò che deve fare.

Non so se sia efficace o meno, ma è il massimo che potrei fare.


1
Potresti avere più fortuna a chiedere nella sezione Sviluppo del sito / sito di Stack Exchange, provare a ottenere una Mod per spostarla, anche se è probabile che lo faranno comunque. Un simulatore di jungling sarebbe piuttosto interessante, ci penserò su e vedrò cosa mi inventerò.
Karoly S,

Grazie per la risposta rapida, il tuo aiuto è molto apprezzato. Suppongo che anche tu sia ungherese?

Assolutamente, questo è qualcosa a cui ho pensato, anche se non in modo approfondito, ma sarei interessato. Il mio approccio iniziale sarebbe vedere se è possibile una versione efficace ma più semplice del tuo # 2. Mi piacerebbe discuterne con te a lungo. E sì, la tua ipotesi sarebbe corretta :)
Karoly S

Suona bene per me, lascerò l'argomento aperto, forse qualcuno ha già un'idea al riguardo. la mia e-mail (etheld presso gwelican dot com)

Suona bene, ci penserò su e ti invierò un'email un po 'più tardi oggi.
Karoly S

Risposte:


1

Alternative alla simulazione fotogramma per fotogramma:

È possibile ottenere una sorta di approssimazione ragionevole per la simulazione mediante una formula come

rawDamage = <some function of strength?)
Damage = rawDamage - enemyArmorReduction
DPS = (attackSpeed * Damage) * enemyArmorMod
myRemainingHP = myDPS / theirHP  - theirDPS / myHP

È inoltre possibile mantenere una coda di spostamento, in modo da simulare per spostamento, non per tick:

// my aspd = 4 attacks per second, his aspd = 3 attacks per second
0.0s : start battle
0.25s: I attack
0.33s: He attacks
0.50s: I attack again
...
1.00s: I attack
1.00s: He attacks
...

La coda di spostamento sarà più accurata, poiché affronta correttamente il fatto che il danno è discreto, non continuo. Ad esempio, se faccio 50 danni a 0 secondi e altri 50 a 1 secondo, il mio DPS sarebbe 50, ma ucciderei un bersaglio da 100 HP in 1 secondo.

@hammar: è vero. più breve è il combattimento, meno accurata sarà una stima basata su DPS.
Jimmy,

Il fatto che il gioco abbia stordimenti e altri debuff renderebbe davvero difficile ottenere uno strumento del genere, perché giocatori diversi potrebbero avere risultati diversi nella loro percentuale di uccisioni. Comunque buona risposta.
Grimshaw,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.