• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Button zeigt falsches Ergebnis an

Sasch

New member
Hallo,

ich bin gerade dabei ein Lernspiel für Kinder zu erstellen.
Soweit konnte ich bisher alles realisieren.

Es ist ein Rechenspiel. Ist die Aussage wahr oder falsch...
Der linke Button ist der Wahr Button und der rechte der Falsch Button

Mein Problem liegt darin,
dass ich Stage 1 beginne und dann Level 1 für Level 2, Level 3 usw aufwärts durchspiele. Alles ok.

Spiele ich danach ein Level durch, das darunter ist, verändert es komischerweise die Funktion,
sodass wenn die Aussage wahr ist, bei einem Klick auf den Richtig-Button, das Ergebnis falsch gewertet wird.

Ich habe keine Ahnung mehr woran es liegen könnte... aber vielleicht jemand von euch ;)

Besten Dank für Eure Hilfe :)


Mein Javascript
Code:
   $('#button1').hide();
$('#button2').hide();
$('#tutorial').hide();
$('#registrierung').hide();
$('#playerwahl').hide();
$('#spielstaerke').hide();
$('#spielmodus').hide();
$('#stagewahl').hide();
$('#levelwahl').hide();
$('#los_gehts').hide();
$('#game').hide();
$('#ziel').hide();
$('#game_over').hide();


extra_coins = 0;
coins = 0;
coins_gesamt = 100;
stage_eins_complete = false;
stage_zwei_complete = false;
zehn = 0;
z = 0;



function welcome() {

setTimeout( function() {*
$('#welcome').hide();
$('#tutorial').show();
}, 1000)
}
welcome();


// TUT

$("#tutorial_button").click( function() {
$('#tutorial').hide();
$('#registrierung').show();
});


// REG

$("#registrierung_button").click( function() {
$('#registrierung').hide();
$('#playerwahl').show();
});




// ---------     1. Playeranzahl wählen

$('#playerwahl_btn1,#playerwahl_btn2,#playerwahl_btn3').click( function() {

    	spieleranzahl = (this.value);

    	$('#playerwahl').fadeOut('slow', function () {
      //tue etwas nachdem #eineID ausgeblendet wurde...
      
    	$('#playerwahl').hide();
    	$('#spielstaerke').fadeIn('slow'); }) 
      
})





// ------------    2. Spielstärke wählen

$('#spielstaerke_btn1,#spielstaerke_btn2,#spielstaerke_btn3').click( function() {

      spielstaerkewahl = (this.value);
      
      $('#spielstaerke').fadeOut('slow', function () {
      //tue etwas nachdem #eineID ausgeblendet wurde...
      $('#spielstaerke').hide();
      
      $('#spielmodus').fadeIn('slow'); })  
})






// ---------     3. Spielmodus wählen

$('#spielmodus_btn1,#spielmodus_btn2,#spielmodus_btn3').click( function() {

			spielmoduswahl = (this.value);
      
			$('#spielmodus').fadeOut('slow', function () {
      //tue etwas nachdem #eineID ausgeblendet wurde...
      $('#spielmodus').hide();
      
      $('#stagewahl').fadeIn('slow'); })  
})





// --------   4. Stage wählen

$('#stagewahl_btn1,#stagewahl_btn2,#stagewahl_btn3,#stagewahl_btn4,#stagewahl_btn5,#stagewahl_btn6,#stagewahl_btn7,#stagewahl_btn8,#stagewahl_btn9,#stagewahl_btn10').click( function() {

      stage_auswahl = (this.value);
      
      zahlen_erstellung(); // Abhängigkeit Spielstärke & Stagewahl
      anzahl_der_aufgaben(); // Abhängigkeit Stagewahl
      leben_erstellen(); 
      zeiteinteilung();
      progressbar_aufgabe_pro_level();
      
      $('#stagewahl').fadeOut('slow', function () {
      //tue etwas nachdem #eineID ausgeblendet wurde...
      $('#stagewahl').hide();
      $('#levelwahl').fadeIn('slow'); 
      })  

})



