Adam: Radio button / function / zufallszahl vergleichen

Guten Tag,
das ist das erste mal dass ich in einem JS Forum schreibe und hoffe hier Hilfe zu bekommen :-) ich persönlich bin Javascript Anfänger.
Folgendes Problem:
Ich habe mir zum Ziel gesetzt ein simples Roulettespiel mit JS zu schreiben.
Momentan habe ich also 5 Radio Buttons mit Werten von 1-5
einen Button der eine Funktion in gang setzt, in der eine Zufallszahl zwischen 1-5 erstellt wird und überprüft ob es mit dem Radio buttons übereinstimmt.
Nun kriege ich es aber irgendwie nicht hin eine Variable zu erstellen, welche den Kontostand anzeigt und sich mit jedem klick durch den Button verändert.
Also: Radio steht auf 2 -> es kommt die 4, alert(Sie haben verloren), Ausgabe: Kontostand = Kontostand - 10;

(Das man Geld setzen kann und die wirklichen berechnungen durchgeführt werden, versuche ich später, erstmal muss es mit festen Zahlen klappen und einer Variable die sich nach mehrmaligem Klicken auf den Button verändert)

Bin für alle Denkanstöße oder Lösungen super dankbar
Hier mein aktueller Quelltext:

  
	<form name="fff">  
		<input type="radio" name="zahl" value="1" />1  
		<input type="radio" name="zahl" value="2" />2  
		<input type="radio" name="zahl" value="3" />3  
		<input type="radio" name="zahl" value="4" />4  
		<input type="radio" name="zahl" value="5" />5  
		<br><br>  
		<input type="text" name="eee">  
		<input type="reset" value="löschen">  
		<input type="button" onclick="Super()" name="bbb" value="TEST" />  
	</form>  

  
<script type="text/javascript">  
  
var geld = 200;  
  
