2015-06-29 9 views
6

Sto facendo un eroe picker casuale per un gioco, e questo strumento sceglierà in modo casuale eroi per il giocatore. Voglio aggiungere una funzione in cui sceglie gli eroi per l'intera squadra di 3, ma non so come farlo in modo che lo stesso eroe non venga scelto più di una volta. Ecco un esempio del mio codice per scegliere un eroe casuale per un giocatore. Grazie in anticipo!!!!JS: Come creare un selettore casuale che non sceglierà lo stesso elemento due volte?

<script language="JavaScript"> 

function pickhero(){ 
var imagenumber = 16 ; 
var randomnumber = Math.random() ; 
var rand1 = Math.round((imagenumber-1) * randomnumber) + 1; 
images = new Array 
images[1] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/ringo.png" 
images[2] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/krul.png" 
images[3] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/ardan.png" 
images[4] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/saw.png" 
images[5] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/petal.png" 
images[6] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/adagio.png" 
images[7] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/catherine.png" 
images[8] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/koshka.png" 
images[9] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/skaarf.png" 
images[10] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/joule.png" 
images[11] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/glaive.png" 
images[12] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/taka.png" 
images[13] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/celeste.png" 
images[14] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/vox.png" 
images[15] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/fortress.png" 
images[16] = "http://www.vaingloryfire.com/images/wikibase/icon/heroes/rona.png" 
var image = images[rand1] 
document.team1hero1.src = image 
} 
</script> 

risposta

2

Prima di tutto, avrei una schiera di tutti gli eroi al di fuori dell'ambito di pickhero(). Quindi, avrei un secondo array che punterebbe all'array originale e perderà gli elementi quando vengono scelti gli eroi.

Ecco un semplice esempio.

var heroes = ["link1", "link2", "link3", "link4"]; 
var heroesAvailable = []; 
for (var i=0; i<heroes.length; i++) { 
    heroesAvailable.push(i); // [0, 1, 2, 3] 
} 

var heroesChosen = []; 
for (var i=0; i<3; i++) { // choose 3 heroes 
    // the amount of heroes not chosen yet 
    var imageNumber = heroesAvailable.length; 
    var randHero = Math.floor(Math.random()*imageNumber); 

    heroesChosen.push(heroes[heroesAvailable[randHero]]); 

    // remove that hero from the available array 
    heroesAvailable.splice(randHero, 1); 
} 
1

Rimuovere l'immagine selezionata dall'array di immagini.

Quindi selezionare a caso sulla matrice di immagini.

Spero che sia d'aiuto!

0

Basta montare una funzione per voi.

var randElemsWithoutReplace = function (ls_, n) { 
    var ls = ls_.slice(); 
    var selections = []; 
    for (var i = 0; i < n; i++) { 
    selections.push(ls.splice(Math.floor(Math.random()*ls.length), 1)[0]); 
    } 
    return selections; 
}; 

Gli argomenti che si dia mai sono la matrice che si desidera scegliere da e quanti elementi si vuole prendere. Ad esempio se ho

var myArray = ['a', 'b', 'c', 'd', 'e']; 

E voglio tre elementi distinti scelti a caso da tale matrice, avrei scritto

randElemsWithoutReplace(myArray, 3); 

Questa sarebbe restituire un array con tre elementi scelti a caso.

1

Forse è meglio restituire la stringa, invece di utilizzare un target codificato document.team1hero1.src.

function pickhero() { 
    if (!pickhero.images) { 
     pickhero.images = ['ringo', 'krul', 'ardan', 'saw', 'petal', 'adagio', 'catherine', 'koshka', 'skaarf', 'joule', 'glaive', 'taka', 'celeste', 'vox', 'fortress', 'rona']; 
    } 
    var i = Math.random() * pickhero.images.length | 0; 
    return 'http://www.vaingloryfire.com/images/wikibase/icon/heroes/' + pickhero.images.splice(i, 1) + '.png';; 
} 
document.team1hero1.src = pickhero(); 
Problemi correlati