Übung 4: Kamel

../../_images/camel.png

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.

  1. Erstelle ein neues Verzeichnis in deinem Projekt für Lab 04 - Camel und eine Datei lab_04.py in diesem Ordner, wenn der Ordner und die Datei noch nicht existieren.

  2. Erstelle in dieser Datei eine neue main()-Funktion. Lass es die Anleitung auf dem Bildschirm ausgeben. Implementiere dies mit mehreren print-Anweisungen. Verwende nicht nur eine print-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.

  1. Fahre beim vorigen Schritt fort und erstelle eine Boolesche Variable die done heißt und den Wert False hat. Stelle sicher, dass dies und der ganze Rest in der main()-Funktion ist.

  2. Erstelle eine while-Schleife, die so lange done False ist wiederholt.

  3. 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.
  1. 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
  1. Wenn die Anwenderin Q wählt, dann setze done auf True. Du kannst die Eingabe durch user_choice.upper() anstatt von nur user_choice in der if-Anweisung in Großbuchstaben umwandeln. Gib ebenfalls etwas aus, um die Anwenderin wissen zu lassen, dass sie das Spiel beendet hat. Anwender brauchen Feedback.

  2. Teste und stelle sicher, dass du das Spiel beenden kannst, und dass es sowohl mit Groß- als auch mit Kleinbuchstaben funktioniert.

  3. 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.

  4. 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.

  5. Erstelle und initialisiere eine Anzahl Schlucke in der Feldflasche. Ich verwende drei.

  6. Gehe zurück in die Hauptprogrammschleife. Füge ein elif and das Ende des if, 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.
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. In der Schleife gib „Du bist durstig.“ aus, wenn der Durst der Anwenderin über 4 ist. Schreibe dies hinter deine lange Kette von ifelif oben.

  6. Gib „Du bist verdurstet!“, wenn der Durst der Anwenderin über 6 ist. Setze done auf True. Stelle sicher, dass dein Code nicht sowohl „Du bist durstig.“ als auch „Du bist verdurstet!“ ausgibt. Verwende elif wie es passt.

  7. Gib „Dein Kamel wird müde.“ aus, wenn die Müdigkeit des Kamels über 5 ist.

  8. 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.

  9. Wenn die Einheimischen die Anwenderin eingeholt haben, gib aus, dass sie den Spieler gefangen haben.

  10. Andernfalls, wenn die Einheimischen weniger als 15 Kilometer zurück liegen, gib „Die Einheimischen kommen nah!“ aus.

  11. 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.

  12. 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.

  13. 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 von while done == False: zu verwenden.

  • Statt done auf True zu setzen, kannst du auch die Hauptprogrammschleife mit der break-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 beispielsweise if 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

Berechnung wie weit die Einheimischen zurück sind

Das Ende des Spiels feststellen