Restart in App einbauen

  • 3 Antworten
  • Neuester Beitrag
Diskutiere Restart in App einbauen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
JanvanB

JanvanB

Neues Mitglied
Hallo,

Bin ein blutiger Anfänger im programmieren und hab jetzt endlich mal eine App zusammen bekommen die bis zum Game Over geht.
Wie kriege ich es jetzt aber hin wenn das Spiel zu Ende ist es wieder neu zu starten? Das Spiel ist zu Ende und man kann auf dem Bildschirm nichts mehr drücken um das Spiel wieder zu starten. Was muss ich da tun?????

Ich starte das Spiel mit einem Button (btn) dann kann ich alle Käfer zerdrücken (OnClick Listener auf die Käfer drücken) und dann ist das Game over.
Welchen Befehl benötige ich jetzt dass das Spiel wieder von neuem beginnt (würde gerne den wbtn button dafür nutzen)?

Vielen Dank im Voraus!

Main Activity:

public class MainActivity extends AppCompatActivity {

// Umschalter
private boolean Start = true;

// "Game-Speed"
private int Dauer = 3000;

// Spiel-Objekt, Anzahl der Figuren
private GameView Spiel;
private int FZahl = 10;

// Handler-Objekt
private Handler handler = new Handler();

// Runnable-run-Strukturen
private Runnable runnable1 = new Runnable() {
@override
public void run() {
// Alle "geraden" Insekten
for (int nr = 0; nr < FZahl; nr+=2) {
// nur wenn das Insekt noch lebt
if (!Spiel.isKilled(nr))
Spiel.moveObject(nr, R.drawable.insekt2);
}
handler.postDelayed(this, Dauer/2);
}
};
private Runnable runnable2 = new Runnable() {
@override
public void run() {
// Alle "ungeraden" Insekten
for (int nr = 1; nr < FZahl; nr+=2) {
// nur wenn das Insekt noch lebt
if (!Spiel.isKilled(nr))
Spiel.moveObject(nr, R.drawable.insekt2);
}
handler.postDelayed(this, Dauer/2);
}
};

// Layout-Verknüpfungen
private void setImageView() {
ConstraintLayout container = (ConstraintLayout) findViewById(R.id.container);
for (int nr = 0; nr < FZahl; nr++) {
Spiel.Figur[nr] = new ImageView(container.getContext());
container.addView(Spiel.Figur[nr]);
Spiel.setObject(nr);
}
}

@SuppressLint("ClickableViewAccessibility")
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Spiel, "Insekten", Hintergrund, Anzeigen
Spiel = new GameView(this, FZahl);
Spiel.Hgrund = (ImageView) findViewById(R.id.imageView);
Spiel.Hgrund.setScaleType(ImageView.ScaleType.FIT_XY);
Spiel.btn = (Button) findViewById(R.id.button);
Spiel.wbtn = (Button) findViewById(R.id.button2);
//Spiel.wbtn.setVisibility(View.INVISIBLE);

final TextView Anzeige1 = (TextView) findViewById(R.id.textView);
final TextView Anzeige2 = (TextView) findViewById(R.id.textView2);
setImageView();
Spiel.setDelay(Dauer);
/*// Figuren anzeigen
for (int nr = 0; nr < FZahl; nr++)
Spiel.showObject(nr, R.drawable.insekt2); */

// Touch-Struktur
Spiel.btn.setOnTouchListener(new View.OnTouchListener() {
@override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (Start) {
Spiel.btn.setVisibility(View.INVISIBLE);
//Spiel.wbtn.setVisibility(View.INVISIBLE);
handler.post(runnable1);
handler.postDelayed(runnable2, Dauer/2);
for (int nr = 0; nr < FZahl; nr++)
Spiel.showObject(nr, R.drawable.insekt2);
}
// Ausschalten
Start = false;
// Rückgabewert
return false;
}
});
for (int nr = 0; nr < FZahl; nr++) {
Spiel.Figur[nr].setOnClickListener(new View.OnClickListener() {
@override
public void onClick(View view) {
// falls noch nicht gestartet, Methode verlassen
if (Start) return;
// Zähler auf null
int Treffer = 0;
// getroffenes Insekt ermitteln
for (int nr = 0; nr < FZahl; nr++) {
// ggf. "killen"
if (view == (ImageView) Spiel.Figur[nr])
Spiel.killObject(nr, R.drawable.insekt2x);
// mitzählen
if (Spiel.isKilled(nr)) Treffer++;
}
// ggf. Spiel-Ende anzeigen und beenden
if (Treffer == FZahl) {
Anzeige2.setText(R.string.game_over);
handler.removeCallbacks(runnable1);
handler.removeCallbacks(runnable2);
Spiel.wbtn.setVisibility(View.VISIBLE);
}
// Punkte anzeigen
Anzeige1.setText(String.valueOf(Treffer));
}
});
}
}

}
 