function zahlen_erstellung() {
// Zufallszahlen nach Schwierigkeit und Stage
    
// Schwierigkeit Einfach Zahlen 1 - 20
        
     if (stage_auswahl == 1 && spielstaerkewahl == 1) { minimum_zahl = 1; maximal_zahl = 10; }
else if (stage_auswahl == 2 && spielstaerkewahl == 1) { minimum_zahl = 2; maximal_zahl = 11; }
else if (stage_auswahl == 3 && spielstaerkewahl == 1) { minimum_zahl = 3; maximal_zahl = 12; }
else if (stage_auswahl == 4 && spielstaerkewahl == 1) { minimum_zahl = 4; maximal_zahl = 13; }
else if (stage_auswahl == 5 && spielstaerkewahl == 1) { minimum_zahl = 5; maximal_zahl = 14; }

           
           
// Schwierigkeit Mittel Zahlen 20 - 40
           
     if (stage_auswahl == 1 && spielstaerkewahl == 2) { minimum_zahl = 1; maximal_zahl = 20; }
else if (stage_auswahl == 2 && spielstaerkewahl == 2) { minimum_zahl = 12; maximal_zahl = 22; }
else if (stage_auswahl == 3 && spielstaerkewahl == 2) { minimum_zahl = 13; maximal_zahl = 24; }
else if (stage_auswahl == 4 && spielstaerkewahl == 2) { minimum_zahl = 14; maximal_zahl = 26; }
else if (stage_auswahl == 5 && spielstaerkewahl == 2) { minimum_zahl = 15; maximal_zahl = 28; }

           
           
// Schwierigkeit Schwer Zahlen 40 - 60
           
     if (stage_auswahl == 1 && spielstaerkewahl == 3) { minimum_zahl = 21; maximal_zahl = 42; }
else if (stage_auswahl == 2 && spielstaerkewahl == 3) { minimum_zahl = 22; maximal_zahl = 44; }
else if (stage_auswahl == 3 && spielstaerkewahl == 3) { minimum_zahl = 23; maximal_zahl = 46; }
else if (stage_auswahl == 4 && spielstaerkewahl == 3) { minimum_zahl = 24; maximal_zahl = 48; }
else if (stage_auswahl == 5 && spielstaerkewahl == 3) { minimum_zahl = 25; maximal_zahl = 50; }


if(stage_auswahl == 1 && stage_eins_complete == true )
{ $("#levelwahl_btn1, #levelwahl_btn2, #levelwahl_btn3").attr("disabled",false); }
}


// Aufgaben pro Level erzeugen

function anzahl_der_aufgaben() {

     if(stage_auswahl == 1) { aufgabe_pro_level = 10;}
else if(stage_auswahl == 2) { aufgabe_pro_level = 20;}
else if(stage_auswahl == 3) { aufgabe_pro_level = 30;}
else if(stage_auswahl == 4) { aufgabe_pro_level = 40;}
else if(stage_auswahl == 5) { aufgabe_pro_level = 50;}

}



// Progressbaranzeigewert je nach Level 

function progressbar_aufgabe_pro_level() {

if(aufgabe_pro_level == 10) { y = 10; }
else if(aufgabe_pro_level == 20) { y = 5; }
else if(aufgabe_pro_level == 30) { y = 3.3; }
else if(aufgabe_pro_level == 40) { y = 2.5; }
else if(aufgabe_pro_level == 50) { y = 2; }

}


function zeiteinteilung() {
     if(spielstaerkewahl == 1) { zeit_nach_aufgabe = aufgabe_pro_level * 200;}
else if(spielstaerkewahl == 2) { zeit_nach_aufgabe = aufgabe_pro_level * 300;}
else if(spielstaerkewahl == 3) { zeit_nach_aufgabe = aufgabe_pro_level * 400;}

}



