Bitte benutze den "Zurück"-Button Deines Browsers, um zum aktuellen Spielstand zurückzukehren!
Dieses Mastermind-Spiel funktioniert so: Mein Homepage-Server denkt sich eine vierstellige Zahl, die Du erraten mußt. Die Versuche kannst Du in das Eingabe-Feld eingeben.
In der gedachten Zahl können alle Ziffern inklusive der Null vorkommen und es können auch Ziffern doppelt vorkommen.
Der Homepage-Server bewertet Deinen Rateversuch und zwar in zwei Darstellungen: numerisch und (semi-)grafisch. Die Zahl vor dem Punkt bzw. die Anzahl der schwarzen Sternchen gibt die Anzahl der Ziffern an, die in der geheimen Zahl an der gleichen Stelle wie in Deinem Versuch vorkommen, die Zahl nach dem Punkt sowie die Anzahl der weißen Sternchen die Ziffern, die zwar vorkommen, aber an einer anderen Stelle.
Beispiel: Die geheime Zahl ist 4711 und Dein Versuch ist 1724. Die Bewertung würde 1.2 lauten, weil die 7 an der richtigen Stelle ist und die 1 und die 4 zwar vorkommen, aber an einer anderen Stelle. Die 1 wird nur einmal gezählt, weil sie im Versuch nur einmal vorkommt.
Achtung!!! Es gibt Web-Clients, die auch von CGI erzeugte Webseiten cachen. Dies merkt man daran, daß dieses Programm sich immer dieselbe Zahl denkt. In diesem Falle muß man nach dem Anfordern eines neuen Spiels die Seite noch einmal "neu laden".
Das Programm ist ein C-Programm, das die CGI-Schnittstelle nutzt. Es ist lediglich als Beispiel für die Möglichkeiten von CGI gedacht. Wenn es noch einen gewissen Unterhaltungs-Wert hat, freut es mich.
Beachte, daß der Input-Focus automatisch auf das Eingabe-Feld gelegt wird. Dies wird mit einer vordefinierten (!) Javascript-Funktion erreicht! Konkreter: Dem Body-Tag wird der Parameter onload="document.thisform.next.focus()" übergeben, damit wird der Focus an das Eingabe-Feld "next" in der Form "thisform" des aktuellen Dokuments übergeben. Dies ist benutzerfreundlich, aber leider nicht selbstverständlich! Bei vielen kommerziellen Seiten, selbst bei bekannten Suchmaschinen muß man das Eingabe-Feld erst anklicken...
Dieses Programm ist übrigens das erste, das ich in meinem Leben geschrieben habe und zwar 1979 damals noch auf einem programmierbaren Taschenrechner TI-58. Die Bewertung zu erzeugen ist übrigens nicht ganz so einfach, wie es zunächst klingt und zwar deswegen, weil Ziffern doppelt vorkommen können, die aber in der Bewertung nur einmal gezählt werden!
Hier noch ein paar Hinweise, wie dieses Programm funktioniert:
Ein prinzipielles Problem besteht darin, daß HTTP gewissermaßen nur eine Einmal-Kommunikation zuläßt: Auf eine Anforderung (z.B. Eingabe eines Rate-Versuches) kommt eine Antwort. Mit anderen Worten: Dieses CGI-Programm muß fü jeden Rateversuch neu gestartet werden.
Dies bedeutet unter anderem, daß die alten Rateversuche irgendwo zwischengespeichert werden müssen. Dies kann prinzipiell auf dem Server passieren, was aber Nachteile hat. Zum einen muß man dafür sorgen, daß mehrere Spieler, die gleichzeitig spielen, sich nicht ins Gehege kommen. Das größere Problem besteht aber darin, die Dateien, die von abgebrochenen Spielen übrig bleiben, regelmäßig zu löschen.
Daher speichert dieses Programm die alten Versuche auf dem Client zwischen, einem "versteckten" Eingabe-Feld der HTML-Form! Eine Alternative wäre noch ein Cookie gewesen, aber das wäre weniger transparent, vor allen Dingen, weil nicht alle Browser Cookies unterstützen.
Das Erzeugen der Zufallszahlen funktioniert analog: Es werden Pseudo-Zufallszahlen aus einem "Seed" erzeugt, so daß mit demselben Seed immer wieder dieselbe Geheimzahl produziert wird. Der Seed wird generiert, wenn das CGI-Programm ohne Parameter aufgerufen wird und dann immer wieder mit einem versteckten Eingabe-Feld an die nächste Programm-Instanz übergeben.
Als Seed wird einfach die Uhrzeit beim ersten Aufruf des Programmes hergenommen. Dadurch kann dann auch die Zeitdauer bis zum Erraten der Geheimzahl gemessen werden.