Formula matematica per un videogioco?
Buonasera a tutti!
Mi presento:
Mi chiamo danilo ho 27 anni e sto cercando di creare un videogioco...
Questo videogioco sarà un classico strategico a turni, ma mi son ritrovato in un intoppo matematico...
Così, non riuscendo a venirne a capo, ho pensato di chiedere a voi che conoscete la matematica molto meglio di quanto la conosca io di darmi una mano...
Ecco il problema:
Nel videogioco avremo diversi personaggi pronti a scontrarsi in duelli a turni e cercavo di estrapolare una formula per il calcolo dei danni partendo da questi valori numerici.
In attacco:
Attacco e Precisione relative al pg
Danno, precisione e perforazione relative all' arma.
In Difesa:
Difesa e Velocità relative al nemico
Armatura relativa allo' equipaggiamento.
In pratica velocità e precisione indicherebbero la probabilità di schivare/colpire, mentre il danno inflitto da attacco e danno arma sarebbe attutito dalla Difesa e verrebbe "filtrato" dall armatura, aggirabile dal parametro perforazione.
Purtroppo non riesco a tirare fuori una vera e propria formula matematica...
Ovviamente tutte queste statistiche devono essere ancora settate, quindi posso avere un qualsiasi valore numerico.
ciò che è più importante è trovare una formula che raramente dia come risultato 0 e soprattutto che non dia mai valori negativi...
Sperando in un aiuto da parte di voi tecnici, saluto e ringrazio anticipatamente ogni suggerimento...
Mi presento:
Mi chiamo danilo ho 27 anni e sto cercando di creare un videogioco...
Questo videogioco sarà un classico strategico a turni, ma mi son ritrovato in un intoppo matematico...
Così, non riuscendo a venirne a capo, ho pensato di chiedere a voi che conoscete la matematica molto meglio di quanto la conosca io di darmi una mano...
Ecco il problema:
Nel videogioco avremo diversi personaggi pronti a scontrarsi in duelli a turni e cercavo di estrapolare una formula per il calcolo dei danni partendo da questi valori numerici.
In attacco:
Attacco e Precisione relative al pg
Danno, precisione e perforazione relative all' arma.
In Difesa:
Difesa e Velocità relative al nemico
Armatura relativa allo' equipaggiamento.
In pratica velocità e precisione indicherebbero la probabilità di schivare/colpire, mentre il danno inflitto da attacco e danno arma sarebbe attutito dalla Difesa e verrebbe "filtrato" dall armatura, aggirabile dal parametro perforazione.
Purtroppo non riesco a tirare fuori una vera e propria formula matematica...
Ovviamente tutte queste statistiche devono essere ancora settate, quindi posso avere un qualsiasi valore numerico.
ciò che è più importante è trovare una formula che raramente dia come risultato 0 e soprattutto che non dia mai valori negativi...
Sperando in un aiuto da parte di voi tecnici, saluto e ringrazio anticipatamente ogni suggerimento...
Risposte
In realtà puoi anche dare un occhiata al sistema di combattimento di D&D o in generale ai d20. I giochi di ruolo su carta sono comunque ottimi esempi di sistemi di combattimento di questo tipo. Anche se non capisco bene cosa sia precisione dell'arma, è in qualche modo legato a quanto l'attacco sia concentrato su un solo punto? Oppure è una caratteristica più che altro delle armi a distanza?
Tieni conto che in generale puoi benissimo avere più numeri random. Per farti un esempio banale, un d8 (dado 8) non ha la stessa distribuzione di 2d4 (due dadi 4). Infatti:
d8
1: 1/8
2: 1/8
3: 1/8
4: 1/8
5: 1/8
6: 1/8
7: 1/8
8: 1/8
2d4
1: 0/16
2: 1/16 (1+1)
3: 2/16 (2+1, 2+1)
4: 3/16 (2+2, 3+1, 1+3)
5: 4/16 (3+2, 3+2, 4+1, 1+4)
6: 3/16 (3+3, 4+2, 2+4)
7: 2/16 (4+3, 3+4)
8: 1/16 (4+4)
Come vedi il secondo ha una struttura più a campana del primo. L'uso di tre dadi per esempio rende gli eventi centrali ancora più probabili.
Tieni però conto che questi due codici C fanno la stessa cosa:
I sistemi possono in teoria essere anche ben più complessi se visti da un punto di vista statistico. Il vero problema non è comunque creare una formula del danno ma bilanciare i vari personaggi.
Tieni conto che in generale puoi benissimo avere più numeri random. Per farti un esempio banale, un d8 (dado 8) non ha la stessa distribuzione di 2d4 (due dadi 4). Infatti:
d8
1: 1/8
2: 1/8
3: 1/8
4: 1/8
5: 1/8
6: 1/8
7: 1/8
8: 1/8
2d4
1: 0/16
2: 1/16 (1+1)
3: 2/16 (2+1, 2+1)
4: 3/16 (2+2, 3+1, 1+3)
5: 4/16 (3+2, 3+2, 4+1, 1+4)
6: 3/16 (3+3, 4+2, 2+4)
7: 2/16 (4+3, 3+4)
8: 1/16 (4+4)
Come vedi il secondo ha una struttura più a campana del primo. L'uso di tre dadi per esempio rende gli eventi centrali ancora più probabili.
Tieni però conto che questi due codici C fanno la stessa cosa:
unsigned d1 = rand()%4; unsigned d2 = rand()%4; unsigned r = d1 + d2;
unsigned d = rand()%16; unsigned r; if(d > 1) { if(d > 3) { if(d>6) { if(d>10) { if(d>13) { if(d == 16) r = 8; else r = 7; } else r = 6; } else r = 5; } else r = 4; } else r = 3; } else r = 2;
I sistemi possono in teoria essere anche ben più complessi se visti da un punto di vista statistico. Il vero problema non è comunque creare una formula del danno ma bilanciare i vari personaggi.
ecco, cercavo proprio di creare una formula simile a quella di Pokemon, partendo dalle statistiche di cui sopra...
Non so esattamente come potrebbe funzionare il sistema di combattimento nei videogiochi, però una maniera che mi viene in mente a me di farlo è con i numeri random... Non so in che linguaggio lo stai programmando, ma penso che sia una cosa fattibile in praticamente tutti i linguaggi e potrebbe somigliare a qualcosa del genere (assumendo che Difesa, Velocità e Precisione siano in percentuale):
Sappi che comunque questo è un esempio molto generico e improvvisato...
Un esempio serio è invece nel gioco di Pokémon, dove il danno è calcolato come spiegato brevemente qui
If Random(1, 100) < (Velocità/Precisione) then attacco = 0 ;In questa maniera dal prodotto in basso il risultato è 0 EndIf Danno = Attacco*Arma*Difesa Punti_Salute -= Danno
Sappi che comunque questo è un esempio molto generico e improvvisato...
Un esempio serio è invece nel gioco di Pokémon, dove il danno è calcolato come spiegato brevemente qui