JS: confirm

parafi

Mitglied
Hi leuts

Nachdem mein Spiel fertig ist, soll der Spieler gefragt werden, ob er erneut spielen möchte.
Das Ganze mache ich mit einem confirm("neues Spiel?");

Meine Frage nun: Wie kann ich nun simulieren, dass wenn der Spieler auf "Ok" klickt, meine jQuery function $("a#start").click(function() wieder startet?

Grüsse

parafi
 
Zum Beispiel per:
Javascript:
$("a#start").click();

Oder per
Javascript:
$("a#start").trigger('click');

Oder indem du ganz einfach das ausführst was du in der click-Funktion definiert hast.
 
Mein Code sieht nun folgendermassen aus.
Die Fehlerkonsole in FF gibt mir an, dass "$ is not defined".


Code:
$("a#start").click(function(){
//..150 Zeilen Code

if(punkte_spieler > 21){
    alert("Verloren");
    javascript:location.reload();
    var answer = confirm("neues Spiel?");
    if(answer){
     $("a#start").click();
    }
   }
//weiterer Code..
});
Muss ich die Funktion ("a#start").click() zuerst schliessen, um sie wieder neu aufzurufen? Wenn ja wie?

Gruss
parafi
 
Nein das liegt am javascript:location.reload(); das ( sorry ) völliger Käse ist.

Btw. falls du ( so wie jetzt ) die click-Funktion von sich selbst aus nochmal aufrufst musst du dir im klaren sein, das jeglicher code der nach $("a#start").click(); kommt, erst ausgeführt wird sobald man nicht auf OK sondern auf Abbrechen klickt.
Und das dann auch noch so oft wie man auf Ok geklickt hat.
 
Ich habe nun das javascript:location.reload(); rausgenommen und wenn ich nun auf Ok klicke erhalte ich auch eine neue Karte. (Ich erstelle ein Blackjack-Spiel :D)

Nur muss ich die Seite ja refreshen, damit die Karten, welche zuvor gespielt wurden auch wieder verschwinden. (Werden aktuell noch angezeigt, wenn ein neues Spiel begonnen werden soll)
 
Jap ich seh durch, nur funktioniert das Ganze bei mir nicht.

Meine Theorie:
Weil die Funktion $("a#start").click(); noch nicht beendet ist. Sozusagen die Funktion in ihr drin aufgerufen wird? Den die Funktion $("a#start").click(); wird fast zuoberst aufgerufen und erst am Ende des JS Codes wieder geschlossen.

Ich stell sonst mal meinen ganzen Code hier rein. Hilft evt mehr.

Aber trotzdem dir schon mal ein riesen Dank!:)

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
login.php
</title>
<meta name="author" content="Pascal Meier">
<meta name="keywords" content="test">
<link rel="stylesheet" href="style.css" type="text/css">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="funktionen.js"></script>