J

jogimuc

Stammgast
Hallo
Einen einfachen Befehl gibt es nicht.
Dazu wirst du deine Stucktur schon etwas umbauen müssen.

Du willst den wbtn Button benutzen OK nur einen Klicklistener hast du noch nicht.
Wenn du also den Button wirklich im Layout hast wird er nicht gehen.

Erstmal brauchst du dafür einen Listener um auch Aktionen beim Klick wenn er sichtbar ist auszuführen.
Zb. musst du da die anfangs werte wider Herstellen, den btn Button sichtbar machen......


Den Spielablaufteil in eine Methode packen. „for schleife“
Das Setzen initialisieren auch in eine Methode packen.

Finde es aber nicht sinnvoll die Button in dem Spiel Objekt zu halten.
Denn wenn du ein neues Game Objekt erstellst müsstest du auch wider die Button erstellen.

Zumindest der wbtn sollte nicht in dem Objekt Spiel ein.
wiso sind die Button überhaupt in dem Objekt?



So etwas Anregung hast du jetzt .

Gutes gelingen.
 
Zuletzt bearbeitet:
JanvanB

JanvanB

Neues Mitglied
Hallo jogimuc,

Danke schon mal für das Feedback!
Wenn ich den Start Button(btn) und den Wiederholung- Button (wbtn) raus nehme kann ich ja mit dem Hintergrund (Hgrund) starten und das Spiel würde beginnen. Aber wenn ich dann alle 10 Käfer/Figuren getroffen habe ist es ja dann zu Ende.
Was müsste ich denn dann ändern/einfügen in der Main Activity damit es sich wieder starten lässt und alles wieder von vorne beginnen kann?
Ich stehe hier echt total auf dem Schlauch.......

Das wäre dann der Programmtext in der Main Activity (Start mit dem Hintergrund anstatt Button):

