C Handbuch bestellen

Das C Tutorial (deutsch)

Übungen

Spiel Snake

In dieser Aufgabe soll das bekannte Spiel Snake entwickelt werden. Wir wollen dies in der Konsole mit Textausgaben ohne weitere grafische Mittel realisieren. Die Schlange kann mit Sternchen gezeichnet werden, wobei der Kopf ein großes O ist. Im ersten Schritt soll die Schlange mit den Tasten W, A, S, D bewegt werden können, wobei der Schwanz nicht mitbewegt wird. Die Schlange wird also automatisch länger. In der Bildschirm-Ausgabe ist ein Beispiel-Zug zu sehen. Bei Grenzüberschreitungen landet die Schlange auf der anderen Seite. Das Spielfeld wird mit den Strichen - und | markiert. Die Taste X beendet das Programm.

|------------------------------------------------------------|
|                                                            |
|                                                            |
|                                                            |
|                                                            |
|                      *******************                   |
|                      *                 *                   |
|                      *   ***********   *                   |
|                      *   *         *   *                   |
|                      *   *         *   *                   |
|                      *   *   *******   *                   |
|        O             *   *             *                   |
|        *             *   *             *                   |
|        *             *   ***************                   |
|        *             *                                     |
|        *             *                                     |
|*********             **************************************|
|                                                            |
|                                                            |
|                                                            |
|                                                            |
|------------------------------------------------------------|

Für die Programmierung des Spiels gibt es eine Vorlage, die verwendet werden sollte. Normalerweise muss jede Tasteneingabe mit ENTER bestätigt werden, dies wäre bei solch einem Spiel sehr hinderlich. Die  Vorlage enthält deshalb schon eine Lösung für dieses Problem. Vor dem Einlesen der Zeichen sollte die Funktion tty_break() aufgerufen werden, dann wird nach einem getchar() kein ENTER mehr benötigt.

Die Programm-Vorlage und Musterlösung funktionieren nur unter Linux. Sie sind nicht kompatibel zu dem hier vorgestellten Windows-Compiler.

Die zu implementierenden Funktion sind in der Vorlage mit einem Kommentar gekennzeichnet. Konkret sind dies im ersten Schritt diese Funktionen:

  • Spielfeld löschen
  • Spielfeld ausgeben
  • Spielfigur setzen (Kopf, Schwanz, Essen)
  • Spielfigur bewegen (Tasten W, A, S, D verarbeiten)

Das Spielfeld wird in einem Integer-Feld gespeichert, wobei eine bestimmte Zahl stellvertretend für eine Spielfigur bzw. Feldzustand ist. Diese Zustände werden über symbolische Konstanten organisiert, um die Lesbarkeit des Programms zu erhöhen. Hier die Feldzustände:

  • BLANK 0, Feld ist leer
  • HEAD 1, Kopf der Schlange
  • TAIL 2, Schwanz der Schlange
  • FOOD 9, Essen für die Schlange (im ersten Schritt nicht relevant)

Gleiches gilt für die Tasten zum Bewegen der Schlange. Hier werden die ASCII-Codes der Steuerungs-Tasten gespeichert:

  • KEY_MOVE_UP 119, Taste W
  • KEY_MOVE_LEFT 97, Taste A
  • KEY_MOVE_DOWN 115, Taste S
  • KEY_MOVE_RIGHT 100, Taste D

Die Feldgröße wird ebenfalls über Konstanten definiert. Dies ermöglicht eine einfache Veränderung der Spielfeldgröße.

  • WIDTH 60
  • HEIGHT 20

Über die globalen Variablen field und pos wird das Spielfeld und die Position des Schlangenkopfes gespeichert. Da das Feld global definiert ist, ist darauf ein einfacher Zugriff von allen Funktionen aus möglich. Mit dem Programmieren kann nun begonnen werden. In der Vorlage ist lediglich das Beenden des Programms mit X implementiert.

Erweiterungen

Hat man die Grundversion des Spiels programmiert, gibt es noch viele Möglichkeiten das Spiel zu erweitern.

  • Schwanz: Bisher bleibt der Schwanz unverändert. In einer Erweiterung kann der Schwanz mit der Schlange bewegt werden, sodass diese sich nicht automatisch verlängert.
  • Überlappungen: Bisher kann die Schlange sich selbst überlappen. Im normalen Snake-Spiel darf sich die Schlange nicht selbst berühren.
  • Essen: Mit der symbolischen Konstante FOOD kann Essen auf dem Spielfeld verteilt werden, welches die Schlange einsammeln bzw. essen kann. Die Schlange wird dadurch länger.