function leben_erstellen() {

if (stage_auswahl == 1) { leben = 2;}
else if (stage_auswahl == 2) { leben = 4;}
else if (stage_auswahl == 3) { leben = 6;}
else if (stage_auswahl == 4) { leben = 8;}
else if (stage_auswahl == 5) { leben = 10;}


}





// 5. Level wählen

$('#levelwahl_btn1, #levelwahl_btn2, #levelwahl_btn3, #levelwahl_btn4, #levelwahl_btn5, #levelwahl_btn6, #levelwahl_btn7, #levelwahl_btn8, #levelwahl_btn9, #levelwahl_btn10').click( function() {

      level_auswahl = (this.value);
      
      
      $('#levelwahl').fadeOut('slow', function () {
      //tue etwas nachdem #eineID ausgeblendet wurde...
      $('#levelwahl').hide();
      
      $('#los_gehts').fadeIn('slow');
      countdowner();
      })  
      
})






// Countdowner zum Start

function countdowner(){

      var sTime = new Date().getTime();
      var countDown = 3;

      function UpdateTime() {
      var cTime = new Date().getTime();
      var diff = cTime - sTime;
      var seconds = countDown - Math.floor(diff / 1000);
   if (seconds >= 1) {
        var minutes = Math.floor(seconds / 60);
        seconds -= minutes * 60;
        $("#minutes").text(minutes < 10 ? "0" + minutes : minutes);
        $("#seconds").text(seconds < 10 ? "0" + seconds : seconds); } 
        
    else 
        { clearInterval(counter); 
        
          // Countdown vorbei
          
          $('#los_gehts').fadeOut('slow');
          
          stoppuhr();
          game();
          
          $('#balken').hide(); $('#game').show(); $('#button1').show(); $('#button2').show();
          
          }
       
       }
UpdateTime();
var counter = setInterval(UpdateTime, 500);

}







// Stoppuhr Zeit

function stoppuhr() {

stopp_zeit = zeit_nach_aufgabe;


    var counter_stopp = setInterval(timer, 10); //10 will  run it every 100th of a second
    
    function timer()
    {
    
        // Wenn Zeit abgelaufen ist oder Leben = 0
    
        if (stopp_zeit <= 0 || leben <= 0 )
        {
            clearInterval(counter_stopp);
            leben_erstellen(); 
            zehn = 0;
            coins = 0;
            
             $("#game_over").toggle('explode');  
             $('#button1').hide();  
             $('#button2').hide();
             $('#balken').show();
 
         }
         
         
         // Wenn das Level geschafft wurde
         
        else if ( zehn > aufgabe_pro_level )
        {
            
            clearInterval(counter_stopp);
            zehn = 0;
            
            coins_gesamt = (coins + coins_gesamt);
            $('#coins_gesamt').html(coins_gesamt);
           
            coins = 0;
            
            
            
            
            
            
/* Levelbutton enabled wenn Level geschafft
      
function button_enabled() {
            
     if (stage_auswahl == 1 ) { 
     
             
     
                   if ( level_auswahl == 1 ) { 
                   $("#levelwahl_btn2").attr("disabled",false); }

           					else if (level_auswahl == 2 ) {    
           				  $("#levelwahl_btn2,#levelwahl_btn3").attr("disabled",false); }
           
           				  else if (level_auswahl == 3 ) {   
           					$("#stagewahl_btn2").attr("disabled",false); 
                    
           $("#levelwahl_btn2,#levelwahl_btn3").attr("disabled",true); 
          
           
           stage_eins_complete = true;
           }

     }
     
     
     
     else if (stage_auswahl == 2 ) { 
     
             
     
                   if ( level_auswahl == 1 ) { 
                   $("#levelwahl_btn2").attr("disabled",false); }

           					else if (level_auswahl == 2 ) {    
           				  $("#levelwahl_btn2,#levelwahl_btn3").attr("disabled",false); }
           
           				  else if (level_auswahl == 3 ) {   
           					$("#stagewahl_btn2").attr("disabled",false); 
                    
           
          
           
           stage_zwei_complete = true;
           }

     }
     
     
     
}

            
button_enabled();       

*/            
            
            
            
            $("#ziel").toggle('explode');
            
            $('#try_again_button').show();  
            $('#button1').hide();  
            $('#button2').hide();
            $('#balken').show();
            
            
          
            return;
         }
         
         
         // Zeit - Probaranzeige   
         
          
          $( "#probar_zeit" ).attr("max", zeit_nach_aufgabe );
          alert(zeit_nach_aufgabe);
          $( "#probar_zeit" ).val(stopp_zeit );
         
         stopp_zeit--;
         document.getElementById("timer").innerHTML=stopp_zeit /100+ " secs"; 
        
      
      
      }
      
      
     

}









// Das Spiel

function game()
{

//  --------    Zufallszahlen generieren

zahl1 = Math.round(Math.random() * (maximal_zahl - minimum_zahl + 1) - 0.5) + minimum_zahl;
zahl2 = Math.round(Math.random() * (maximal_zahl - minimum_zahl + 1) - 0.5) + minimum_zahl; 
zahl3 = Math.round(Math.random() * (maximal_zahl - minimum_zahl + 1) - 0.5) + minimum_zahl;
zufall_zahl_fe = Math.round(Math.random() * (maximal_zahl - minimum_zahl + 1) - 0.5) + minimum_zahl;



//  ----------     Zufallsarray für wahr oder falsch

art = new Array (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29);
art.sort(function() { return 0.5 - Math.random() });



// Rechenartauswahl je nach Levelwahl

if (level_auswahl == 1 || level_auswahl == 2) { addition(); }
else if (level_auswahl == 3 || level_auswahl == 4) { minus(); }
else if (level_auswahl == 5 ) { kette_plus(); }
else if (level_auswahl == 6 ) { kette_minus(); }



// Finish - Probaranzeige abhängig von y, je nach Stage   
     
   z = (zehn++) * y;
    
   $( "#probar" ).val( z );
  
       if( z == 100 || z > 100 ) 
       {
       z = 0;
       
       $( "#probar" ).val( z );
       }
       
       
       
       
       
// Extra Coins Anzeige     
       
    if( extra_coins == 10 ) 
       {
      
       coins = (coins + extra_coins);
       $("#coins_gesamt").html(coins);
       
       extra_coins = 0;
       clearInterval(extra_coins);
       $("#extra_coins").html("Kobold Goldtopf" + extra_coins);
       
       }
       
       
       
       
// Coins Level usw Anzeige       
       
       
$("#leben").html("Leben " + leben); $("#coins").html("Coins " + coins);
$("#aktuelle_spielstaerke").html("aktuelle Spielstärke " + spielstaerkewahl + " ");
$("#aktuelle_stage").html("aktuelle Stage " + stage_auswahl + " ");
$("#aktuelles_level").html("aktuelles Level " + level_auswahl);



 
}





// BUTTON 2