public class MainActivity extends AppCompatActivity {

// Umschalter
private boolean Start = true;

// "Game-Speed"
private int Dauer = 3000;

// Spiel-Objekt, Anzahl der Figuren
private GameView Spiel;
private int FZahl = 10;

// Handler-Objekt
private Handler handler = new Handler();

// Runnable-run-Strukturen
private Runnable runnable1 = new Runnable() {
@override
public void run() {
// Alle "geraden" Insekten
for (int nr = 0; nr < FZahl; nr+=2) {
// nur wenn das Insekt noch lebt
if (!Spiel.isKilled(nr))
Spiel.moveObject(nr, R.drawable.insekt2);
}
handler.postDelayed(this, Dauer/2);
}
};
private Runnable runnable2 = new Runnable() {
@override
public void run() {
// Alle "ungeraden" Insekten
for (int nr = 1; nr < FZahl; nr+=2) {
// nur wenn das Insekt noch lebt
if (!Spiel.isKilled(nr))
Spiel.moveObject(nr, R.drawable.insekt2);
}
handler.postDelayed(this, Dauer/2);
}
};

// Layout-Verknüpfungen
private void setImageView() {
ConstraintLayout container = (ConstraintLayout) findViewById(R.id.container);
for (int nr = 0; nr < FZahl; nr++) {
Spiel.Figur[nr] = new ImageView(container.getContext());
container.addView(Spiel.Figur[nr]);
Spiel.setObject(nr);
}
}

@SuppressLint("ClickableViewAccessibility")
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


// Spiel, "Insekten", Hintergrund, Anzeigen
Spiel = new GameView(this, FZahl);
Spiel.Hgrund = (ImageView) findViewById(R.id.imageView);
Spiel.Hgrund.setScaleType(ImageView.ScaleType.FIT_XY);
Spiel.btn = (Button) findViewById(R.id.button);
Spiel.wbtn = (Button) findViewById(R.id.button2);
//Spiel.wbtn.setVisibility(View.INVISIBLE);

final TextView Anzeige1 = (TextView) findViewById(R.id.textView);
final TextView Anzeige2 = (TextView) findViewById(R.id.textView2);
setImageView();
Spiel.setDelay(Dauer);
/*// Figuren anzeigen
for (int nr = 0; nr < FZahl; nr++)
Spiel.showObject(nr, R.drawable.insekt2); */

// Touch-Struktur
Spiel.Hgrund.setOnTouchListener(new View.OnTouchListener() {
@override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (Start) {
//Spiel.btn.setVisibility(View.INVISIBLE);
//Spiel.wbtn.setVisibility(View.INVISIBLE);
handler.post(runnable1);
handler.postDelayed(runnable2, Dauer/2);
for (int nr = 0; nr < FZahl; nr++)
Spiel.showObject(nr, R.drawable.insekt2);
}
// Ausschalten
Start = false;
// Rückgabewert
return false;
}
});
for (int nr = 0; nr < FZahl; nr++) {
Spiel.Figur[nr].setOnClickListener(new View.OnClickListener() {
@override
public void onClick(View view) {
// falls noch nicht gestartet, Methode verlassen
if (Start) return;
// Zähler auf null
int Treffer = 0;
// getroffenes Insekt ermitteln
for (int nr = 0; nr < FZahl; nr++) {
// ggf. "killen"
if (view == (ImageView) Spiel.Figur[nr])
Spiel.killObject(nr, R.drawable.insekt2x);
// mitzählen
if (Spiel.isKilled(nr)) Treffer++;
}
// ggf. Spiel-Ende anzeigen und beenden
if (Treffer == FZahl) {
Anzeige2.setText(R.string.game_over);
handler.removeCallbacks(runnable1);
handler.removeCallbacks(runnable2);

}
// Punkte anzeigen
Anzeige1.setText(String.valueOf(Treffer));
}
});
}
}

}
 
J

jogimuc

Stammgast
Hallo
Wenn du Code Postest dann bitte in dem dafür vorgesehen Blog. Dann bleibt auch die Formatierung erhalten.

Ich sagte dir ja schon das du mit der Stuckatur wie du sie hast nicht weit kommen wirst.

Erstelle dir eine Methode und Packe die Initialisierung und Spiel Ablauf dort rein.
In der onCreate erstellst du deinen wbtn Button mit Listener.
Machst den erstmal unsichtbar.
Dann ruft du die Methode auf , Initialisiert und startest somit das Spiel.
Am ende des Spiels blendest somit den wbtn Button ein und in dem Listener rufst du wider die Methode auf. So in etwa sollte es gehen.

Der wbtn Button sollte aber nicht in dem Spiel Objekt sein sondern eine Klassen Variable. Und der Listener in der onCreate.

Ps. Von den Tipps die ich dir zuerst gegeben habe hast du leider nichts umgesetzt.
Nicht mal eine listener für deinen neu starten Button erstellt. Denn ohne klicklistener wird der Button nie etwas machen können.


Code:
public class MainActivity extends AppCompatActivity {

    // Umschalter
    private boolean Start = true;

    // "Game-Speed"
    private int Dauer = 3000;

    // Spiel-Objekt, Anzahl der Figuren
    private GameView Spiel;
    private int FZahl = 10;
    private Button wbtn;

    // Handler-Objekt
    private Handler handler = new Handler();

