Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: randomizzare un array

  1. #1
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685

    randomizzare un array

    Ciao.

    Dato questo Array:

    lettere = new Array("a","b","c","d","e","f","g","h","i");

    Mi date una mano per randomizzare la sequenza?

    Grazie.
    FaX

  2. #2
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Io ho provato così:

    trace(lettere[random(i)]);

    ma ho bisogno che le lettere non siano duplicate ma semplicemente mischiate.
    FaX

  3. #3
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Allora, ci sono riuscito:

    lettere = new Array("a","b","c","d","e","f","g","h","i");

    poi, all'interno di un ciclo:

    lettere_uscite=new Array(i);
    lettere_uscite.push(lettere.splice(random(lettere. length), 1));
    trace=lettere_uscite[i];

    Ora però mi sorge un problema: facendo così, il primo array è praticamente vuoto perché con splice ho eliminato uno alla volta i suoi elementi.

    Non c'è un modo per avere questo stesso risultato senza però svuotare il primo array? Questo perché devo poter anche richiamare la sequenza originale.
    FaX

  4. #4
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    codice:
    Array.prototype.shuffle = function(num)
    {
    	var a = this.slice(), b = [];
    	for (var i = 0; i < (num != undefined ? num : this.length); i++) {
    		var n = random(a.length);
    		b.push(a[n]);a.splice(n, 1);
    	}
    	return b;
    };
    
    mioArray = ["a","b","c","d","e","f","g","h","i"];
    trace(mioArray);
    trace(mioArray.shuffle());

  5. #5
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Ciao negatyve!

    Mi sembra sia perfetto: la sequenza originale dell'array, non viene modificata al di fuori della funzione, giusto?
    FaX

  6. #6
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    No, viene restituita una copia..

  7. #7
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Grazie 1000!
    FaX

  8. #8
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Avrei bisogno di un altro aiutino...


    Il mio filmato è costituito da un quadratino, che contiene un campo dinamico, che duplico tante volte quante sono le lettere dell'array; sopra ogni quadratino ci deve stare la corrispettiva lettera.
    Nel primo frame ho inizializzato tutte le variabili per creare il ciclo e che mi permettono di posizionare, tutti i cloni, disposti su più righe; nel secondo frame ho il ciclo con il duplicate il posizionamento e l'azione relativa al posizionamento di ogni lettera sopra il quadratino relativo.
    Se richiamo l'array così: this.["quadrato"+i].campo_testo.text=MioArray[i];
    è tutto ok e mi scrive la lettera corrispondente al quadratino ma vorrei anche sistemare ogni lettera della sequenza "shuffle" nello stessa maniera.
    So che è parecchio difficile capirci qualcosa... vuoi che ti scrivo il codice?

    Tipo questo:

    MioArray
    [a] [b] [c] [d] [e] [f]

    MioArray.shuffle();
    [f] [c] [a] [e] [b] [d]
    FaX

  9. #9
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Non ho capito niente.. :)

  10. #10
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Il risultato è una riga composta da 24 quadratini e sopra ognuno di essi c'è la lettera [i] corrispondente.
    Fatto in questa maniera i quadrati non appaiono tutti insieme ma in sequenza.

    nel primo frame ho questo:

    codice:
    set("completo", false);
    set("i", 0);
    set("tot_colonne", 24);
    set("tot_righe", 1);
    set("tot_quadrati", tot_colonne*tot_righe);
    
    Array.prototype.shuffle = function(num){
    	var a = this.slice(), b = [];
    	for (var i = 0; i < (num != undefined ? num : this.length); i++) {
    		var n = random(a.length);
    		b.push(a[n]);a.splice(n, 1);
    	}
    	return b;
    };
    
    set("lettere", ["i","n","f","o","@","s","i","t","o","i","n","t","e","r","n","e","t"]);
    trace(lettere);
    trace(lettere.shuffle());
    
    quadrato._visible=false;

    nel secondo frame ho questo:

    codice:
    //numero corrente di riga
    set("num_riga", Math.floor(i/tot_colonne));
    
    quadrato.duplicateMovieClip("quadrato"+i, i);
    
    //identifico il numero dell'oggetto
    nome_clip=this["quadrato"+i]._name;
    numero_clip=nome_clip.split("quadrato").join("");
    
    //definisco le dimensioni dell'oggetto come variabili
    altezza_oggetto=this["quadrato"+i]._height;
    larghezza_oggetto=this["quadrato"+i]._width;
    
    
    this["quadrato"+i]._y=num_riga*altezza_oggetto;
    this["quadrato"+i]._x=(larghezza_oggetto*i)-(larghezza_oggetto*tot_colonne*num_riga);
    
    
    this["quadrato"+i].lettera_singola.text=lettere.shuffle();
    nel terzo frame ho questo:

    codice:
    i++;
    if(i<tot_quadrati){
    	gotoAndPlay(2);
    }else{
    	stop();
    }
    FaX

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.