function Super(){  
  
var radio = document.fff.zahl;  
  
a = 1 + 4*(Math.random());  
a = Math.round(a);  
  
for(var i=0;radio[i];i++) {  
  
    if(radio[i].checked && a == 1) {  
		alert(radio[i].value);  
		geld = geld + 1;  
			return true;  
		}  
	else {  
		alert("verloren");  
			return true;  
		}  
}  
  
}  
document.write(geld);  

  1. @@Adam:

    nuqneH

      <input type="radio" name="zahl" value="1" />1  
    

    Die Beschriftungen der Radiobuttons sollten http://de.selfhtml.org/html/formulare/strukturieren.htm#label@title=Labels sein. (Beachte den Absatz vor „Beachten Sie“!)

    a = 1 + 4*(Math.random());
    a = Math.round(a);

    Wann immer Math.round() im Zusammenhang mit Math.random() auftaucht, ist es vermutlich falsch.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Das mit den Labeln wusste ich nicht, danke
      und ich habe mir schon verschiedene Möglichkeiten zur Erstellung einer Zufallazahl angeschaut. u.a versucht das HP-Verfahren selbst niederzuschreiben etc. diese Methode welche ich momentan benutz habe schien mir bisher am einfachsten und kürzesten, aber wie ich sehe nicht optimal.

  2. Moin!

    Hm. Ich versteh grad nicht genau, wo dein Problem ist. Du schaffst es ja bei einem Gewinn den Wert der Variable zu erhöhen. Wo genau ist jetzt Dein Problem den Wert zu verringern?

    Und welches Problem hast Du genau mit der Ausgabe? Ein alert() kannst du doch schonmal.

    --
    Signaturen sind blöd!
    1. Achso, vielleicht hab ichs nicht gut erklärt, aber hinter der Funktion habe ich ein document.write()geld; stehen.
      Aber das wird durch das geld = geld + 1; in der if Anweisung nciht beeinträchtigt.
      Ich hatte im else auch geld = geld - 10 stehen aber da ist genausowenig passiert.
      Und was genau da nciht kallpt weiss ich gerade nciht.

      1. Ich meine document.write(geld) , sorry

      2. Ah!

        Okay. Da hast Du Deinen Fehler. Das document.write() nach der Funktion wird genau 1x ausgeführt. Genau dann, wenn das Script zum ersten Mal durchlaufen wird. Danach rufst Du die Funktion auf, aber machst keine Ausgabe mehr. Du könntest ans Funktionsende ein document.write() einbauen, aber das würde Dein Dokument zerstören (überschreiben) Gib doch spaßeshalber mal ein alert(geld) aus und du hast Deinen Wert.

        Wenn Du den Wert im Dokument sgtheen haben willst, brauchst Du zuerstmal ein Element, in das du schreiben möchtest. Dann kannst Du dieses Element bearbeiten und den Inhalt anpassen.

        --
        Signaturen sind blöd!
        1. Wenn Du den Wert im Dokument sgtheen haben willst, brauchst Du zuerstmal ein Element, in das du schreiben möchtest. Dann kannst Du dieses Element bearbeiten und den Inhalt anpassen.

          Das hört sich alles logisch an ich kanns nachvollziehen.
          Aber was meinst du mit Element? Was nimmt man in so einem Fall?
          Meinst du ein Array, oder etwas anderes?gibt es in Javascript konkret solche veränderbaren Teile die man genau "Element" nennt?
          das hört sich vielleicht blöd an aber ich hab nach Javascript Elementen gesucht und nichts brauchbares gefunden. :D
          aber Danke bis hierher, der Fehler ist mir zumindest klar...

          1. @@Adam:

            nuqneH

            Aber was meinst du mit Element?

            Ein HTML-Element, bspw. 'samp'. Es dürfte einfacher sein, wenn das bereits im Markup steht und eine ID hat:

            <samp id="amount"></samp>

            Mit document.[ref:self812;javascript/objekte/document.htm#get_element_by_id@title=getElementById()] kannst du darauf zugreifen. Das solltest du nur einmal tun und die Referenz in einer Variablen speichern:

            var amountElement = document.getElementById("amount");

            Per [ref:self812;javascript/objekte/all.htm#inner_html@title=innerHTML] (oder DOM-Methoden) kannst du dann den Inhalt des Elements ändrn:

            amountElement.innerHTML = "42 Taler";

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Sehr cool, das hab ich kapiert.

              so siehts bisher aus:

              <samp id="KST">200</samp>
              ___________________________________________

              var NKST = document.getElementById("KST");  
                
              function Super(){  
                
              var radio = document.fff.zahl;  
                
              a = Math.floor(Math.random() * 5) +1;  
              for(var i=0;radio[i];i++) {  
                
                  if(radio[i].checked && a == 1) {  
              		alert("Gewonnen!!! "/*radio[i].value*/);  
              		NKST.innerHTML = (NKST.innerHTML +1);  
              			return true;  
              		}  
              	else {  
              		alert("Verloooren!!! es kam die: " + a);  
              		NKST.innerHTML = (NKST.innerHTML -1);  
              			return true;  
              		}  
                
              }  
              document.write(NKST);  
              }  
              
              

              nu kommt aber Folgendes:
              wenn in diesem fall die 1 beim radio gechecked ist aber nicht die 1 als zufallszahl kommt , subtrahiert er vernünftig und gibt mir in diesem fall den wert -1 aus ...
              Wenn aber der wert stimmt, schreibt er mir die 1 daneben und dass passiert jedes mal wenn die 1 dann tatsächlich kommt.
              Der 'else' Teil funktioniert,wie gesagt.

              Es ist aber derselbe Befehl, weshalb reagiert er nicht genauso, sondern verschieden?

              1. Hi!

                Du kannst das document.write weglassen.

                Zu deinem Additionsproblem:

                Der Inhalt des HTMLelements ist immer ein String. In deinem Fall z.B. '200'.

                Nun die Fälle. Als erstes einen String der deine 200 enthält und als zweites einen String der Buchstaben enthält.

                '200' - 1 oder 'Text' - 1

                'Text' - 1 ist Unsinn. Schliesslich ist 'Text' ein String. Aber wenn 'Text' vielleicht ein Zahl ist? Ne isses nicht. Geht nicht.
                '200' - 1 ist Unsinn. Schliesslich ist '200' ein String. Aber wenn '200' vielleicht eine Zahl ist? Ah! 200 - 1 macht Sinn! Ergbenis: 199

                '200' + 1 oder 'Text' + 1

                'Text' + 1 ist Unsinn. Schliesslich ist 'Text' ein String.  Also machen wir mal eben eine Stringverkettung 'Text'+'1'. Ergibt: Text1
                '200' + 1 ist Unsinn.  Schliesslich ist '200' ein String. Also machen wir mal eben eine Stringverkettung '200'+'1'. Ergibt: 2001

                Genauso 'denkt' Javascript. Das + verkettet eben auch Strings. Also musst Du dafür sorgen dass '200' als Zahl verstanden wird. Das geht indem man mit ihm eine eindeutige mathematische Operation durchführt ('200' * 1) Oder indem man es in eine Zahl castet.: z.B. http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt()

                Beachte bei parseInt() aber den Text unter 'Beachten Sie'.

                --
                Signaturen sind blöd!
                1. haha, soweit hab ich auch schon mitgedacht und hab das irgendwie mit 200 *1 versucht... aber wollte irgendwie nciht...
                  Aber das mit dem parseInt() kling interessant, mir fehlen noch viele dieser Möglichkeiten und Begriffe...
                  Aber nen riesigen Dank an euch, finds einfach toll wie schnell man guten Rat in so einem Forum kriegt... sollte meine alleingänge unterlassen und öfters mal Hilfe annehmen,haha... also Danke nochmal!
                  Morgen früh sollte ich Zeit haben es umzusetzen.

                  1. Hallo,
                    habe bisher 5 Radio Buttons...
                    in einer Schleife wird der geklickte ermittelt und mit einer Zufallszahl verglichen und somit ein Wert auf oder abgestuft...
                    Nun verzweifel ich an der dümmsten Sache...

                    <samp id="KST">200</samp>  
                            <form name="formular">  
                                    <label for="uno">Eins</label>  
                                    <input type="radio" id="uno" name="zahl" value="1" />  
                                    <label for="dos">Zwei</label>  
                                    <input type="radio" id="dos" name="zahl" value="2" />  
                                    <label for="tres">Drei</label>
                    

                    etc...

                      
                    function Super(){  
                    var radio = document.formular.zahl;  
                      
                    a = Math.floor(Math.random() * 5) +1;  
                    for(var i=0;radio[i];i++) {  
                      
                            if(radio[0].checked && a == 1) {  
                                    alert("Gewonnen!!! - Sie wählten die: "+ radio[0].value + " Es kam die: " + a);  
                                    NKST.innerHTML = (NKST.innerHTML *1 +1);  
                                    return true;  
                                            } else {  
                                                    if(radio[1].checked && a == 2) {  
                                            alert("Gewonnen!!! - Sie wählten die: "+ radio[1].value + " Es kam die: " + a);  
                                            NKST.innerHTML = (NKST.innerHTML *1 +1);  
                                            return true;  
                                                    } else {  
                                                            if(radio[2].checked && a == 3) {  
                                                    alert("Gewonnen!!! - Sie wählten die: "+ radio[2].value + " Es kam die: " + a);  
                                                    NKST.innerHTML = (NKST.innerHTML *1 +1);
                    

                    etc....

                    momentan sieht man durch radio[1].value die Ausgabe des gewählten Knopfes... aber die Schleife kriegt ja auch rasu welcher Knopf gedrückt ist, und ich kapier wie ich das formulieren soll...
                    hab schon vieles versucht wie:
                    radio[i].value (zeigt mir immer nur die 1)
                    i (zeigt undefined)
                    document.formular.zahl.checked (glaube das zeigte nur true oder false)
                    und andere Kombinationen....

                    Falls die Frage sehr blöd klingt, was sie bestimmt tut, ich bin Anfänger.