Wie kann ich ein Spiel nach dem Timerende stoppen ?

Monzi

Monzi

Neues Mitglied
3
Es handelt sich hierbei um ein kleines Rechenspiel. ich möchte sobald der Timer auf null ist, mit einer if abfrage das man nicht weiter meine Buttons anklicken kann und die punkltzahl weiter steigt, sondern dann auf "nochmal spielen klickt" und der Timer bzw das Spiel an sich von neuem beginnt. Funktioniert alles bis auf die abfrage. Nach Timer ende kann man leider noch auf die Buttons klicken und die Punktzahl geht weiter nach oben.

könnte mir hierbei bitte jemand helfen? lg

new CountDownTimer(60100, 1000) {



@override
public void onTick(long millisUntilFinished) {

timerTextView.setText(String.valueOf(millisUntilFinished / 1000) + "s");
}

@override
public void onFinish() {
timerTextView.setText("0s");
resultTextView.setText("Deine Punkte: " + Integer.toString(score) + "/" + Integer.toString(numberOfQuestions));
playAgainButton.setVisibility(view.VISIBLE);
Log.i("info", "Timer ist fertig");


}
}.start();
 
Hallo Monzi,

Deine Buttons, die nach dem Countdown nicht mehr zu sehen sind, genau so mit
setVisible (View.INVISIBLE) setzen .

Es kann allerdings durchaus gut sein , dass du die UI-Steuerung in einem runUIThread setzen musst
 
hey cool danke toller lösungsansatz und einfacher für mich umzusetzen als die if else anweisung :)
 
Morgen. hab da noch ein kleines problem.

Die Divison hier funktioniert nicht und ich weis nicht warum. Das programm stürzt ab. Die logik dahinter ist das integer a durch b geteilt wird und das zufällig gewählt ist.

public void generateQuestion() {


Random rand = new Random();

Integer a = rand.nextInt(41);
Integer b = rand.nextInt(21);

sumTextView.setText(Integer.toString(a) + " / " + Integer.toString(b));
locationOfCorrectAnswer = rand.nextInt(4);
int incorrectAnswer;

answers.clear();

for (int i=0; i<4; i++) {
if (i == locationOfCorrectAnswer) {
answers.add(a / b);
} else {

incorrectAnswer = rand.nextInt(61);
while (incorrectAnswer == a / b) {

incorrectAnswer = rand.nextInt(61);
}
answers.add(incorrectAnswer);


}

weis jemand rat?
lg

Ps: mit + - * funktioniert alles einwandfrei
 
Hallo Monzi,

um dir ein wenig besser helfen zu können , bitten wir um den ErrorLog von AS.

Wir können nicht uns "eben mal so" auf die schnelle in jeden Code einarbeiten ,
Damit machst du es uns einfacher den Fehler zu lokalisieren.

"Stürzt ab" kann viel sein - also was sagt AS und wo ?
 
ok sorry..aber schonmal vielen dank für die schnelle antwort. ps. die gestrige antwort war super.einfach und so genial . top!!..

hier der log:


--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.erocks.brainactivator, PID: 2417
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.ArithmeticException: divide by zero
at de.erocks.brainactivator.DividierenActivity.generateQuestion(DividierenActivity.java:97)
at de.erocks.brainactivator.DividierenActivity.chooseAnswer(DividierenActivity.java:136)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 
da ist dein Fehler

Caused by: java.lang.ArithmeticException: divide by zero
at de.erocks.brainactivator.DividierenActivity.generateQuestion(DividierenActivity.java:97)

Zeile 97 , Divide by Zero
 
ok danke schön :)..könntest mir auch noch kurz erklären wie ich den umgehen kann?
 
Also ich weis nicht WO die Zeile 97 bei dir ist.

Aber grundsätzlich kannst du keine Teilung von Werten durch 0 durchführen.

Bsp : c = a / b stürzt ab , wenn b = 0 ist.

Dann so etwas hier
if ( (a > 0) && (b > 0 )) c = a / b;
 
for (int i=0; i<4; i++) {
if (i == locationOfCorrectAnswer) {
answers.add(a / b);
} else {

incorrectAnswer = rand.nextInt(61);
while (incorrectAnswer == a / b) {

incorrectAnswer = rand.nextInt(61);
}
answers.add(incorrectAnswer);

die zeile 97 ist die zeile mit :

while (incorrectAnswer == a / b) {
 
Na dann weisst du ja , was du abfangen musst -
Beispiel hast du ja oben .

Tip am Rande : Sowas baut mal dann noch in ein try / catch ein , damit es auch nicht abstürzt - also
zwei Sicherheiten auf einmal
 
ok vielen dank
 
ich komme leider mit der try catch funktion nicht weiter. ich konnte nirgends eine lösung oder einen Lösungsansatz finden :(

wie kann ich das schreiben das die Divisions rechnung durch geführt? hier nochmal der code in ausführlicherer form:

public void generateQuestion() {


Random rand = new Random();

int a = rand.nextInt(21);
int b = rand.nextInt(21);

sumTextView.setText(Integer.toString(a) + " / " + Integer.toString(b));
locationOfCorrectAnswer = rand.nextInt(4);
int incorrectAnswer;

answers.clear();


for (int i=0; i<4; i++) {
if (i == locationOfCorrectAnswer) {
answers.add(a / b);

} else {

incorrectAnswer = rand.nextInt(31);
while (incorrectAnswer == a / b) {

incorrectAnswer = rand.nextInt(31);
}
answers.add(incorrectAnswer);

}


}
 
ähm ich glaub ich habs allein geschafft :) wenn ihc jetzt nicht ganz aufn kopfgefallen bin dann lass ich duch nachfolgen try und catch variante einfach eine neue rechnung erstellen wenn die rechnung geteilt duch 0 wäre oder? läuft so jetzt ohne fehler


public void generateQuestion() {


Random rand = new Random();


int a = rand.nextInt(21);
int b = rand.nextInt(21);




sumTextView.setText(Integer.toString(a) + " / " + Integer.toString(b));
locationOfCorrectAnswer = rand.nextInt(4);
int incorrectAnswer;

answers.clear();



try {
for (int i = 0; i < 4; i++) {
if (i == locationOfCorrectAnswer) {
answers.add(a / b);

} else {

incorrectAnswer = rand.nextInt(31);
while (incorrectAnswer == a / b) {

incorrectAnswer = rand.nextInt(31);
}
answers.add(incorrectAnswer);

}


}
}catch( ArithmeticException e ) {
generateQuestion();

}
 

Ähnliche Themen

R
  • RudolfHagen
Antworten
1
Aufrufe
652
koje71
koje71
L
Antworten
15
Aufrufe
908
jogimuc
J
M
Antworten
3
Aufrufe
166
moin
M
Zurück
Oben Unten