Timer

Roien

Grünschnabel
Moin, ich bin grade dabei sowas wie Candy Crush zu programmieren:

1651524324241.png

Wenn man 3 Diamanten in einer Reihe hat verschwinden alle Diamanten, wenn es freie Felder gibt werden die Diamanten nach unten geschoben und in der Oberen Reihe spawnen neue, das passiert dann bis alles wieder voll ist...
Problem ist dass es natürlich so schnell geht dass man es nicht ansatzweise sieht und man teilweise nicht weiß was genau passiert. Ich wollte jetzt es so machen dass immer wenn nach unten geschoben wird, was entfernt wird, neue Diamanten gespawnt werden das Programm kurz "wartet". Problem ist dass das ganze Programm "wartet"

Heißt das Programm stoppt und zack wurde alles verschoben, hier mal kurz der code:
Java:
do {
    timer.schedule(new TimerTask() {

        public void run() {
            entfernedreier(); // entfernt alle Diamanten wenn 3 nebeneinander sind
        }

    }, 1000);
    update();

    timer.schedule(new TimerTask() {

        public void run() {
            schieben(); //schiebt (das Feld darunter frei ist) die Diamanten nach unten
        }

    }, 1000);
    update();
    do {
        timer.schedule(new TimerTask() {

            public void run() {
                spawneneu(); //Spawnt in der Obersten Reihe (wenn das Feld frei ist neue Diamanten)
            }

        }, 1000);
        update();

        timer.schedule(new TimerTask() {

            public void run() {
                schieben(); //schiebt (das Feld darunter frei ist) die Diamanten nach unten
            }

        }, 1000);
        update();

    }while(leeresfeldervorhanden()); // "sucht" ob es noch ein Freies Feld gibt
 } while(checkdreiervorhanden()); // "sucht" ob irgendwo 3 gleiche Diamanten nebeneinander sind

//Hier noch die Methode Update:

private void update() {
    for (int m = 0; m < JbSpiel.length; m++) {
        for (int n = 0; n < JbSpiel.length; n++) {
            switch (feld[m][n]) {
                case 0:
                    JbSpiel[m][n].setIcon (new ImageIcon (getClass().getResource("Blau.png")));
                    break;
                case 1:
                    JbSpiel[m][n].setIcon (new ImageIcon (getClass().getResource("Gruen.png")));
                    break;
                case 2:
                    JbSpiel[m][n].setIcon (new ImageIcon (getClass().getResource("Orange.png")));
                    break;
                case 3:
                    JbSpiel[m][n].setIcon (new ImageIcon (getClass().getResource("Rot.png")));
                    break;
                default:
                    JbSpiel[m][n].setIcon (new ImageIcon (getClass().getResource("Nichts.png")));
                    break;
            }
        }
    }
    lbMoves.setText(""+moves);
    repaint();
}


Irgendwie will das Programm nicht z.B. schieben, warten, dann die Methode Update aufrufen und ausführen lassen usw.
Ich hoffe man kann verstehen was mein Problem ist.
Ich denke dass der Timer das komplette Programm (und dann auch die Methdoe Update) kurz pausiert oder so was.
(Sollte ich lieber einen anderen Timer verwenden oder vielleicht nur irgendwas kleines im Code ändern?)
 
Zuletzt bearbeitet: