Auf dieser Seite wollen wir das Spiel "Papier, Schere, Stein" (auch als "Schnick, Schnack, Schnuck" bekannt) programmieren.
Im ersten Programm soll der Computer uns einen Spielpartner ersetzen. Wir spielen als manuell (mit den Händen) gegen den Computer. Bei dem Spiel gibt es 3 Gegenstände, die mit einer Hand angezeigt werden:
Papier
Schere
Stein
Wer gewinnt?
Papier gewinnt gegen Stein (packt ihn ein)
Schere gewinnt gegen Papier (zerschneidet es)
Stein gewinnt gegen Schere (macht die Schere stumpf)
Unser Programm soll auf Knopfdruck (ein Button) eines der 3 Bilder anzeigen (Zufall)
Der html - Teil könnte so aussehen:
Jetzt zum JavaScript - Programm (Name ssp() Abkürzung von SchereSteinPapier ;-)
Da wir mit einem Zufallsgenerator nur Zufallszahlen erzeugen können, legen wir die 3 Bilder in eine Liste mit dem Namen "bild". Mit bild[0] können wir dann das Papier anzeigen, mit bild[1] die Schere und mit bild[2] den Stein. Wir brauchen also nur eine Zufallszahl zwischen 0 und 2.
Zum Schluss tauschen wir das Bild in unserem img - Tag (src) gegen das Zufallsbild aus.
Leider kann der Computer bei unserem Programm nicht feststellen, wer gewonnen hat, da wir ja unsere Wahl (Papier - Schere - Stein) mit der Hand anzeigen. Wir erweitern deshalb unser Programm so, dass wir unsere Auswahl (Papier, Schere oder Stein) auf dem Bildschirm anklicken. Dann kann der Computer auch feststellen, wer gewonnen hat.
Als erstes wieder die html - Seite; wir zeigen die 3 Bilder an und machen sie anklickbar (onclick=""). Damit das Programm weiss, welches Bild angeklickt wurde, übergeben wir mit dem Programmaufruf eine Zahl (0 - 2; z.B. ssp(1)). Den Button benötigen wir nicht mehr (das Programm wird ja durch anklicken der Bilder gestartet). Statt dessen gibt es einen "Ergebnisbereich" (h2 - Tag) in dem wir später anzeigen, wer gewonnen hat.
<h1>Schnick, Schnack, Schnuck</h1><imgsrc="images/papier.gif"onclick="ssp(0);"><imgsrc="images/schere.gif"onclick="ssp(1);"><imgsrc="images/stein.gif"onclick="ssp(2);"><br><h2id="ergebnis">Bitte ein Bild anklicken</h2><imgsrc="images/papier.gif"id="pcBild">
Nun zum JavaScript Programm. Bei der Funktionsdefinition brauchen wir in den Klammern einen Variablen Namen (spielerBildNummer). Mit dieser Variablen wird die Nummer des angeklickten Bildes übergeben. Probiere es bitte aus: alert(spielerBildNummer);
Das Programm hat sich kaum geändert. Am Ende des Programms könnte man jetzt auswerten wer gewonnen hat (mit if die Zahlen in den Variablen spielerBildNummer und bildNummer auswerten; z.B. spielerBildNummer = 0 und bildNummer = 2 bedeutet Spieler hat Papier, Computer hat Stein => Spieler hat gewonnen)
Leider kann man nicht dauerhaft sehen, welches Bild der Spieler angeklickt hat. Es wäre schön, wenn das angeklickte Bild einen Rahmen bekäme. Am Besten fragt man ChatGPT
wie so etwas mit JavaScript funktioniert.
Hier ein Vorschlag, wie so etwas funktionieren könnte. Zuerst müssen alle alten Rahmen gelöscht werden (for - Schleife) dann wird das angeklickte Bild eingerahmt.
var spielerBilder = document.getElementsByTagName("img");for(var i =0; i <3; i++){
spielerBilder[i].style.border ="";}
spielerBilder[spielerBildNummer].style.border ="5px solid red";