Checkbox Spiel
100 Kästchen, 30 Sekunden Zeit — wie viele schafft ihr anzuklicken?
Dieses kleine Geschicklichkeitsspiel besteht aus 100 Kästchen und einer Uhr. Sobald ihr das erste Kästchen anklickt, beginnt die Zeit zu laufen: 30 Sekunden habt ihr, um so viele Häkchen wie möglich zu setzen. Ist die Zeit abgelaufen, nimmt das Script jeden weiteren Klick sofort wieder zurück — der Punktestand steht dann fest.
Gezählt wird ehrlich in beide Richtungen: Ein gesetztes Häkchen bringt einen Punkt, ein wieder entferntes zieht einen ab. Wer alle 100 Kästchen erwischt, bekommt eine eigene Meldung. Zwischendurch kommentiert das Script den Spielstand — bei der Hälfte der Zeit, beim ersten Punkt, bei 50 Punkten und am Ende. Mit „neustart" beginnt eine neue Runde, die Uhr steht dann wieder auf 30.
Das Spiel misst vor allem eines: wie schnell ihr mit der Maus zielen könnt. Der Wechsel zwischen zwei Kästchen dauert umso länger, je kleiner sie sind und je weiter sie auseinanderliegen — das ist ein bekannter Zusammenhang aus der Bedienforschung. Auf dem Handy sind Kästchen dieser Größe eine echte Herausforderung, mit der Maus schafft man mit etwas Übung deutlich über 50 Punkte.
Wenn ihr eher eure Reaktion als eure Zielgenauigkeit testen wollt, probiert unseren Reaktionstest oder Stoppe den Zähler. Auf schnelles Klicken kommt es auch bei Glücksbuttons an.
Die Uhr startet mit dem ersten Klick auf ein Kästchen.
So funktioniert das Script
Das Script hat vier Aufgaben: Es baut die 100 Kästchen auf, zählt die Klicks, lässt eine Uhr rückwärts laufen und kommentiert nebenbei den Spielstand. Für jede Aufgabe gibt es eine eigene Funktion. Interessant ist, dass hier zwei Zeitgeber gleichzeitig laufen — einer im Sekundentakt für die Uhr, einer im Zehntelsekundentakt für die Meldungen.
for (let i = 0; i < 100; i++) {
const kasten = document.createElement("input");
kasten.type = "checkbox";
kasten.id = "myCheckboxGame" + i;
spielfeld.appendChild(kasten);
}
Hundert Kästchen von Hand ins HTML zu schreiben wäre mühsam, deshalb erzeugt eine Schleife sie: document.createElement baut ein neues Element, die drei Zuweisungen machen ein Ankreuzfeld mit fortlaufender id daraus, und appendChild hängt es in den Container. Die Zehnerreihen entstehen nicht im Script, sondern im CSS — grid-template-columns: repeat(10, 1.5rem) sorgt dafür, dass nach jedem zehnten Kästchen umgebrochen wird.
if (!play) {
play = true;
startTime = now.getTime();
start = "ja";
clock();
command();
}
Die Uhr startet nicht beim Laden der Seite, sondern beim ersten Klick. Der Merker play sorgt dafür, dass dieser Block nur ein einziges Mal ausgeführt wird — sonst würde jeder weitere Klick eine zweite Uhr starten. now.getTime() liefert die aktuelle Zeit in Millisekunden seit dem 1. Januar 1970; dieser Startzeitpunkt wird gemerkt, um später die verstrichene Zeit auszurechnen.
if (now.getTime() - startTime > Number(zeit) * 1000) {
element.checked = !element.checked;
return;
}
Das ist die Schlusskontrolle: Liegt der Klick mehr als 30 Sekunden (also 30 × 1000 Millisekunden) nach dem Start, wird er rückgängig gemacht. !element.checked kehrt den Zustand um — war das Kästchen gerade angehakt worden, ist es danach wieder leer. return verlässt die Funktion sofort, sodass der Punktestand unverändert bleibt.
function clock() {
if (start !== "nein") {
restzeit = restzeit - 1;
feldZeit.value = restzeit;
if (restzeit !== 0) {
window.setTimeout(clock, 1000);
}
}
}
Die Uhr ruft sich selbst auf: Sie zieht eine Sekunde ab, schreibt den Rest ins Anzeigefeld und meldet sich mit setTimeout in 1000 Millisekunden erneut — solange, bis die Null erreicht ist. Ein Druck auf „neustart" setzt start auf "nein"; die nächste Runde der alten Uhr findet dann die Abbruchbedingung vor und läuft nicht weiter.
if (punkt === 1) {
text = "Na endlich fängst du an...";
} else if (punkt === 100) {
text = "Wow, du hast alle angeklickt...";
}
command() ist der Kommentator. Zehnmal pro Sekunde schaut die Funktion auf Restzeit und Punktestand und wählt daraus einen Text aus. Die Meldungen sind der Teil, an dem sich am leichtesten schrauben lässt: Ihr könnt die Sprüche austauschen oder bei anderen Punktzahlen einen eigenen Kommentar einbauen. Auch die Spieldauer ist schnell geändert — ganz oben steht const zeit = "30";, und die Halbzeitmeldung rechnet sich ihren Zeitpunkt daraus selbst aus.
kasten.addEventListener("click", function () {
display(kasten);
});
Jedes der 100 Kästchen bekommt beim Erzeugen seinen eigenen Zuhörer. Die kleine Funktion darin merkt sich, zu welchem Kästchen sie gehört, und reicht es an display() weiter — dort wird gezählt. Das ist der moderne Ersatz für das früher übliche onclick-Attribut direkt im HTML: Markup und Verhalten bleiben so sauber getrennt.
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
-
ASCII Minesweeper
-
Asteroids
-
Ausweichen
-
Ballspiel
-
Bennys Quiz
-
Blackjack
-
Blu Mania
-
BreakOut
-
Buchstaben zählen
-
Buchstabenpuzzle
-
Concentration
-
Der längste Drücker
-
Die Türme von Hanoi
-
Einmaleins Trainer
-
Escape
-
Galgenmännchen
-
Galgenmännchen 2
-
Game Over Game
-
Glücks Klick
-
Glücksbuttons
-
Ich sehe was
-
Kniffel
-
Labyrinth
-
Liebesrechner
-
Lights Out
-
Lights Out 2
-
Mastermind
-
Minesweeper
-
Mühle