JavaScriptsSpiele

Glücks Klick

Sechzehn Felder aufdecken — hinter jedem steckt ein Symbol mit Punkten oder Punktabzug.

Scano One hat uns dieses kleine Glücksspiel eingeschickt. Vor euch liegen sechzehn leere Felder, und hinter jedem steckt ein Symbol. Ihr deckt sie nacheinander per Klick auf — je nach Symbol gibt es Punkte dazu oder Punkte abgezogen. Ein bereits aufgedecktes Feld lässt sich nicht noch einmal anklicken.

Geschicklichkeit hilft hier nicht weiter: Welches Symbol wo liegt, würfelt das Script beim Start aus, und ihr könnt es den Feldern nicht ansehen. Am Ende steht schlicht die Summe aus Glück und Pech. Mit „Neues Spiel" wird das Feld neu gemischt und der Punktestand auf null gesetzt.

Der große Gewinn ist das Dollarzeichen mit 200 Punkten, der größte Verlust das Minus mit 50 Punkten Abzug. Weil alle sechs Symbole gleich wahrscheinlich sind, ist der Schnitt pro Feld positiv — wer alle sechzehn Felder aufdeckt, landet im Mittel bei rund 530 Punkten. Spannender wird es, wenn ihr euch vorher ein Ziel setzt und schaut, mit wie wenigen Feldern ihr es erreicht.

Wer noch mehr vom Zufall abhängen möchte, findet bei uns die Glücksbuttons, den Münzwurf und Zahlenraten. Wenn ihr lieber Paare sucht statt Punkte zu sammeln, ist Concentration das Richtige.

Spiele Baujahr 2009 läuft in deinem Browser
Symbol$-§%?*
Punkte+200−50+30+20−10+10
Eingesandt von Scano One

So funktioniert das Script

Das Script besteht aus zwei Funktionen: starten() mischt die sechzehn Symbole und legt sie in einer Liste ab, klick() deckt ein Feld auf und verrechnet die Punkte. Die Felder selbst stehen fertig im HTML — das Script füllt sie nur.

let punkte = 0;
let felder = [];
const knoepfe = document.querySelectorAll("#gk-feld .gk-knopf");

felder ist ein Array, also eine nummerierte Liste: An Position 0 steht das Symbol des ersten Feldes, an Position 15 das des letzten. querySelectorAll holt alle sechzehn Knöpfe auf einen Schlag und legt sie ebenfalls als nummerierte Liste ab. Weil beide Listen dieselbe Reihenfolge haben, gehört knoepfe[7] immer zu felder[7] — das ist der ganze Zusammenhalt des Spiels.

const a = 1 + Math.floor(Math.random() * 6);
switch (a) {
  case 1:
    b = "$";
    break;
  ...
}

Hier wird gewürfelt. Math.random() liefert eine Kommazahl zwischen 0 und knapp unter 1, mal 6 ergibt das den Bereich 0 bis knapp 6, Math.floor schneidet die Nachkommastellen ab, und das + 1 verschiebt das Ergebnis auf 1 bis 6 — jede Zahl gleich wahrscheinlich. Die switch-Anweisung übersetzt sie dann in ein Symbol. switch ist die übersichtliche Schreibweise für viele if-Abfragen auf denselben Wert; das break hinter jedem Fall ist Pflicht, sonst laufen die folgenden Fälle mit.

do {
  knoepfe[i].value = " ";
  ...
  felder[i] = b;
  i++;
}
while (i !== 16);

Eine do…while-Schleife läuft die sechzehn Felder durch: Sie leert die Aufschrift des Knopfes und legt daneben das ausgewürfelte Symbol in der Liste ab. Der Unterschied zur gewöhnlichen while-Schleife ist, dass der Rumpf hier mindestens einmal ausgeführt wird, bevor geprüft wird — bei sechzehn festen Durchläufen macht das keinen Unterschied.

if (knoepfe[zahl].value === " ") {
  const aktuell = felder[zahl];
  ...
  knoepfe[zahl].value = aktuell;
  anzeige.value = punkte;
}

Beim Klick wird zuerst geprüft, ob das Feld noch zugedeckt ist — daran erkennt man es, dass auf dem Knopf nur ein Leerzeichen steht. Nur dann gibt es Punkte. Anschließend bekommt der Knopf das Symbol als Aufschrift und ist damit automatisch für weitere Klicks gesperrt: Beim nächsten Mal steht dort kein Leerzeichen mehr, und die Bedingung ist nicht mehr erfüllt. Ein eigener Merker, welche Felder schon offen sind, wird so gar nicht gebraucht.

for (let i = 0; i < knoepfe.length; i++) {
  knoepfe[i].addEventListener("click", function () {
    klick(i);
  });
}

Zum Schluss bekommt jeder Knopf seinen Zuhörer. Die kleine Funktion darin merkt sich die Nummer i aus dem Schleifendurchlauf und reicht sie beim Klick weiter — das funktioniert nur, weil i mit let deklariert ist und damit für jeden Durchlauf neu existiert. Mit dem alten var hätten alle sechzehn Knöpfe dieselbe Nummer gemeldet, nämlich die 16.

Zum Anpassen: Die Punktwerte stehen im switch von klick() und lassen sich beliebig ändern — vergesst dann nicht die Tabelle im HTML. Wollt ihr mehr oder weniger Felder, ändert ihr die Zahl der Knöpfe im Markup, die 16 in der Schleifenbedingung und die Spaltenzahl in grid-template-columns. Für andere Symbole tauscht ihr einfach die Zeichen in beiden switch-Blöcken aus.

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