<script type="text/javascript">
$(document).ready(function(){ 
 //Karten werden in Array gelesen
 var bild = new Array( "SCHILTENUNDER", "SCHILTENOBER", "SCHILTENKOENIG", "SCHILTENBANNER", "SCHILTENASS", "SCHILTEN9", 
                      "SCHILTEN8", "SCHILTEN7", "SCHILTEN6", "SCHELLENUNDER", "SCHELLENOBER", "SCHELLENKOENIG", "SCHELLENBANNER",
                      "SCHELLENASS", "SCHELLEN9", "SCHELLEN8", "SCHELLEN7", "SCHELLEN6", "ROSENUNDER", "ROSENOBER", "ROSENKOENIG",
                      "ROSENBANNER", "ROSENASS", "ROSEN9", "ROSEN8", "ROSEN7", "ROSEN6", "EICHENUNDER", "EICHENOBER", "EICHENKOENIG",
                      "EICHENBANNER", "EICHENASS", "EICHEN9", "EICHEN8", "EICHEN7", "EICHEN6");
                      
 var karteninhalt = 36;
 var ass_zaehler_spieler = 0;
 var ass_zaehler_comp = 0;
 //var answer = confirm("neues Spiel?"); 

 //Spiel beginnt
 $("a#start").click(function(){
  var zufall_spieler = Math.floor(karteninhalt* Math.random());
  var zufall_computer = Math.floor(karteninhalt* Math.random());
  //Überprüfung ob Spieler und Computer die gleiche Karte haben. Wenn ja wird die Karte verändert.
  if(zufall_spieler == zufall_computer){
   if(zufall_computer > 1){
    zufall_computer = zufall_computer - 1;
   }
   else {
    zufall_computer = zufall_computer + 1;
   }
  }

  //Karte wird zur .gif Datei
  var karte_spieler = bild[zufall_spieler] + ".gif";
  var karte_comp = bild[zufall_computer] + ".gif";
  //Ist eine Zahl im Namen enthalten? Ja = true
  var anzeigetafel_spieler = /\d+/.test(bild[zufall_spieler]);    
  var anzeigetafel_comp = /\d+/.test(bild[zufall_computer]);
  // Punkte werden nach Kartenart berechnet
  var punkte_spieler = erster_wert_spieler(bild, zufall_spieler, karte_spieler, anzeigetafel_spieler);
  var punkte_computer = erster_wert_computer(bild, zufall_computer, karte_comp, anzeigetafel_comp);
  
  //Anzahl Punkte werden in HTML Box geschrieben
  var punkte_aktualisieren_spieler = document.getElementById("zaehler_spieler").firstChild.nodeValue.length;
  document.getElementById("zaehler_spieler").firstChild.replaceData(0, punkte_aktualisieren_spieler, punkte_spieler);
  var punkte_aktualisieren_computer = document.getElementById("zaehler_comp").firstChild.nodeValue.length;
  
  //Aktuelle Karte wird in Array gespeichert.
  var set_spieler = new Array(karte_spieler);
  var set_computer = new Array(karte_comp);
  
  //Die Karten des Spielers und Computers werden aus dem Array entfernt.
  bild.splice(zufall_spieler, 1, "del");
  bild.splice(zufall_computer, 1, "del");
  var e = 0;
  for(var q = 0; q < karteninhalt; q++){
   if(bild[q] == "del"){
    // nichts
   }
   else if(bild[q] !== "del"){
    bild[e] = bild[q];
    e++;
   }
  }  
  karteninhalt = e;
  
  $('.spieler').append('<img src="img/' + karte_spieler + '">');
  $("#konsole").css("visibility" , "visible");
  $(".computer_verdeckt").css("visibility" , "visible");
  $("#zaehler_spieler").css("visibility" , "visible");
  $("#zaehler_comp").css("visibility" , "visible");
   
  //Wenn Hit geklickt wird..
  $(".hit").click(function(){
   //Spieler erhält neue Karte
   zufall_spieler = Math.floor(karteninhalt* Math.random());
   karte_spieler = bild[zufall_spieler] + ".gif";
   var i = set_spieler.length;
  
   //Neue Karte wird ins Kartenset gespeichert und angezeigt im HTML Dokument.
   set_spieler[i] = karte_spieler;
   $('.spieler').append('<img src="img/' + karte_spieler + '">');
   //Ist eine Zahl im Namen enthalten? Ja = true
   anzeigetafel_spieler = /\d+/.test(bild[zufall_spieler]);
   
   // Punkte werden nach Kartenart dazuberechnet
   punkte_spieler = weiterer_wert_spieler(bild, zufall_spieler, karte_spieler, anzeigetafel_spieler, punkte_spieler);
   //Anzahl Punkte werden in HTML Box geschrieben
   punkte_aktualisieren_spieler = document.getElementById("zaehler_spieler").firstChild.nodeValue.length;
   document.getElementById("zaehler_spieler").firstChild.replaceData(0, punkte_aktualisieren_spieler, punkte_spieler);

   //Die Karten des Spielers und Computers werden aus dem Array entfernt.
   bild.splice(zufall_spieler, 1, "del");
   e = 0;
   for(q = 0; q < karteninhalt; q++){
   if(bild[q] == "del"){
    // nichts
   }
   else if(bild[q] !== "del"){
    bild[e] = bild[q];
    e++;
   }
  }
  karteninhalt = e;
  if(punkte_spieler > 21){
   x = 0;
   //Schleife wobei geprüft wird, ob ein Ass vorkommt, wenn ja wird dieses als 1 gewertet.
   Ende: do {
   y = set_spieler[x].length;
   z = y - 7;
    if(set_spieler[x].slice(z, (y-4)) == "ASS" && ass_zaehler_spieler == 0){
     punkte_spieler = punkte_spieler - 10;
     punkte_aktualisieren_spieler = document.getElementById("zaehler_spieler").firstChild.nodeValue.length;
     document.getElementById("zaehler_spieler").firstChild.replaceData(0, punkte_aktualisieren_spieler, punkte_spieler);
     ass_zaehler_spieler++;  
     break Ende;   
    }
    else if(set_spieler[x].slice(z, (y-4)) == "ASS" && ass_zaehler_spieler > 0){
     if(set_spieler[x+ass_zaehler_spieler].slice(z, (y-4)) == "ASS"){
      punkte_spieler = punkte_spieler - 10;
      //Anzahl Punkte werden in HTML Box geschrieben
      punkte_aktualisieren_spieler = document.getElementById("zaehler_spieler").firstChild.nodeValue.length;
      document.getElementById("zaehler_spieler").firstChild.replaceData(0, punkte_aktualisieren_spieler, punkte_spieler);
      ass_zaehler_spieler++;
      break Ende;
     }
     else {
      break Ende;
     }
    }
    else {
     x++;
    }
   } while(x < set_spieler.length);
   //Kein Ass vorgekommen
   if(punkte_spieler > 21){
    alert("Verloren");
    var answer = confirm("neues Spiel?");
    if(answer){
     $("a#start").click();
    }
   }
   //Es ist ein Ass vorgekommen
   else {
    //normal weiterspielen..
   }
  }
  });
  
  //Wenn Stand geklickt wird..
  $(".stand").click(function(){
   $('.computer_verdeckt').css("visibility" , "hidden");
   $('.computer_offen').css("visibility" , "visible");
   $('.computer_offen').append('<img src="img/' + set_computer[0] + '">');
   
   do {
   //Computer erhält neue Karte
    var zufall_computer = Math.floor(karteninhalt* Math.random());
    var karte_comp = bild[zufall_computer] + ".gif";
    var i = set_computer.length;
   
    //Neue Karte wird ins Kartenset gespeichert und angezeigt im HTML Dokument.
    set_computer[i] = karte_comp;
    $('.computer_offen').append('<img src="img/' + karte_comp + '">');
    //Ist eine Zahl im Namen enthalten? Ja = true
    anzeigetafel_comp = /\d+/.test(bild[zufall_computer]);
   
    // Punkte werden nach Kartenart dazuberechnet
    punkte_computer = weiterer_wert_computer(bild, zufall_computer, karte_comp, anzeigetafel_comp, punkte_computer);
    //Anzahl Punkte werden in HTML Box geschrieben
    punkte_aktualisieren_computer = document.getElementById("zaehler_comp").firstChild.nodeValue.length;
    document.getElementById("zaehler_comp").firstChild.replaceData(0, punkte_aktualisieren_computer, punkte_computer);
    //Die Karten des Spielers und Computers werden aus dem Array entfernt.
    bild.splice(zufall_spieler, 1, "del");
    e = 0;
    for(q = 0; q < karteninhalt; q++){
    if(bild[q] == "del"){
     // nichts
    }
    else if(bild[q] !== "del"){
     bild[e] = bild[q];
     e++;
    }
   }
   karteninhalt = e;
    
    if(punkte_computer > 21){
     x = 0;
     y = set_computer[x].length;
     z = y - 7;
     
     //Schleife wobei geprüft wird, ob ein Ass vorkommt, wenn ja wird dieses als 1 gewertet.
     do {
      if(set_computer[x].slice(z, (y-4)) == "ASS" && ass_zaehler_comp == 0){
       punkte_computer = punkte_computer - 10;
       punkte_aktualisieren_computer = document.getElementById("zaehler_comp").firstChild.nodeValue.length;
       document.getElementById("zaehler_comp").firstChild.replaceData(0, punkte_aktualisieren_computer, punkte_computer);
       ass_zaehler_comp++;
       break;     
      }
      else if(set_computer[x].slice(z, (y-4)) == "ASS" && ass_zaehler_comp > 0){
       if(set_computer[x+ass_zaehler_comp].slice(z, (y-4)) == "ASS"){
       punkte_computer = punkte_computer - 10;
       punkte_aktualisieren_computer = document.getElementById("zaehler_comp").firstChild.nodeValue.length;
       document.getElementById("zaehler_comp").firstChild.replaceData(0, punkte_aktualisieren_computer, punkte_computer);
       ass_zaehler_comp++;
       break;
      }
      else {
       break;
      }
     }
      else {
       x++;
      }
     } while(x < set_computer.length);
     //Kein Ass vorgekommen
     if(punkte_computer > 21){
      //alert("Gewonnen");
     }
     //Es ist ein Ass vorgekommen
     else {
      //normal weiterspielen..
      //punkte_computer = weiterer_wert_computer(bild, zufall_computer, karte_comp, anzeigetafel_comp, punkte_computer);
     }
    }
    else if(punkte_computer >= 17 && punkte_computer <= 21){
     break;
    }
  }while(punkte_computer < 17);
   
  //21 Gewonnen
  if(punkte_spieler == 21 && punkte_computer < 21){
    alert("Gewonnen!");
  }
  else if(punkte_spieler > punkte_computer){
    alert("Gewonnen!");
  }
  else if(punkte_spieler == punkte_computer){
    alert("Remis!");
  }
  else if(punkte_computer > 21){
   alert("Gewonnen");
  }
  else {
    alert("Verloren!");
  }
  });
  });
});
</script>
</head>
<body>
<div id="anzeige">
Blackjack
</div>
<div id="menu">
<a href="#" id="start">Spiel starten</a>
</div>
<div id="oben">
<div id="darstellung">
</div>
<span class="computer_verdeckt"></span>
<span class="computer_offen"></span>
<div id="zaehler_comp">
</div>
</div>
<div id="unten">
<span class="spieler">
</span>
<div id="konsole">
<form>
<input class="hit" type="button" name="hit" value="Hit">
<input class ="stand" type="button" name="stand" value="Stand">
</form>
</div>
<div id="zaehler_spieler">
</div>
</div>
</body>
</html>
 
Jap ich seh durch, nur funktioniert das Ganze bei mir nicht.

Das funktioniert auch bei dir wenn du meinem Beispiel folgst und nicht wie bisher alles in die click-Funktion quetschst.
Das wollte ich dir mit dem Beispiel ja eigentlich zeigen.
Es ist sinnvoller / leserlicher / variabler den Code in Teilschritte/Funktionen aufzugliedern.

Das Problem das du die click-Funktion von sich selbst aus nochmal aufrufen musst hättest du so Beispielsweise garnicht.
Wie du im Beispiel siehst ruft die click-Funktion die startGame-Funktion die unter anderem dafür zuständig ist erstmal wieder alles auf Anfang zu setzen.
Und wenn dann eben ein neues Spiel gestartet werden soll dann wird die startGame-Funktion wieder aufgerufen und somit alles auf Anfang gesetzt.

In diesem Sinne : Ordnung ist das halbe Leben ;)
 
Zurück