Würfelpoker
Als Erstes wieder ein Würfelspiel. Diesmal aber wirklich ein Spiel und nicht nur eine Demo.
Kennst du das »Würfelspiel mit der 1«? Manche nennen es auch Würfelpoker. Die Regeln sind sehr einfach. Der Spieler nimmt einen Würfel und würfelt. Wenn er eine 2, 3, 4, 5 oder 6 würfelt, dann gehören die Punkte ihm, und er zählt sie zu seinem Punktestand dazu. Wenn er aber eine 1 würfelt, verliert er alle Punkte und das Spiel ist beendet. Jederzeit kann man mit dem Würfeln aufhören und sich so seine Punkte sichern.
Das Programm dazu sieht in etwa so aus:
import random
summe = 0
weiter = "j"
wuerfel = 6
while (weiter == "j") and (wuerfel > 1):
wuerfel = random.randint(1,6)
if wuerfel > 1:
summe = summe + wuerfel
else:
summe = 0
print "du hast eine",wuerfel,"gewürfelt."
print "deine Punktzahl ist",summe
if wuerfel > 1:
weiter = input("Weiterspielen? j/n")
Das ist unser bisher längstes Programm. Um es genau zu verstehen, musst du es Zeile für Zeile durchgehen und überlegen, was passiert.
Klar, am Anfang wird das Modul random importiert, weil wir ja Zufallszahlen zum Würfeln brauchen. Danach werden drei Variablen eingeführt und auf ihre Anfangswerte gesetzt. summe ist die Punktzahl, die setzen wir am Anfang natürlich auf 0. In weiter steht nachher die Antwort, ob das Spiel fortgesetzt werden soll, da schreiben wir erst mal ein j für »ja« rein, damit die while-Schleife überhaupt startet. In die Variable wuerfel (die gewürfelte Zahl) schreiben wir irgendwas rein, was größer als 1 ist. Diese Zahl wird aber noch nicht zur Punktzahl gerechnet. Auch sie ist dafür da, dass die while-Schleife beim ersten Mal startet.
[ ! ] Achtung: richtig starten
Damit eine while-Schleife überhaupt beginnt, muss man vorher dafür sorgen, dass die abgefragte Bedingung beim ersten Durchlauf zutrifft. Meistens muss man dafür die mit while abgefragte Variable auf einen passenden Anfangswert setzen.
Nun geht das Programm in die while-Schleife. Da die Bedingungen am Anfang zutreffen (wuerfel ist größer als 1 und weiter ist j), wird der while-Block ausgeführt.
Es wird mit randint(1,6) eine Zahl von 1 bis 6 gewürfelt und in wuerfel gespeichert.
Anschließend folgt eine if-else Abfrage. Wenn die gewürfelte Zahl größer als 1 ist, dann wird die Zahl zur Summe der Punkte hinzugezählt.
Wenn nicht (also 1 gewürfelt), dann wird die Summe auf 0 gesetzt.
Nun folgt die Information. Es wird ausgegeben, welche Zahl gewürfelt wurde (wuerfel) und wie hoch der Punktestand ist (summe).
Danach wieder eine if-Abfrage, denn die Frage nach dem Weiterspielen wird nur dann gestellt, wenn das Spiel noch läuft, also wenn keine 1 gewürfelt wurde.
Wenn also keine 1 gewürfelt wurde, fragt das Programm, ob man weiterspielen möchte, und das Ergebnis wird in der Variable weiter gespeichert.
Jetzt ist der while-Block beendet, und das Programm springt automatisch wieder nach oben in die while-Bedingung. Wenn also keine 1 gewürfelt wurde und bei der Frage ein j eingegeben wurde, wird die while-Schleife erneut ausgeführt.
Das Programm endet also, sobald man etwas anderes als j eingibt oder eine 1 würfelt.
Abbildung 10.5 Weiterspielen?
Aufgabe
Probiere das Programm aus, und versuche, es vollständig zu verstehen. Mache kleine Änderungen, und teste, was passiert!