2012-04-26 6 views
6

Ho una domanda difficile che ho guardato in un paio di volte, senza capire che fuori.funzione random: valori più alti appaiono meno spesso di quanto inferiore

Alcuni retroscena: sto creando un gioco RPG basato sul testo in cui i giocatori combattono contro animali/mostri, ecc. Funziona come qualsiasi altro gioco in cui colpisci un certo numero di punti ferita l'uno sull'altro ogni round.

Il problema: Sto usando la funzione casuale in php per generare il valore finale del colpo, a seconda dei livelli, armature e tale. Ma mi piacerebbe che i valori più alti (come il max hit) appaiano meno spesso dei valori più bassi.

Questo è un esempio-grafico:

Example graph

Come posso riprodurre qualcosa di simile utilizzando PHP e il rand funzione? Quando si digita rand(1,100), ogni numero ha la stessa possibilità di essere prelevato.

La mia idea è questa: Fare un 2 ° grado (o funzione quadratica) e utilizzare il numero casuale (x) per fare il calcolo.

Questo lavoro come vorrei?

la questione è un po 'complicato, per favore fatemelo sapere se desideri ulteriori informazioni e dettagli.

+1

Dai un'occhiata a [come influenzare un generatore di numeri casuali] (http://stackoverflow.com/questions/1858364/how-to-bias-a-random-number-generator). – deceze

+0

Se si desidera che i valori più alti appaiano meno frequentemente dei valori inferiori, il grafico deve essere invertito no? Immagino che l'asse X sia il numero e l'asse Y la possibilità di apparire. – pomeh

risposta

1

prega, un'occhiata a questo articolo beatiful: http://www.redblobgames.com/articles/probability/damage-rolls.html

ci sono diagrammi interattivi considerando dadi di rotolamento e la percentuale di risultati. Questo dovrebbe essere molto utile per te.

prestare attenzione a questo tipo di numeri casuali di laminazione:

roll1 = rollDice(2, 12); 
roll2 = rollDice(2, 12); 
damage = min(roll1, roll2); 

Questo dovrebbe dare quello che cercate.

0

OK, ecco la mia idea:

Diciamo che hai un array di elementi (a,b,c,d) e non sarà per scegliere a caso uno di loro. Fare un rand(1,4) per ottenere l'indice di elementi casuali significherebbe che tutti gli elementi hanno le stesse possibilità di apparire. (25%)

Ora, diciamo che prendiamo questo array: (a,b,c,d,d).

Qui abbiamo ancora 4 elementi, ma non ogni uno di loro ha le stesse possibilità di apparire.

  • a, b, c: 20%
  • d: 40%

Oppure, prendiamo questa matrice:

(1,2,3,...,97,97,97,98,98,98,99,99,99,100,100,100,100)

Hint : In questo modo non solo distorce l'algoritmo di generazione casuale dei numeri, ma in realtà imposti la probabilità di apparizione desiderata di ciascuno (o di un intervallo di numeri).


Quindi, è così che vorrei andare a tale proposito:

Se si desidera che i numeri da 1 a 100 (con i numeri più alti che appaiono più di frequente, ottenere un numero casuale da 1 a 1000 e associarlo una gamma più ampia. Ad esempio

rand = 800-1000 => rand/10 (80->100) 
rand = 600-800 => rand/9 (66->88) 
... 

o qualcosa del genere. (è possibile utilizzare qualsiasi operazione matematica si immagina, modulo o qualsiasi altra cosa ... e giocare con l'algoritmo). mi auguro che si ottiene la mia idea.

0.123.

Buona fortuna! :-)

Problemi correlati