Übung 4: Kamel¶

Beschreibung des Kamelspiels¶
Die Idee zu Kamel kommt ursprünglich aus der Heath Users Group und wurde 1979 in More BASIC Computer Games veröffentlicht.
Die Idee ist, auf einem Kamel durch die Wüste zu reiten, während man gejagt wird. Du musst deinen Durst, wie müde dein Kamel ist und wie weit du vor den Einheimischen bist beachten.
Dies ist eins der ersten Programme, die ich auf dem Apple //e programmiert habe. Das Spiel ist flexibel. Ich hatte Studierende, die eine Star Wars Version von diesem Spiel programmiert haben, in dem man auf einem Wampa über Hoth reitest. Es ist leicht ein paar Sandstürme und andere zufällige Ereignisse hinzu zu fügen, um es interessanter zu machen. Obwohl es nur ein textbasiertes Spiel ist, habe ich einige Studierende gefunden, die richtig Spaß haben es zu spielen. Es gab sogar einmal einen Professor, der kam und sich beschwert hat, dass meine Studierenden zu laut wären, während sie dieses Spiel auf dem „großen Schirm“ spielten.
Beispiellauf vom Kamel¶
Hier ist ein Beispielablauf des Spiels:
Welcome to Camel!
You have stolen a camel to make your way across the great Mobi desert.
The natives want their camel back and are chasing you down! Survive your
desert trek and outrun the natives.
A. Drink from your canteen.
B. Ahead moderate speed.
C. Ahead full speed.
D. Stop and rest.
E. Status check.
Q. Quit.
Your choice? C
You traveled 12 miles.
A. Drink from your canteen.
B. Ahead moderate speed.
C. Ahead full speed.
D. Stop and rest.
E. Status check.
Q. Quit.
Your choice? C
You traveled 17 miles.
A. Drink from your canteen.
B. Ahead moderate speed.
C. Ahead full speed.
D. Stop and rest.
E. Status check.
Q. Quit.
Your choice? e
Miles traveled: 29
Drinks in canteen: 3
The natives are 31 miles behind you.
A. Drink from your canteen.
B. Ahead moderate speed.
C. Ahead full speed.
D. Stop and rest.
E. Status check.
Q. Quit.
Your choice? b
You traveled 6 miles.
...and so on until...
A. Drink from your canteen.
B. Ahead moderate speed.
C. Ahead full speed.
D. Stop and rest.
E. Status check.
Q. Quit.
Your choice? C
You traveled 12 miles.
The natives are getting close!
A. Drink from your canteen.
B. Ahead moderate speed.
C. Ahead full speed.
D. Stop and rest.
E. Status check.
Q. Quit.
Your choice? C
You traveled 11 miles.
The natives are getting close!
You made it across the desert! You won!
This game assumes you know the material up through Random Numbers.
Programmieranleitung¶
Hier sind die Schritte, um diese Übung abzuschließen. Modifiziere und erweitere ruhig die Übung. Probier dieses Spiel mit Freunden und deiner Familie aus.
Erstelle ein neues Verzeichnis in deinem Projekt für
Lab 04 - Camel
und eine Dateilab_04.py
in diesem Ordner, wenn der Ordner und die Datei noch nicht existieren.Erstelle in dieser Datei eine neue
main()
-Funktion. Lass es die Anleitung auf dem Bildschirm ausgeben. Implementiere dies mit mehrerenprint
-Anweisungen. Verwende nicht nur eineprint
-Anweisung und mehrere\n
-Zeichen, um alles in eine Zeile zu quetschen.
Welcome to Camel!
You have stolen a camel to make your way across the great Mobi desert.
The natives want their camel back and are chasing you down! Survive your
desert trek and out run the natives.
Rufe die main()
-Funktion auf. Starte und teste das Programm.
Fahre beim vorigen Schritt fort und erstelle eine Boolesche Variable die
done
heißt und den WertFalse
hat. Stelle sicher, dass dies und der ganze Rest in dermain()
-Funktion ist.Erstelle eine
while
-Schleife, die so langedone
False
ist wiederholt.Innerhalb der Schleife, gib das folgende aus:
A. Drink from your canteen.
B. Ahead moderate speed.
C. Ahead full speed.
D. Stop for the night.
E. Status check.
Q. Quit.
Frage die Anwenderin nach ihrer Auswahl. Stelle sicher ein Leerzeichen vor dem Anführungszeichen einzufügen, so dass die Eingabe der Anwenderin nicht direkt auf deinen Text folgt. Das heißt, es soll so aussehen:
What is your choice? Q
Und nicht:
What is your choice?Q
Wenn die Anwenderin
Q
wählt, dann setzedone
aufTrue
. Du kannst die Eingabe durchuser_choice.upper()
anstatt von nuruser_choice
in derif
-Anweisung in Großbuchstaben umwandeln. Gib ebenfalls etwas aus, um die Anwenderin wissen zu lassen, dass sie das Spiel beendet hat. Anwender brauchen Feedback.Teste und stelle sicher, dass du das Spiel beenden kannst, und dass es sowohl mit Groß- als auch mit Kleinbuchstaben funktioniert.
Erstelle Variablen für zurückgelegte Kilometer, Durst und Kamelmüdigkeit vor deiner Hauptprogrammschleife. Setz diese auf Null. Die Verwendung präzise, beschreibende Variablennamen wird den Rest der Übung weniger verwirrend machen.
Erstelle eine Variable für die Distanz, die die Einheimischen zurückgelegt haben und setze sie auf -20. (Zwanzig Kilometer zurück.) Zu verstehen, wie wir die zurückgelegte Distanz der Spielerin, die zurückgelegte Distanz der Einheimischen und die Differenz der beiden verwalten neigt dazu, einige Leute zu verwirren. Siehe die Videos am Ende dieser Übung für ein paar Hinweise.
Erstelle und initialisiere eine Anzahl Schlucke in der Feldflasche. Ich verwende drei.
Gehe zurück in die Hauptprogrammschleife. Füge ein
elif
and das Ende desif
, das auf das Quit-Kommando. Sehe nach, ob die Anwenderin nach dem Status fragt. Wenn das der Fall ist, gib die zurückgelegten Kilometer aus, die Anzahl der Schlucke in der Feldflasche und wie weit die Einheimischen hinter dir sind. Wenn du nicht sicher bist, wie das berechnet wird, sieh dir die Videos am Ende dieser Übung an. (Im Ernst, das ist die Stelle, an der eine Menge beginnen den falschen Weg einzuschlagen.)
Miles traveled: 0
Drinks in canteen: 3
The natives are 10 miles behind you.
Füge ein
elif
zu deiner Hauptprogrammschleife hinzu, um zu bearbeiten, wenn die Anwenderin für die Nacht stoppen will. Wenn die Anwenderin das will, setze die Ermüdung des Kamels auf 0 zurück. Gib aus, dass das Kamel zufrieden ist und bewege die Einheimischen eine zufällige Anzahl von 7 bis 14 (oder so) Kilometern vorwärts. Hinweis: Berechne die zufällige Anzahl in der Schleife, kurz bevor du sie benötigst. Ein üblicher Fehler ist die Zufallszahlen, die du benötigst, vor der Hauptschleife zu berechnen. Dadurch bleiben die Zufallszahlen gleich während des gesamten Spiels.Füge ein
elif
zu deiner Hauptprogrammschleife hinzu, um zu bearbeiten, ob die Anwenderin mit voller Geschwindigkeit reiten will. Wenn die Anwenderin das will, gehe eine zufällige Anzahl von Kilometern zwischen 10 und 20 inklusive vorwärts. Gib aus, wie viele Kilometer die Anwenderin vorwärts gekommen ist. Addiere 1 zum Durst hinzu. Addiere einen zufälligen Wert von 1 bis 3 zur Ermüdung des Kamels hinzu. Beweg die Einheimischen von 7 bis 14 Kilometer vorwärts.Füge ein
elif
zu deiner Hauptprogrammschleife hinzu, um zu bearbeiten, ob die Anwenderin mit moderater Geschwindigkeit reiten will. Wenn die Anwenderin das will, gehe eine zufällige Anzahl von Kilometern zwischen 5 und 12 inklusive vorwärts. Gib aus, wie viele Kilometer die Anwenderin vorwärts gekommen ist. Addiere 1 zum Durst hinzu. Addiere 1 zur Ermüdung des Kamels hinzu. Beweg die Einheimischen von 7 bis 14 Kilometer vorwärts.Füge ein
elif
zu deiner Hauptprogrammschleife hinzu, um zu bearbeiten, ob die Anwenderin aus der Feldflasche trinken möchte. Wenn die Anwenderin das will, stelle sicher, dass noch Schlucke in der Feldflasche sind. Wenn welche da sind, ziehe einen Schluck ab und setze den Durst auf Null. Andernfalls gib einen Fehler aus.In der Schleife gib „Du bist durstig.“ aus, wenn der Durst der Anwenderin über 4 ist. Schreibe dies hinter deine lange Kette von
if
…elif
oben.Gib „Du bist verdurstet!“, wenn der Durst der Anwenderin über 6 ist. Setze
done
aufTrue
. Stelle sicher, dass dein Code nicht sowohl „Du bist durstig.“ als auch „Du bist verdurstet!“ ausgibt. Verwendeelif
wie es passt.Gib „Dein Kamel wird müde.“ aus, wenn die Müdigkeit des Kamels über 5 ist.
Gib „Dein Kamel ist tot.“ aus, wenn die Müdigkeit des Kamels über 8 ist. Wie im vorigen Schritt, gib entweder das eine oder das andere aus. Es ist eine gute Idee eine Überprüfung mit der
done
Variablen einzufügen, so dass ihr Kamel nicht ermüdet, nachdem du verdurstet bist.Wenn die Einheimischen die Anwenderin eingeholt haben, gib aus, dass sie den Spieler gefangen haben.
Andernfalls, wenn die Einheimischen weniger als 15 Kilometer zurück liegen, gib „Die Einheimischen kommen nah!“ aus.
Wenn die Anwenderin 200 Kilometer durch die Wüste geritten ist, gib aus, dass sie gewonnen hat und beende das Spiel. Stelle sicher, dass Reiter und Kamel nicht tot sind, bevor du sie zum Sieger erklärst. Wenn sie auf dem Kilometerstein 201 statt 200 landet, stelle sicher, dass sie trotzdem das Spiel gewinnt. Siehe die Videos unten an.
Füge eine Eins-zu-Zwanzig-Chance eine Oase zu finden hinzu. Gib, dass die Anwenderin sie gefunden hat, aus, fülle die Feldflasche auf und ruhe das Kamel aus. Wenn du nicht weißt, wie das gemacht wird, siehe Random Chance. Stelle sicher, dass eine Person nur eine Oase finden kann, wenn sie reist. Dies erfordert, dass du darüber nachdenkst, wo du den Code hinschreibst.
Spiele das Spiel und passe die Zahlen so an, dass es herausfordernd, aber nicht unmöglich zu gewinnen ist. Beseitige alle Fehler, die du findest.
Hinweise¶
Denke daran, dass es eine gute Idee ist, Leerzeilen zwischen logischen Codegruppen in deinem Programm einzufügen. Füge zum Beispiel eine Leerzeile nach den Anweisungen und zwischen jedem Anwenderkommando ein. Füge Kommentare hinzu, wo es passt.
Es gilt als besserer Stil
while not done:
anstatt vonwhile done == False:
zu verwenden.Statt
done
aufTrue
zu setzen, kannst du auch die Hauptprogrammschleife mit derbreak
-Anweisung verlassen. Einige Programmierer bevorzugen diese Methode, weil es die Programmlogik vereinfacht. Andere Programmierer vermeiden, aus einer Schleife heraus zu springen. Ehrlich gesagt, beides funktioniert.Verwende den
and
-Operator, um schlechte Nachrichtenkombinationen, wie „Du bist verdurstet.“ und „Du hast eine Oase erreicht!“ in der gleichen Spielrunde, zu verhindern. Wie beispielsweiseif not done and thirst > 4:
.Stelle sicher, Leerzeilen zum Aufteilen von Codeabschnitten einzufügen. Verwende keine doppelten Leerzeichen im Code. Füge Kommentare vor den Codeabschnitten hinzu.
Beachte die Rechtschreibung und Interpunktion. Sage nicht „du hast eine oase erreicht!“, sage, „Du hast eine Oase erreicht!“.
Gelegentlich bringen Leute durcheinander, wie ein Wert auf Null zurückgesetzt wird. Untersuche den Code unten:
# Yes, these set thirst to zero, but this is NOT the way to do it.
thirst *= 0 # No
thirst = thirst * 0 # No
thirst = thirst - thirst # No
# This is the correct way to set thirst to zero
thirst = 0 # Yes