Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    La profondità di un mazzo di carte mischiato

    Salve a tutti...
    Sono alle prime armi (da un pezzo, ma tengo famiglia e faccio fatica a coltivare questo hobby della programmazione in Flash...)
    Ecco il mio problema. Volevo creare un gioco di carte e dopo la fatica di essermi passato allo scanner l'intero mazzo di napoletane ho finalmente istanziato sullo stage i 40 clip (Carta1, Carta2, Carta3, etc...)
    Dopo non poche fatiche (io e gli array non siamo molto amici...) sono riuscito anche a mischiare il mazzo, così:

    onClipEvent (load) {
    //
    //Routine di mescolamento
    //
    // array posizione
    posizione = new Array();
    // posizione del primo clip a sx in alto
    xinit = 0;
    yinit = 0;
    // distanza tra i clip
    xdist = 50;
    ydist = 80;
    // ciclo per riempire l'array
    for (id=0; id<40; id++) {
    posizione[id] = id;
    }
    // ciclo per disporre i clip
    for (id=1; id<41; id++) {
    // numero casuale tra le posizioni restanti
    rnd = random(41-id);
    // indice riga
    r = int(posizione[rnd]/10);
    // indice colonna
    c = posizione[rnd]-r*10;
    // posiziona clip
    _root["Carta"+id]._x = xinit+xdist*c;
    _root["Carta"+id]._y = yinit+ydist*r;
    _root["Carta"+id]._alpha = 100;
    // elimina dall'array, la voce relativa alla posizione
    posizione.splice(rnd,1);
    }
    }

    Il dramma è che le carte dovrebbero apparire sovrapposte le une alle altre ma la loro posizione è però assegnata in maniera casuale. Il risultato è quello che vedete in figura...

    Io vorrei invece che il primo clip in alto a sinistra fosse il più coperto, mentre quello in basso a destra fosse visibile -quindi- interamente...
    Ho cercato di capire qualcosa a proposito dello "swap", ma mi ci sono perso...
    Se poi penso che dovrò swappare qualcosa all'interno di un array mi viene mal di testa...
    Grazie a chiunque sappia darmi una mano...

  2. #2
    Intanto...

    ---> UP <---

    ...poi mi spiego forse un po' meglio...
    Io ho sistemato sullo stage le mie 40 clip come nell'immagine sottostante:

    In sostanza vorrei che fosse mantenuto l'ordine di sovrapposizione dei clip, ma che fosse casuale l'ordine delle carte...
    Se raffrontate questa immagine con quella del post precedente vedrete bene che la cosa non funziona...
    Forse è proprio errato il concetto della routine di mescolamento... boh!...
    Non so proprio che pesci pigliare... :master:

  3. #3
    Ovviamente hanno profondità a caso...dipende da quando si caricano...
    hai usato il metodo load in ActionScript1

    non è per caso che vorresti caricare le jpg dall'esterno?
    altrimenti dalla liberia...dimmi tu.

    incomincio a dirti dall'esterno, che è la soluzione più smart.

    metti tutte le carte in una cartella "carte".

    le jpg hanno come nome carta1.jpg, carta2.jpg, carta3.jpg....
    codice:
    totaleCarte=40
    spazio=20
    for (i=1;i<totaleCarte+1;i++){
    	_root.createEmptyMovieClip("carta"+i,i)
    	_root["carta"+i].loadMovie("mazzo/carta"+i+".jpg","carta"+i)
    	
    	
    	_root["carta"+i]._x=_root["carta"+(i-1)]._x+spazio
    	
    	
    }
    un po' più veloce no?

  4. #4
    Dimenticavo...riguardo al fatto che ogni 10 va a capo...potremmo inserire nel ciclo for un if (i==0) con incremento delle _y e riallineamento delle _x...ma ti consiglio invece di dividere i semi potendoli così gestire autonomamente:
    codice:
    totaleOri=10+1
    totaleSpade=10
    spazio=20
    _root.createEmptyMovieClip ("ori",100)
    for (i=1;i<totaleOri;i++){
    	
    	_root.ori.createEmptyMovieClip("carta"+i,i)
    	_root.ori["carta"+i]._x=0
    	_root.ori["carta"+i]._y=0
    	_root.ori["carta"+i].loadMovie("mazzo/carta"+i+".jpg","carta"+i)
    	
    	
    	_root.ori["carta"+i]._x=_root.ori["carta"+(i-1)]._x+spazio
    	
    	
    }
    _root.createEmptyMovieClip ("spade",200)
    for (i=totaleOri;i<totaleSpade+totaleOri;i++){
    	
    	_root.spade.createEmptyMovieClip("carta"+i,i)
    	_root.spade["carta"+i]._x=0
    	_root.spade["carta"+i]._y=200
    	
    	_root.spade["carta"+i].loadMovie("mazzo/carta"+i+".jpg","carta"+i)
    	
    	
    	_root.spade["carta"+i]._x=_root.spade["carta"+(i-1)]._x+spazio
    	
    	
    }
    l'ho semplificato al massimo...non c'è nemmeno il preloader...però sarebbe meglio farlo

    ciauz

  5. #5
    Mille grazie: decisamente la soluzione è più elegante e veloce...
    Non potrò provarla prima di una settimana (viaggetto... ), ma a naso mi sembra di capire che funzionerà egregiamente...
    Stavo perdendo la speranza, in attesa di una risposta. Grazie di nuovo!

  6. #6
    Originariamente inviato da A&G
    Mille grazie: decisamente la soluzione è più elegante e veloce...
    Non potrò provarla prima di una settimana (viaggetto... ), ma a naso mi sembra di capire che funzionerà egregiamente...
    Stavo perdendo la speranza, in attesa di una risposta. Grazie di nuovo!
    figurati!

    devi solo fare attenziaone ai valori di "i" nel clclo for... siccome deve partire da 10 per gli ori, da 20 nelle spade, da 30...bla bla...
    allor deve essere

    for (i=1;i<totaleOri;i++){
    ovverosia da 1 a 10

    for (i=totaleOri;i<totaleSpade+totaleOri;i++){
    da 11 a 20

    for (i=totaleOri+totaleCoppe;i<totaleSpade+totaleOri+t otaleCoppe;i++){
    da 21 a 30 per le coppe

    ....

    buon lavoro

  7. #7
    Il tempo passa, l'ignoranza aumenta...
    Era da secoli che non provavo a fare qualcosa con Flash e di nuovo mi spiaccico contro gli array ed il mio cervello fritto da lavoro e figliolanza...
    ...ma veniamo a noi...
    Anche se questa volta non si tratta di carte da gioco, possiamo anche fare finta che lo siano.
    Diciamo che ho sempre questo mazzo di 40 carte, ma vorrei che la loro posizione (._x e ._y) dopo il mescolamento fosse fissata da valori che assegno io poichè non sono matematicamente connessi fra loro (nessuna colonna o riga precisa, insomma).
    Per ovviare al problema (in maniera magari poco elegante) ho istanziato 40 coppie di caselle di testo dinamiche in cui ho inserito i valori che vorrei assegnare alle carte via via che vengono estratte. Ogni casella di testo si chiama PosX0, PosY0, PosX1, PosY1, PosX2, PosY2, etc...
    Riprendendo il codice del primo post ho semplicemente sostituito a

    // posiziona clip
    _root["Carta"+id]._x = xinit+xdist*c;
    _root["Carta"+id]._y = yinit+ydist*r;

    ...una cosa tipo:
    _root["Carta"+id]._x = _root["PosX"+id].text
    _root["Carta"+id]._x = _root["PosX"+id].text


    ...ma non funge (o funonzia se siete puristi del linguaggio)!!!
    Capisco che mi mancano le basi e che dovrei dedicarmi solamente alla famiglia, ma se qualcuno può aiutare un povero padre lo ringrazio in anticipo...

  8. #8
    E' ufficiale: sono un idiota!
    ...e pertanto scrivo la soluzione, visto mai passasse a leggere qualcuno come me...

    _root["Carta"+id]._x = _root["PosX"+posizione[rnd]].text
    _root["Carta"+id]._x = _root["PosX"+posizione[rnd]].text


    ...e devo smetterla di mettermi la sera a fare queste cose, chè non ci sto con la testa...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.