$('#button1').click( function() {
  	  
   
    		if (typeof subtraktion_ergebnis == 'number') {
            
   	 				if (subtraktion_ergebnis == zahl1 - zahl2) { 
            extra_coins++; 
            $("#extra_coins").html(extra_coins), 
            coins = coins + 2; 
            $("#coins").html(coins);
            }
            
	           else if (!(subtraktion_ergebnis == zahl1 + zahl2)) { 
             extra_coins = extra_coins - extra_coins; 
             $("#extra_coins").html(extra_coins); 
             leben--; $("#leben").html(leben); 
             } 
         }
    
    
    
    
     else if (typeof addition_ergebnis == 'number') {
             
             if (addition_ergebnis == zahl1 + zahl2) { 
             extra_coins++; 
             coins++; 
             $("#coins").html(coins);  
             $("#extra_coins").html(extra_coins)
             } 
             
             else if (!(addition_ergebnis == zahl1 + zahl2)) { 
             extra_coins = extra_coins - extra_coins; 
             leben--; $("#leben").html(leben); 
             $("#extra_coins").html(extra_coins) 
             }
     }
     
     
     
     
     
     else if (typeof kette_plus_ergebnis == 'number') {
             
             if (kette_plus_ergebnis == zahl1 + zahl2 + zahl3) { 
             extra_coins++; 
             $("#extra_coins").html(extra_coins); 
             coins = coins + 3; 
             $("#coins").html(coins); 
             }
             
              else if (!(kette_plus_ergebnis == zahl1 + zahl2 + zahl3)) {
              extra_coins = extra_coins - extra_coins; 
              $("#extra_coins").html(extra_coins); 
              leben--; 
              $("#leben").html(leben);}
       }
              
              
     
      else if (typeof kette_minus_ergebnis == 'number') {
             
             if (kette_minus_ergebnis == (zahl1 - zahl2) - (zahl3)) { 
             extra_coins++; $("#extra_coins").html(extra_coins); coins = coins + 4; $("#coins").html(coins);}
        else if (!(kette_minus_ergebnis == (zahl1 - zahl2 - zahl3))) { 
        extra_coins = extra_coins - extra_coins; $("#extra_coins").html(extra_coins); leben--; $("#leben").html(leben); }
     }
     

     game();
    
}); 




// BUTTON 2


$('#button2').click( function() {
  	  
   
    if (typeof subtraktion_ergebnis == 'number') {
            
            if (!(subtraktion_ergebnis == zahl1 - zahl2)) { 
            extra_coins++; $("#extra_coins").html(extra_coins); coins = coins + 2; $("#coins").html(coins);}
       else if (subtraktion_ergebnis == zahl1 - zahl2) { leben--; $("#leben").html(leben); } 
    }
    
    else if (typeof addition_ergebnis == 'number') {
             
             if (!(addition_ergebnis == zahl1 + zahl2)) { 
             extra_coins++; $("#extra_coins").html(extra_coins); coins++; $("#coins").html(coins);} 
        else if (addition_ergebnis == zahl1 + zahl2) { leben--; $("#leben").html(leben);}
     }
     
     else if (typeof kette_plus_ergebnis == 'number') {
             
             if (!(kette_plus_ergebnis == zahl1 + zahl2 + zahl3)) { 
             extra_coins++; $("#extra_coins").html(extra_coins); coins = coins + 3; $("#coins").html(coins);}        
             else if (kette_plus_ergebnis == zahl1 + zahl2 + zahl3) { leben--; $("#leben").html(leben);}
     }
     
     
     game();
    
}); 



// addition 
function addition() {
 
 		if (art[0] < 15) {
 		addition_ergebnis = zahl1 + zahl2; }
    
    else if (art[0] > 14 && art[0] < 19) {
    addition_ergebnis = zahl1 + zahl2 + zufall_zahl_fe; }
    
    else if (art[0] > 18 && art[0] < 29 ) {
    addition_ergebnis = zahl1 + zahl2 - zufall_zahl_fe; }
 
    $("#ergebnis").html(zahl1 + " + " + zahl2 + 
    " = " + addition_ergebnis);  }



// minus
function minus(){
 
 if (art[0] < 15) {
 		subtraktion_ergebnis = zahl1 - zahl2; }
    
    else if (art[0] > 14 && art[0] < 19) {
    subtraktion_ergebnis = zahl1 - zahl2 + zufall_zahl_fe; }
  
    else if (art[0] > 18 && art[0] < 29 ) {
    subtraktion_ergebnis = zahl1 - zahl2 - zufall_zahl_fe; }
 
    $("#ergebnis").html("Subtraktion: " + zahl1 + " - " + zahl2 + 
    " = " + subtraktion_ergebnis);  }



// Kette Plus
function kette_plus() {
     
     if (art[0] < 15) { kette_plus_ergebnis = zahl1 + zahl2 + zahl3; }
     
     else if (art[0] > 14 && art[0] < 19) {
              kette_plus_ergebnis = zahl1 + zahl2 + zahl3 + zufall_zahl_fe; }
              
     else if (art[0] > 18 && art[0] < 29) {
              kette_plus_ergebnis = zahl1 + zahl2 + zahl3 + zufall_zahl_fe; }
     
     $("#ergebnis").html("Plus Kette: " + zahl1 + " + " + zahl2 + " + " + zahl3 + 
     " = " + kette_plus_ergebnis);  }
     
     
     
     
     
// Kette Minus
function kette_minus() {
    
     if (art[0] < 15) { kette_minus_ergebnis = zahl1 - zahl2 - zahl3; }
     
     else if (art[0] > 14 && art[0] < 19) {
              kette_minus_ergebnis = zahl1 - zahl2 - zahl3 + zufall_zahl_fe; }
              
     else if (art[0] > 18 && art[0] < 29) {
              kette_minus_ergebnis = zahl1 - zahl2 - zahl3 + zufall_zahl_fe; }
     
     $("#ergebnis").html("Minus Kette: " + "(" + zahl1 + " - " + zahl2 + ")" + " - " + zahl3 + 
     " = " + kette_minus_ergebnis);  }
     
     
     
     

// Next Level Button

$('#next_level').click( function() { 
level_auswahl++;
$('#game').hide();
$('#ziel').hide();
$('#los_gehts').show();
countdowner(); 

})


// Try again Button

$('#try_again_button').click( function(){
$('#game').hide();
$('#game_over').hide();
$('#los_gehts').show();
countdowner();
      
})


// Try again Button 2

$('#try_again_button2').click( function(){
$('#ziel').hide();
$('#game').hide();
$('#los_gehts').show();
countdowner();
      
})

// Zur Levelauswahl

$('#back').click( function() {
$('#game').hide();
$('#game_over').hide();
$('#levelwahl').show();

})  


// Zur Levelauswahl 2

$('#back2').click( function() {
$('#ziel').hide();
$('#game').hide();
$('#levelwahl').show();

})  


// Zur Stageauswahl

$('#stage_wahl_button_game').click( function() {
$('#game').hide();
$('#game_over').hide();
$('#ziel').hide();

$('#stagewahl').show();

})
 
Zuletzt bearbeitet:
Kannst du uns nicht einen Link geben, wo wir uns das live ansehen können? Zusammen mit einer Beschreibung, wie wir das Problem reproduzieren können?

PS: Dein "Zufallsarray" ist nicht zufällig und arbeitet ineffektiv. Die Verteilungsfunktion für die einzelnen Zahlen sind nicht gleichmäßig über das Array verteilt.
 
Hi,

hier sieht man alles im Liveditor https://jsfiddle.net/Stecher/kamh73r4/

nach dem 3. Level in Stage 1, schaltet sich Stage 2 frei.. ab da stimmt die Funktion der 2 Buttons nicht mehr...

Links ist standardmäßig der "Wahr" Button und rechts der "Falsch" Button.

Das Zufallsarray habe ich extra so gemacht, damit mehr wahre Rechenaufgaben entstehen und nicht so viel Falsche :)
 
Ich konnte dein Problem jetzt nicht wirklich reproduzieren, da die Seite dauernd alerts wirft, ABER du hast ein massives Problem mit globalen Variablen. Die sind einfach gefährlich und produzieren schnell sehr komische Fehler. Ändere das. Dringend!

Außerdem ist dein Datenmodell, in dem du speicherst, ob die Antwort jetzt richtig oder falsch ist, extrem fehleranfällig. Das solltest du überarbeiten. So ist es keine gute Idee, in den Callbacks für die Buttons die Rechnung nocheinmal komplett nachzuvollziehen. Ist unflexibel und außerdem in deiner Implementierung falsch. Du solltest einfach speichern, ob die Antwort falsch oder richtig ist.

