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.