Zahlenraten 2
Der Rechner denkt sich eine Zahl zwischen 1 und 100 aus und verrät nach jedem Tipp nur, ob sie größer oder kleiner ist.
Dieses Script hat uns unser User „Pokerstrike" eingeschickt. Es denkt sich beim Laden der Seite eine ganze Zahl zwischen 1 und 100 aus, die ihr erraten müsst. Nach jedem Tipp bekommt ihr eine von zwei Auskünften: „Zu groß" oder „Zu klein". Habt ihr die Zahl getroffen, verrät euch das Script, wie viele Versuche ihr gebraucht habt, und denkt sich sofort eine neue Zahl aus.
Die Bedienung ist einfach: Zahl ins Feld eintragen, auf „raten" klicken oder die Eingabetaste drücken. Unter der Ausgabe läuft der Versuchszähler mit. Mit „Neue Zahl" könnt ihr jederzeit von vorn beginnen, ohne die Seite neu zu laden.
Wer systematisch vorgeht, braucht nie mehr als sieben Versuche. Der Trick heißt Intervallhalbierung: Man tippt immer auf die Mitte des noch möglichen Bereichs, also zuerst auf 50. Ist die Antwort „Zu groß", bleiben 1 bis 49 übrig, und der nächste Tipp ist die 25. Jeder Tipp halbiert so den Suchbereich — aus 100 Möglichkeiten werden 50, 25, 13, 7, 4, 2 und schließlich 1. Genau nach diesem Prinzip suchen auch Computerprogramme in sortierten Listen.
Eine ältere Fassung desselben Spiels findet ihr unter Zahlenraten. Wer lieber Farben statt Zahlen errät, ist bei Mastermind richtig, und wenn ihr Zufallszahlen für eigene Zwecke braucht, hilft der Zufallszahl-Generator weiter.
Versuche: 0
So funktioniert das Script
Das Script ist in zwei Funktionen aufgeteilt: initZuffi() denkt sich eine neue Zahl aus und stellt den Versuchszähler zurück, zufall() vergleicht euren Tipp mit dieser Zahl und schreibt die Antwort in die Ausgabefläche. Der Rest ist Verdrahtung — Knöpfe und Eingabetaste rufen diese beiden Funktionen auf.
function initZuffi() {
Zufallszahl = Math.ceil(Math.random() * 100);
Versuche = 0;
anzeige.textContent = Versuche;
}
Math.random() liefert eine Kommazahl zwischen 0 und 1, die 1 selbst wird nie erreicht. Mal 100 ergibt das eine Zahl zwischen 0 und 100, und Math.ceil() rundet auf die nächste ganze Zahl auf — damit sind alle Werte von 1 bis 100 möglich und jeder gleich wahrscheinlich. Für einen anderen Zahlenraum ersetzt ihr einfach beide Hundert auf der Seite und im Script.
const Ratezahl = parseInt(eingabe.value, 10);
if (isNaN(Ratezahl)) {
ausgabe.textContent = "Bitte tragt zuerst eine Zahl zwischen 1 und 100 ein.";
return;
}
Was im Eingabefeld steht, ist immer Text. parseInt() liest daraus eine ganze Zahl; die 10 als zweiter Wert legt fest, dass im Zehnersystem gerechnet wird. Steht dort gar keine Zahl, liefert parseInt den Sonderwert NaN („not a number"), den man nur mit isNaN() erkennen kann. In diesem Fall bricht return die Funktion ab, bevor der Versuchszähler hochgezählt wird — ein leeres Feld soll schließlich keinen Versuch kosten.
if (Ratezahl > Zufallszahl) {
ausgabe.textContent = "Zu groß";
}
if (Ratezahl < Zufallszahl) {
ausgabe.textContent = "Zu klein";
}
Der eigentliche Vergleich ist denkbar schlicht: größer, kleiner oder gleich. Weil immer genau einer der drei Fälle zutrifft, kommt sich die Reihenfolge der Abfragen nicht in die Quere. Der Text in den Anführungszeichen ist übrigens das, was ihr am leichtesten anpassen könnt — aus „Zu groß" wird so schnell „Kleiner!" oder ein Hinweis in eurer eigenen Tonlage.
ausgabe.textContent = "Richtig! Du hast " + Versuche +
" Versuche gebraucht. Es wird eine neue Zufallszahl generiert.";
initZuffi();
Beim Treffer wird der Versuchszähler in die Meldung eingebaut — das Pluszeichen fügt hier Texte und Zahlen zu einer Zeichenkette zusammen. Direkt danach startet initZuffi() die nächste Runde: neue Zahl, Zähler zurück auf null. Das Original zeigte diese drei Meldungen nacheinander in alert()-Fenstern an, die man einzeln wegklicken musste; auf der Seite ausgegeben liest sich das Ergebnis deutlich angenehmer.
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
-
Checkbox Spiel
-
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