Das Zufallsarray habe ich extra so gemacht, damit mehr wahre Rechenaufgaben entstehen und nicht so viel Falsche
Das ist aber eine extrem unperformante und umständliche Methode das zu realisieren. V.a. da du ja immer nur den ersten Eintrag des Arrays benutzt. Vergleiche doch Math.random() direkt mit deinen Schwellwerten...
Code:
var rnd = Math.random();
if (rnd < 0.8){
	// richtige Antwort
}
else if (rnd < 0.9){
	// + Zufallszahl
}
else {
	// - Zufallszahl
}
 
Ja das Alert hatte ich zum Testen drin..
hier der richtige Link https://jsfiddle.net/Stecher/f8v8ofxj/

Du hast meine Probleme gut erkannt^^

ABER du hast ein massives Problem mit globalen Variablen. Die sind einfach gefährlich und produzieren schnell sehr komische Fehler. Ändere das. Dringend!

Ich versteh nicht ganz wie ich die Variable minimum_zahl lokal, und nicht glaobal mache und trotzdem auch in anderen Funktionen verwenden kann... Da auch viele Variablen abhängig von einander sind.
Deshalb habe ich alle Variablen global gemacht.


Funktion 1
Code:
// Schwierigkeit Einfach Zahlen 1 - 20
        
     if (stage_auswahl == 1 && spielstaerkewahl == 1) { minimum_zahl = 1; maximal_zahl = 10; }
else if (stage_auswahl == 2 && spielstaerkewahl == 1) { minimum_zahl = 2; maximal_zahl = 11; }
else if (stage_auswahl == 3 && spielstaerkewahl == 1) { minimum_zahl = 3; maximal_zahl = 12; }


Funktion 2
Code:
zahl1 = Math.round(Math.random() * (maximal_zahl - minimum_zahl + 1) - 0.5) + minimum_zahl;



Außerdem ist dein Datenmodell, in dem du speicherst, ob die Antwort jetzt richtig oder falsch ist, extrem fehleranfällig. Das solltest du überarbeiten. So ist es keine gute Idee, in den Callbacks für die Buttons die Rechnung nocheinmal komplett nachzuvollziehen. Ist unflexibel und außerdem in deiner Implementierung falsch. Du solltest einfach speichern, ob die Antwort falsch oder richtig ist.

Da muss ich dir Recht geben. Allerdings fällt mir kein anderer Weg ein..
Das mit der "typeof" Abfrage ist auch nicht korrekt..

Wie meinst du ich soll es einfach speichern, ob die Antwort richtig oder falsch ist?

Vorallem habe ich auch mehrere Rechenarten..

Code:
// addition 
function addition() {
 
 		if (art[0] < 15) {
 		addition_ergebnis = zahl1 + zahl2; }
    
    else if (art[0] > 14 && art[0] < 19) {
    addition_ergebnis = zahl1 + zahl2 + zufall_zahl_fe; }
    
    else if (art[0] > 18 && art[0] < 29 ) {
    addition_ergebnis = zahl1 + zahl2 - zufall_zahl_fe; }
 
    $("#ergebnis").html(zahl1 + " + " + zahl2 + 
    " = " + addition_ergebnis);  }



// minus
function minus(){
 
 if (art[0] < 15) {
 		subtraktion_ergebnis = zahl1 - zahl2; }
    
    else if (art[0] > 14 && art[0] < 19) {
    subtraktion_ergebnis = zahl1 - zahl2 + zufall_zahl_fe; }
  
    else if (art[0] > 18 && art[0] < 29 ) {
    subtraktion_ergebnis = zahl1 - zahl2 - zufall_zahl_fe; }
 
    $("#ergebnis").html("Subtraktion: " + zahl1 + " - " + zahl2 + 
    " = " + subtraktion_ergebnis);  }



Wenn ich auf den Button klicke, überprüft dieser ob das Ergebnis korrekt ist und muss anschließend eine komplett neue Rechnung machen.. Ich weiß es nicht anders umzusetzen...


