Universitšt Ulm - Abteilung Angewandte Informationsverarbeitung

 


9. Übungsblatt zur Vorlesung Allgemeine Informatik III


Abgabetermin: Dienstag, 13.01.2004 (4 wöchig!)


Geschenkeschieben    (20 Punkte)

Auch der Weihnachtsmann hat es im Dezember nicht einfach. Selbst wenn alle Geschenke verpackt und lieferfertig sind, steht Ihm noch eine Menge Arbeit bevor: Die Geschenke müssen verschickt werden.


So wie jedes Jahr, sind auch dieses Mal die Geschenke ( # ) kreuz und quer im Hause des Weihnachtsmannes verteilt, wie das folgende Bild zeigt:


\bgroup\color{red}\includegraphics[scale=0.8]{bild01.ps}\egroup


Die Aufgabe des Weihnachtsmannes (schwarzes Kästchen) ist es nun, alle Geschenke in diesem ,,Labyrith`` auf die braun markierten Positionen zu schieben.


Der Weihnachtsmann ist überglücklich, daß Ihm stets seine Rentiere bei dieser schwierigen Aufgabe mit Rat und Tat zur Seite stehen, denn ein falscher Zug und ein Geschenk kann nicht mehr ausgeliefert werden.


Damit Ihm dieses Malheur nicht passiert, sollen sie Ihn bei seiner Aufgabe unterstützen: Schreiben Sie ein Programm, mit dem der Weihnachtsmann sein Geschenkeverschieben üben kann. Ihr Programm soll dabei das Spielfeld aus einer Datei einlesen. Stehen alle Kisten an der richtigen Stelle, ist das Spiel zu Ende.


Das Spielfeld ist dabei eine \bgroup\color{red}$m \times n$\egroup-Matrix, wobei die Größe der Matrix nicht fest fixiert, sondern beliebig für jede Spielfeldgröße dynamisch angelegt werden soll (calloc). Für jeden Matrixeintrag gibt es mehrere mögliche Belegungen: leer, Wand, Kiste, Zielposition, Kiste auf Zielposition, Weihnachtsmann auf leerem Feld und Weihnachtsmann auf Zielposition. Der Weihnachtsmann kann sich bei jedem Schritt in eine von vier Richtungen um einen Schritt weiter bewegen, wenn


\bgroup\color{red}\includegraphics[scale=0.8]{bild02.ps}\egroup                 \bgroup\color{red}\includegraphics[scale=0.8]{bild03.ps}\egroup


Modularisieren Sie Ihr Programm, indem Sie zumindest ein Hauptmodul, ein Modul für den abstrakten Datentyp ,,Labyrinth`` und ein Ausgabemodul mit Escape-Sequenzen implementieren, sowie ein entsprechendes Makefile schreiben.


Hinweise


Obiges Spielfeld könnte in ihrer Datei beispielsweise so aussehen:

19 11
    #####
    #   #
    #*  #
  ###  *##
  #  * * #
### # ## #   ######
#   # ## #####  __#
# *  *          __#
##### ### #.##  __#
    #     #########
    #######

Dabei steht 19 für die Breite und 11 für die Höhe des Spielfeldes, # für die Wand, * für eine Kiste, _ für eine Zielposition und . für die Startposition des Weihnachtsmanns. Leere Positionen sind durch Leerzeichen dargestellt.


Zur Abfrage einer Tasteneingabe erhalten Sie ein Beispielprogramm.


Infos zu Escape-Sequenzen finden Sie bei Übungsblatt 2 oder unter folgender Web-Adresse:
http://www.catalyst.com/support/help/cstools3/visual/terminal/escapeseq.html



Viel Erfolg!



Hans Braxmeier