JavaScriptsSpiele

Münzwurf

Kopf oder Zahl? Setzt Punkte auf eine Münzseite und schaut, ob euer Konto wächst oder schrumpft.

Bei diesem kleinen Glücksspiel könnt ihr auf den Ausgang eines Münzwurfs wetten. Zu Beginn bekommt ihr 100 Punkte geschenkt. Ihr wählt eine Münzseite — Kopf oder Zahl —, tragt einen Einsatz ein und klickt auf „Münze werfen". Ratet ihr richtig, werden euch die gesetzten Punkte gutgeschrieben, ratet ihr falsch, werden sie abgezogen.

Der Einsatz ist immer schon mit der Hälfte eures aktuellen Punktestands vorbelegt, ihr könnt ihn aber frei überschreiben. Mehr Punkte setzen als ihr besitzt, lässt das Script nicht zu. Fällt euer Konto auf null, ist die Runde vorbei — dann hilft nur ein Neuladen der Seite.

Wissenswertes zum Spiel: Eine faire Münze zeigt in jedem Wurf mit gleicher Wahrscheinlichkeit Kopf oder Zahl, und zwar unabhängig davon, was vorher gefallen ist. Wer nach fünfmal Kopf glaubt, jetzt „müsse" endlich Zahl kommen, sitzt dem sogenannten Spielerfehlschluss auf — die Münze hat kein Gedächtnis. Genau deshalb pendelt euer Punktestand hier langfristig um den Startwert herum, statt planbar zu wachsen. Das Script würfelt seine Münze übrigens nicht mit einem einfachen 0-oder-1-Zufall, sondern zieht eine Zufallszahl bis 10.000 und schaut, ob sie gerade oder ungerade ist — ein Umweg, der aufs Gleiche hinausläuft.

Wenn ihr Gefallen an Glücksspielen findet, schaut euch auch die Glücksbuttons und das Würfelspiel „Wer kommt an die 50?" an. Wer lieber mit System rät als auf Glück zu setzen, ist beim Zahlenraten gut aufgehoben. Und wer den Zufall selbst braucht, findet unter Zufallszahl das passende Werkzeug.

Spiele Baujahr 2006 läuft in deinem Browser

So funktioniert das Script

Das Script hat vier Aufgaben: eine Münze werfen, die Eingaben prüfen, den Punktestand fortschreiben und das Ergebnis anzeigen. Der Punktestand lebt in einer einzigen Variablen, die zwischen den Würfen erhalten bleibt — deshalb steckt alles in einer sofort ausgeführten Funktion, die diese Variable umschließt.

function getZuffi() {
  return Number(Math.random() * 10000);
}

function getResult() {
  const zuffi = Math.round(getZuffi());
  if (zuffi % 2 === 0) {
    return 1;
  }
  return 2;
}

Das ist der Münzwurf. Math.random() liefert eine Zufallszahl zwischen 0 und 1, die Multiplikation mit 10000 streckt sie auf den Bereich 0 bis 10000, und Math.round rundet auf eine ganze Zahl. Der Rest-Operator % gibt den Rest einer Division zurück: Ist zuffi % 2 gleich 0, war die Zahl gerade — das Script wertet das als Kopf (1), sonst als Zahl (2). Ein direktes Math.random() < 0.5 täte dasselbe; der Umweg über die große Zahl ist Geschmackssache des Autors.

const guess = parseInt(seiteFeld.value, 10);
const guessCredit = parseInt(einsatzFeld.value, 10);

parseInt macht aus dem Text eines Formularfelds eine ganze Zahl. Die 10 dahinter ist die Basis des Zahlensystems — Dezimal. Man gibt sie besser immer an, sonst deuten manche Browser eine führende Null als Oktalzahl. Weil die Auswahlliste die Werte 1 und 2 trägt, ist guess danach direkt mit dem Ergebnis der Münze vergleichbar.

if (guessCredit > credit) {
  ausgabe.textContent = "Du kannst nicht mehr Punkte einsetzen als du zur Verfügung hast!";
  return;
}
if (credit <= 0) {
  ausgabe.textContent = "Du hast keine Punkte mehr zur Verfügung. Das Spiel ist vorbei.";
  return;
}

Vor jeder Runde laufen die Prüfungen der Reihe nach durch. Trifft eine zu, erscheint ein Hinweis in der Ergebnisfläche und return bricht die Funktion ab — es wird also weder gewonnen noch verloren. Die Reihenfolge ist wichtig: Erst wenn niemand über seine Verhältnisse setzt, wird geprüft, ob überhaupt noch Punkte da sind.

if (guess === result) {
  credit += guessCredit;
} else {
  credit -= guessCredit;
}

Das ist die ganze Buchhaltung. += und -= sind Kurzschreibweisen für „nimm den alten Wert und addiere bzw. subtrahiere etwas". Die drei Gleichheitszeichen in === vergleichen streng, also Wert und Typ — bei zwei Zahlen macht das keinen Unterschied, es ist aber die sicherere Gewohnheit.

function stand() {
  standFeld.textContent = "Du hast " + credit + " Punkte, wieviel willst du setzen?";
  einsatzFeld.value = Math.round(credit / 2);
}

stand() schreibt den aktuellen Kontostand über die Ergebnisfläche und schlägt gleich die Hälfte davon als nächsten Einsatz vor. Die Funktion wird zweimal gebraucht: einmal am Ende jeder Runde und einmal ganz am Schluss des Scripts, damit schon beim Laden der Seite die 100 Startpunkte dastehen.

Zum Anpassen: Das Startguthaben steckt in let credit = 100; — dort dürft ihr großzügiger sein. Wollt ihr statt der Hälfte einen festen Einsatz vorschlagen, ersetzt ihr Math.round(credit / 2) durch eine feste Zahl. Und wer aus dem Münzwurf einen Würfel machen will, ändert die Prüfung auf gerade/ungerade in eine Rechnung mit % 6 und ergänzt die Auswahlliste entsprechend.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Spiele