Der Button soll eigentlich nur das Ergebnis überprüfen, und eine andere Funktion muss die neue Rechnung aufrufen.. Ich denke ständig, das Aufrufen der neuen Rechnung ist Aufgabe des Buttons,
was aber wahrscheinlich falsch ist..
vllt kannst du mir mit ein paar Zeilen und einer richtigen Struktur auf die Sprünge helfen :)
Bei dem Teil hakt es wirklich mit meiner Implementierung^^


Das ist aber eine extrem unperformante und umständliche Methode das zu realisieren. V.a. da du ja immer nur den ersten Eintrag des Arrays benutzt. Vergleiche doch Math.random() direkt mit deinen Schwellwerten...

Das mit Math.random() habe ich jetzt auch verstanden :)
 
Zuletzt bearbeitet:
Du musst kapseln. Ich hab' mal ein kleines Beispiel gemacht:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
</head>
<body>
Frage: <span id="frage"></span><br>
<span id="buttons"><button id="richtig">richtig</button><button id="falsch">falsch</button></span>
<script type="text/javascript">
(function(){
	function generateNumber(stage, difficulty){
		return Math.floor(Math.random() * (stage.max[difficulty] - stage.min[difficulty])) + stage.min[difficulty];
	}
	function generateQuestion(equation){
		var rnd = Math.random();
		if (rnd < 0.8){
			return {
				text: equation.text + " = " + equation.solution,
				correct: true
			}
		}
		else if (rnd < 0.9){
			return {
				text: equation.text + " = " + (equation.solution + equation.noise),
				correct: false
			}
		}
		else {
			return {
				text: equation.text + " = " + (equation.solution - equation.noise),
				correct: false
			}
			
		}
	}
	var stages = [
		{
			numberOfLevels: 10,
			min: [1, 1, 21],
			max: [11, 22, 42],
			generateEquation: function(difficulty){
				var number1 = generateNumber(this, difficulty);
				var number2 = generateNumber(this, difficulty);
				var solution = number1 + number2;
				return {
					text: number1 + " + " + number2,
					noise: generateNumber(this, difficulty),
					solution: solution
				}
			}
		},
		{
			numberOfLevels: 20,
			min: [2, 12, 22],
			max: [12, 24, 44],
			generateEquation: function(difficulty){
				var number1 = generateNumber(this, difficulty);
				var number2 = generateNumber(this, difficulty);
				var solution = number1 - number2;
				return {
					text: number1 + " - " + number2,
					noise: generateNumber(this, difficulty),
					solution: solution
				}
			}
		},
		{
			numberOfLevels: 30,
			min: [3, 13, 23],
			max: [13, 26, 46],
			generateEquation: function(difficulty){}
		},
		{
			numberOfLevels: 40,
			min: [4, 14, 24],
			max: [14, 28, 48],
			generateEquation: function(difficulty){}
		},
		{
			numberOfLevels: 50,
			min: [5, 15, 25],
			max: [15, 30, 50],
			generateEquation: function(difficulty){}
		}
	];
	var gameSetting = {
		difficulty: 0,
		stage: 0,
		level: 0
	};
	
	var currentQuestion = generateQuestion(stages[gameSetting.stage].generateEquation(gameSetting.difficulty));
	document.getElementById("frage").innerHTML = currentQuestion.text;
	document.getElementById("buttons").addEventListener("click", function listener(ev){
		if (ev.target.id === "richtig"){
			if (currentQuestion.correct){
				alert("Ja, die Antwort ist richtig.")
			}
			else {
				alert("Nein, die Antwort ist falsch.");
			}
		}
		if (ev.target.id === "falsch"){
			if (currentQuestion.correct){
				alert("Doch, die Antwort ist richtig.")
			}
			else {
				alert("Ja, die Antwort ist falsch.");
			}
		}
	}, false);
	
}());
</script>
</body>
</html>
 
Zurück
Oben