2013-05-02 7 views
6

Ok, immagino che sto creando un gioco Pokemon in JavaScript. Ho un oggetto come questo ...Ottieni elementi casuali per array in base a diverse probabilità?

pokemon = { 
    "pikachu": {hp: 100, probability: 0.1}, 
    "squirtle": {hp: 90, probability: 0.2} 
}; 

Io fondamentalmente bisogno di una funzione per selezionare un pokemon nell'oggetto a caso, ma anche in base alla probabilità. Quindi, in questo caso, è più probabile che le funzioni selezionino uno "squirtle" poiché la sua probabilità è maggiore di "pikachu".

+0

Di cosa hai bisogno? Una funzione JavaScript che restituisce un numero casuale? Temo che dovrai implementare la logica da solo, poiché ci sono diversi modi per ottenere ciò che desideri. – acdcjunior

+1

@ Jean-Bernard Peller è il miglior metodo da usare? – Danny

risposta

6

Vorrei scorrere l'array pokemon e sommare tutte le probabilità. Chiama questo total

Quindi generare un valore compreso tra 0 e total. Chiama questo randVal

Quindi passa attraverso, sommando nuovamente le probabilità. Chiama questo secondTotal
Il primo pokemon la cui probabilità potrebbe spingere secondTotal sopra randVal è il tuo Pokemon selezionato.

+0

OK grazie, farò un tentativo – Danny

1
function pickAWinningItem(data) { 
    var winner = Math.random(); 
    var threshold = 0; 
    for (let i = 0; i < data.length; i++) { 
     threshold += parseFloat(data[i].prob); 
     if (threshold > winner) { 
      return data[i] 

     } 
    } 
} 

La somma di tutte le probabilità deve essere uguale a 1. Con questa funzione è impilare le probabilità uno sopra l'altro e restituire l'articolo, che il numero casuale è la gamma della sua probabilità.