Realizzare Puzzle Bobble (Bust a Move) [3 di ?]

Oggi proverò a risolvere il problema delle Sfere Sospese, ovvero di tutte quelle sfere che, non avendo una connessione con il soffitto del quadro di gioco, devono cadere giù.

Non è un compito molto difficile, a questo punto abbiamo già la nostra bella Griglia (creata nella Lezione 1) e siamo già in grado di far esplodere i gruppi di colore uguale (grazie alla Lezione 2)… Non ci rimane che continuare da lì.Come distinguere le Sfere collegate al soffitto dalle Sfere sospese nel nulla?

Le Sfere che si trovano direttamente collegate al soffitto sono facilmente distinguibili, basta controllare la coordinata y cui si trovano. Per comodità ho deciso che l’altezza del soffitto si trova alla coordinata y = 0. Tutte le Sfere con Proprietà y pari a zero sono sicuramente collegate al soffitto… ma le altre?

La soluzione che ho pensato di adottare si serve di un elenco (un Array).

All’inizio l’Array contiene soltanto le Sfere con Proprietà y = 0, cioé quelle fisicamente collegate al soffitto. Un ciclo While si occupa di inserire in coda all’Array tutte le Sfere che vengono trovate nelle vicinanze di quelle già controllate e al contempo rimuove dall’Array le Sfere già esaminate. Alla fine l’Array sarà vuoto e il controllo sarà stato completato su tutte le sfere contigue, a catena.

Tutte le Sfere che saranno rimaste fuori da questo controllo saranno naturalmente identificabili come “sospese nel vuoto” e per questo saranno eliminate.

Per spiegare meglio questa “reazione a catena” ho preparato quattro immagini in sequenza:

Le sfere che sono rimaste grigie nell’immagine sono le sfere da eliminare.

In realtà questo processo viene eseguito una Sfera per volta, senza ripetizioni, ma il concetto è esattametne quello illustrato.

In ActionScript questa cosa è gestita in questo modo:

private function markIsolatedBubbles() {
    var checkBubblesArray:Array = new Array();
    for (var i:uint = 0; i < this.numChildren; i++) {
        var b:Sphere = this.getChildAt(i) as Sphere;
        b.topconnected = 1;
        if (b.y == 0 && b.lifeStatus == 'alive') {
            checkBubblesArray.push(b);
        }
    }
    while (checkBubblesArray.length > 0) {
        var theSphere:Sphere = checkBubblesArray[0];
        theSphere.topconnected = 0;
        var neighborsNames:Array = getNeighborsNames(theSphere);
        for (i = 0; i<neighborsNames.length; i++) {
            var nBubble:Sphere = this.getChildByName(neighborsNames[i]) as Sphere;
            if (nBubble && nBubble.topconnected != 0 && nBubble.lifeStatus == 'alive') {
                checkBubblesArray.push(nBubble);
            }
        }
        checkBubblesArray.shift();
    }
}

Alla fine dell’esecuzione di questo Metodo, che si trova all’interno delle Classe BubbleGrid, le Sfere sono state “marcate” utilizzando una proprietà creata ad hoc per l’occasione: topconnected.

Il filmato ottenuto a questo punto non è molto diverso da quello della lezione precedente, le Sfere sono ancora sotto il controllo del Mouse… la banda grigia in alto indica la zona soffitto, ovvero la zona in cui si trovano le Sfere che hanno un diretto contatto con il soffitto. Inserendo una Sfera all’interno dello spazio bianco, senza alcuna connessione diretta o indiretta con il soffitto, cadranno giù.

No flash, please!

Purtroppo Adobe Flash Player non è più benvoluto come una volta, per questo motivo ho disabilitato tutte le applicazioni Flash presenti sul sito. Se vuoi puoi comunque scaricare il file SWF che si trovava qui, clicca qui per far partire il download

Inserisci nome e indirizzo email per iscriverti alla mia newsletter e ricevere il file immediatamente.
In breve: i dati inseriti in questo modulo saranno utilizzati per inviarti il link per scaricare il file che desideri, saranno conservati da un servizio esterno che si chiama MailChimp e in qualsiasi momento potrai cancellare la tua iscrizione al seguente link: https://danielealessandra.us7.list-manage.com/unsubscribe?u=546bebc381e525372d2120083&id=326af7d230.

Puoi leggere l'informativa completa cliccando sul link Privacy Policy che trovi dovunque su questa pagina, e comunque visitando in qualsiasi momento l'indirizzo https://www.danielealessandra.com/privacy-policy/
Ho letto e accetto l’informativa sulla privacy.

 

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.