    // Runnable-run-Strukturen
    private Runnable runnable1 = new Runnable() {
        @override
        public void run() {
// Alle "geraden" Insekten
            for (int nr = 0; nr < FZahl; nr += 2) {
// nur wenn das Insekt noch lebt
                if (!Spiel.isKilled(nr))
                    Spiel.moveObject(nr, R.drawable.insekt2);
            }
            handler.postDelayed(this, Dauer / 2);
        }
    };
    private Runnable runnable2 = new Runnable() {
        @override
        public void run() {
// Alle "ungeraden" Insekten
            for (int nr = 1; nr < FZahl; nr += 2) {
// nur wenn das Insekt noch lebt
                if (!Spiel.isKilled(nr))
                    Spiel.moveObject(nr, R.drawable.insekt2);
            }
            handler.postDelayed(this, Dauer / 2);
        }
    };

    // Layout-Verknüpfungen
    private void setImageView() {
        ConstraintLayout container = (ConstraintLayout) findViewById(R.id.container);
        for (int nr = 0; nr < FZahl; nr++) {
            Spiel.Figur[nr] = new ImageView(container.getContext());
            container.addView(Spiel.Figur[nr]);
            Spiel.setObject(nr);
        }
    }

    @SuppressLint("ClickableViewAccessibility")
    @override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wbtn = (Button) findViewById(R.id.button2);
        wbtn.setVisibility(View.INVISIBLE);
        wbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wbtn.setVisibility(View.INVISIBLE);
                newGame();
            }
        });
        newGame();
    }


    void newGame() {
        // Spiel, "Insekten", Hintergrund, Anzeigen
        Spiel = new GameView(this, FZahl);
        Spiel.Hgrund = (ImageView) findViewById(R.id.imageView);
        Spiel.Hgrund.setScaleType(ImageView.ScaleType.FIT_XY);
        Spiel.btn = (Button) findViewById(R.id.button);

        final TextView Anzeige1 = (TextView) findViewById(R.id.textView);
        final TextView Anzeige2 = (TextView) findViewById(R.id.textView2);
        setImageView();
        Spiel.setDelay(Dauer);
/*// Figuren anzeigen
for (int nr = 0; nr < FZahl; nr++)
Spiel.showObject(nr, R.drawable.insekt2); */

// Touch-Struktur
        Spiel.btn.setOnTouchListener(new View.OnTouchListener() {
            @override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (Start) {
                    Spiel.btn.setVisibility(View.INVISIBLE);
//Spiel.wbtn.setVisibility(View.INVISIBLE);
                    handler.post(runnable1);
                    handler.postDelayed(runnable2, Dauer / 2);
                    for (int nr = 0; nr < FZahl; nr++)
                        Spiel.showObject(nr, R.drawable.insekt2);
                }
// Ausschalten
                Start = false;
// Rückgabewert
                return false;
            }
        });
        for (int nr = 0; nr < FZahl; nr++) {
            Spiel.Figur[nr].setOnClickListener(new View.OnClickListener() {
                @override
                public void onClick(View view) {
// falls noch nicht gestartet, Methode verlassen
                    if (Start) return;
// Zähler auf null
                    int Treffer = 0;
// getroffenes Insekt ermitteln
                    for (int nr = 0; nr < FZahl; nr++) {
// ggf. "killen"
                        if (view == (ImageView) Spiel.Figur[nr])
                            Spiel.killObject(nr, R.drawable.insekt2x);
// mitzählen
                        if (Spiel.isKilled(nr)) Treffer++;
                    }
// ggf. Spiel-Ende anzeigen und beenden
                    if (Treffer == FZahl) {
                        Anzeige2.setText(R.string.game_over);
                        handler.removeCallbacks(runnable1);
                        handler.removeCallbacks(runnable2);
                        wbtn.setVisibility(View.VISIBLE);
                    }
// Punkte anzeigen
                    Anzeige1.setText(String.valueOf(Treffer));
                }
            });
        }


    }

}
 
Zuletzt bearbeitet:
Ähnliche Themen - Restart in App einbauen Antworten Datum
6
17
6