)
1. [B] (Clipboard-Viewer) Schreiben Sie ein Programm, das den Inhalt der Zwischenablage auf dem Bildschirm anzeigen kann, sofern er textueller Natur ist. Enthält die Zwischenablage Daten unbekannten Typs, so soll dies ebenso mit einer Fehlermeldung werden wie eine leere Zwischenablage.
2. [B] (Panel)
Ein Panel bietet die Möglichkeit, mehrere Dialogelemente
zusammenzufassen und gemeinsam zu verwenden. Schreiben Sie eine
Klasse LabeledTextField, die ein Textfeld mit einer links
daneben stehenden Beschriftung kombiniert. Reichen Sie die
wichtigsten Methoden der beiden Komponenten Label und
TextField nach außen weiter und definieren Sie so eine
anwenderfreundliche Schnittstelle. Zeigen Sie die Verwendung der
Klasse an einem kleinen Beispielprogramm.
Aufg2002.java
3. [B] (Texteditor)
Schreiben Sie einen einfachen Texteditor. Ihr Programm soll dabei
im Hauptfenster ein Objekt des Typs TextArea besitzen, in
dem der Text angezeigt und bearbeitet werden kann. Statten Sie Ihr
Programm mit einem Menü aus, das die Funktionen "Datei neu",
"Datei öffnen", "Datei speichern unter" und "Programm beenden"
besitzt.
Aufg2003.java
4. [B] (Entwicklungsumgebung) Erweiteren Sie Ihren im vorigen Schritt entwickelten Editor zu einer kleinen Entwicklungsumgebung für Java-Programme. Sehen Sie dazu weitere Menüpunkte vor, mit denen es möglich ist, ein geladenes Java-Programm zu übersetzen und auszuführen. Sehen Sie sich die JDK-Dokumentation der Klassen RunTime und Process an, um Informationen zur Ausführung eines externen Programms zu erhalten.
5. [B] (Fontauswahldialog)
Die meisten grafischen Betriebssysteme bieten einen Standarddialog
zur Fontauswahl an. Dieser erlaubt die Auswahl der Schriftart,
ihrer Größe sowie der Auswahl von Attributen wie fett oder kursiv.
Leider wird dieser Fontauswahldialog in Java nicht standardmäßig
zur Verfüfung gestellt. Ihre Aufgaben besteht nun darin, einen
solchen Dialog nachzuprogrammieren. Realisieren Sie die oben
beschriebenen Konfigurationsmöglichkeiten und stellen Sie zusätzlich
eine Vorschau zur Verfügung, in der das Ergebnis der Auswahl
synchron zur Manipulation der Werte betrachtet werden kann.
Aufg2005.java
6. [B] (Farbauswahldialog) Entwerfen Sie analog zur vorigen Aufgabe einen Dialog zur Auswahl einer Farbe. Stellen Sie dem Anwender eine Palette von vordefinierten Farben zur Verfügung, geben Sie ihm aber auch die Möglichkeit, eine Farbe selbst zu mischen. Dazu sollen die Rot-, Grün- und Blau-Werte wahlweise per Hand eingegeben oder mit drei Schiebereglern verändert werden können. Auch dieser Dialog sollte eine Vorschau haben, in der das Ergebnis online betrachtet werden kann.
7. [B] (Hüpfender Ball) Schreiben Sie ein Programm, das einen hüpfenden Ball simuliert. Dabei kommt es nicht darauf, die physikalischen Bewegungsgesetze exakt nachzubilden (es ist aber auch nicht verboten), sondern es reicht aus, den Ball als ausgefüllten Kreis darzustellen und die Hüpfbewegung auf die vertikaler Komponenten zu beschränken und die Geschwindigkeitsveränderungen zu approximieren. Ihr Programm sollte flimmerfrei sein.
8. [B] (Text auf Image) Ein beliebter Grafikeffekt auf Web-Seiten besteht darin, Teile der Seite auf einem dezenten, aber photorealistischen Hintergrundbild auszugeben. Die folgende Abbildung verdeutlich dies am Beispiel eines Logos, das dem Web-Server der Fa. prompt! entnommen wurde:
Schreiben Sie ein Dialogelement, das einen Text zusammen mit einem Image darstellen kann. Der Text soll dabei über der Abbildung erscheinen, die als Hintergrundbild verwendet wird. Leiten Sie die Klasse von Canvas ab und realisieren Sie die erforderlichen Schnittstellen zur Konstruktion eines eigenständigen Dialogelements. Implementieren Sie zusätzlich die folgenden Methoden:
9. [B] (Bookmark-Liste) Schreiben Sie ein Applet, das eine Liste von URLs verwaltet und auf dem Bildschirm anzeigt. Die URLs sollen als Parameter übergeben und aus einer Combobox ausgewählt werden können. Nach der Auswahl soll die gewählte Adresse zunächst in ein Edit-Feld gestellt werden, um dort weiterbearbeitet werden zu können, bevor sie nach Klick auf den "OK"-Button zum Aufruf der entsprechenden Seite verwendet wird.
10. [C] (Lauflicht) Auf den Jahrmärkten und Volksfesten sieht man häufig Lauflichter, die ein Fahrgeschäft oder einen Hinweis auf ein solches werbewirksam umranden. Durch ein Steuergerät werden die Lampen schnell hintereinander ein- und ausgeschaltet und vermitteln so den Eindruck einer fließenden Bewegung. Dabei ist es keinesfalls immer üblich, alle Lampen einzeln anzusteuern, denn das wäre viel zu aufwendig. Stattdessen wird jeweils nur eine begrenzte Anzahl von Ihnen separat angesteuert, während die anderen parallel geschaltet sind.
Die folgende Abbildung zeigt dies für n = 4, stellt also ein 4-Kanal-Lauflicht dar. Lampe 1 ist dabei stets zusammen mit den Lampen 5, 9, 13, Lampe 2 mit 6, 10, 14, usw. an- bzw. ausgeschaltet. Der Lauflichteffekt entsteht dadurch, daß die vier Kanäle zyklisch nacheinander an- und wieder ausgeschaltet werden.
Schreiben Sie ein Programm, das ein Fenster mit einer Lauflichtumrandung erzeugt. Machen Sie die Farbe der Lampen, ihre Größe, die Anzahl der Kanäle und die Laufgeschwindigkeit konfigurierbar und experimentieren Sie mit den Parametern. Versuchen Sie, einige interessante Einstellungen zu finden.
11. [C] (Imageviewer) Schreiben Sie einen einfachen ImageViewer, mit dem Sie gif- und jpeg-Bilder betrachten können. Das Programm soll folgende Funktionen menügesteuert zur Verfügung stellen:
Aufg2011.java
12. [C] (Kalender-Control) Schreiben Sie ein Dialogelement, das einen Kalender darstellt. Passend zu einem Datumswert, der vom Aufrufer vorgegeben wird, soll der zugehörige Monat auf dem Bildschirm angezeigt werden. Der Anwender soll die Möglichkeit haben, mit der Maus oder der Tastatur zum jeweils nächsten oder vorigen Monat zu wechseln und einen bestimmten Tag auszuwählen. Leiten Sie das Dialogelement von der Klasse Canvas ab und implementieren Sie alle zur Einbindung in einen Dialog erforderlichen Methoden. Mit Hilfe der Methoden setDate und getDate soll der Zugriff auf das ausgewählte Datum möglich sein.
13. [C] (HTML-Viewer) Schreiben Sie einen einfachen HTML-Viewer. Ihr Programm soll in der Lage sein, einen HTML-Quelltext in einem Fenster anzuzeigen und (wenn erforderlich) zu scrollen. Implementieren Sie zur Verbesserung der Übersichtlichkeit ein einfaches Syntax-Highlighting, bei dem der Standardtext schwarz, HTML-Markups blau, Entities grün und Kommentare rot dargestellt werden. Das Hauptmenü soll das Laden einer Datei und das Beenden des Programms ermöglichen und einen Dialog zur Konfiguration der Bildschirmfarben zur Verfügung stellen.
14. [C] (Druckersimulation) Noch vor wenigen Jahren waren ganze Generationen von 9-Nadel-Matrixdruckern entweder EPSON-FX- oder IBM-Proprinter-kompatibel. Obwohl die Fähigkeiten dieser Drucker aus heutiger Sicht völlig unzulänglich anmuten, ist es keine triviale Aufgabe, eine Simulation eines solchen Druckers zu implementieren. Wir wollen uns hier die Aufgabe stellen, eine Nadeldrucker-Simulation auf Basis der EPSON-FX-Steuerzeichen zu realisieren. Dabei soll eine Druckdatei, die Text und Steuerzeichen enthält, interpretiert und in einem Bildschirmfenster dargestellt werden. Das Programm soll die Möglichkeit bieten, mehr als eine Seite vorzuhalten und soll es erlauben, die Ausgabe (wenn nötig) horizontal und vertikal zu scrollen.
Um die Aufgabe nicht zu kompliziert werden zu lassen, wollen wir uns auf folgende Teilfähigkeiten eines EPSON-FX-kompatiblen 9-Nadeldruckers beschränken:
| Code | Bedeutung |
|---|---|
| 13 | Wagenrücklauf an den Anfang der Zeile. |
| 10 | Einen Vorschub von einer Zeile ausführen. |
| 12 | Einen Seitenvorschub ausführen. |
| 9 | Zur nächsten Tabulatorposition springen (die Tabulator-Schrittweite sei 8). |
| 8 | Druckkopf ein Zeichen zurück. |
| 7 | Klingel auslösen. |
Zusätzlich sollen einige einfache Steuersequenzen implementiert werden. Auf kompliziertere Sequenzen zur Veränderung der Schrift, zur Ausgabe von hochauflösender Grafik oder zur mikroschrittgenauen Positionierung des Druckkopfes wollen wir an dieser Stelle verzichten:
| Code | Bedeutung |
|---|---|
| 27 64 | Drucker initialisieren. |
| 27 69 | Fettschrift an. |
| 27 70 | Fettschrift aus. |
| 27 52 | Kursiv an. |
| 27 53 | Kursiv aus. |
| 27 45 1 | Unterstrichen an. |
| 27 45 2 | Unterstrichen aus. |
| 27 83 0 | Hochgestellt an. |
| 27 83 1 | Tiefgestellt an. |
| 27 84 | Hoch- und Tiefstellung aus. |
15. [C] (Streichholzspiel) Beim Streichholzspiel spielen zwei Spieler gegeneinander. Zu Beginn liegen dreizehn Streichhölzer auf dem Tisch. Abwechselnd darf jeder der Spieler zwischen einem und drei Hölzchen wegnehmen. Wer das letzte Streichholz wegnehmen muß, hat verloren.
Schreiben Sie ein Programm, das es ihnen ermöglicht, das Streichholspiel gegen den Computer zu spielen. Der Computer soll dabei immer versuchen, zu gewinnnen. Eine wichtige Teilaufgabe besteht also darin, eine möglichst erfolgversprechende Gewinnstrategie zu entwickeln und zu implementieren.
16. [C] (Intelligent Life in the Universe) Richard Salmon erwähnt in seinem Buch "Structures and Abstractions" das Buch "Intelligent Life in the Universe" von Shklovskii und Sagan und leitet daraus eine interessante Aufgabe ab. Stellen Sie sich vor, Sie erhalten eine interstellare Nachricht aus den Tiefen des Weltalls. Sie stellen fest, daß es sich um einen Bitstring, also eine Folge von Nullen und Einsen handelt, deren Länge keine Primzahl ist.
Da alle anderen Versuche der Entschlüsselung fehlgeschlagen sind, überlegen Sie sich, daß die Nachricht auch als Pixelinformation einer rechteckigen Schwarz-Weiß-Grafik angesehen werden kann. Da die Länge keine Primzahl ist, hat sie mindestens zwei echte Teiler, die als Seitenlängen der Grafik angesehen werden können. Bei weiterem Überlegen stellen Sie fest, das tatsächlich jedes Paar (x, y) als Seitenlänge angesehen werden kann, das die Bedingung x * y = Länge der Nachricht erfüllt.
Ist die Länge beispielsweise 30, deren Primfaktoren 2, 3 und 5 sind, so gibt es folgende mögliche Seitenlängen:
17. [C] (UPN-Taschenrechner) Die Firma Hewlett Packard konnte für sich die Ehre verbuchen, Anfang der 70er Jahre den ersten programmierbaren Taschenrechner der Welt auf den Markt gebracht zu haben. Einer der Gründe, weshalb das auch mit der damals noch relativ bescheidenen Leistungsfähigkeit integrierter Schaltkreise gelang, war die Verwendung der Umgekehrten Polnischen Notation (UPN) zur Eingabe von arithmetischen Ausdrücken. Hierbei kann bei der Konstruktion des Taschenrechners komplett auf die Interpretation von Klammern und die Beachtung von Bindungsregeln verzichtet werden.
Die Bedienung eines UPN-Rechners erfordert zwar zunächst etwas Eingewöhnung, geht dann aber genauso schnell wie bei einem gewöhnlichen Rechner. Alle Ausdrücke sind dabei in Postfix-Notation einzugeben, also erst die Operanden und dann die Operatoren. So wird beispielsweise "2 + 3 =" als "2 ENTER 3 =" und "5 * ( 2 + 10 )" als "2 ENTER 10 + 5 *" eingegeben. Eine Taste mit der Beschriftung = oder aufgedruckten Klammern sucht man vergebens. Bei der Auswertung längerer Ausdrücke geht man von innen nach außen vor, d.h. man wertet zunächst die am tiefsten geschachtelten Klammerebenen aus und arbeitet sich so nach außen vor. Eine einfache Eingabe von rechts nach links, wie sie bei gewöhnlichen Taschenrechnern erfolgt, ist bei UPN-Rechnern nicht möglich.
Ein UPN-Rechner besitzt einen Stack, auf dem die Operanden während der Eingabe und Auswertung abgelegt werden. Die Bedienung folgt dabei einigen einfachen Regeln:
18. [C] (Ampelelement) Entwerfen Sie ein Dialogelement TrafficLight, das eine Verkehrsampel mit grünem, gelben und rotem Licht grafisch simuliert. Leiten Sie das Element es von der Klasse Canvas ab. Implementieren Sie ihre Verkehrsampel so, daß sie weitgehend autonom arbeitet:
Aufg2018.java
19. [C] (Mandelbrot-Menge) Fraktale sind mathematische Konstrukte, die selbstähnliche oder selbstidentische Merkmale aufweisen. Oftmals können sie durch sehr einfache Bildungsgesetze beschrieben werden. Eines der bekanntesten Fraktale ist die grafische Interpretation der Mandelbrot-Menge, deren charakteristischer Bestandteil als Apfelmännchen in die Geschichte der Informatik und Mathematik eingegangen ist.
Die Mandelbrot-Menge wurde Anfang dieses Jahrhunderts von dem französischen Mathematiker Pierre Fatou definiert und später in Benoit Mandelbrot's berühmten Buch "Die fraktale Geometrie der Natur" wieder aufgegriffen. Während Fatou Zeit seines Lebens in Ermangelung geeigneter Computer nur sehr vage Ideen über das Aussehen der von ihm entdeckten und definierten Menge gewinnen konnte, gelang es Mandelbrot, eine überzeugende grafische Darstellung zu finden und seinen Namen auf immer mit dieser Menge zu verbinden. Die nachfolgenden Abbildungen zeigen Ausschnitte aus der Mandelbrot-Menge bei verschiedenen Vergößerungen:
Die Idee der Mandelbrot-Menge ist es, iterative Prozesse auf der Basis der folgenden Formel zu untersuchen:
zi+1 = zi2 + c
zj ist dabei ebenso wie c eine Zahl aus der Menge der komplexen Zahlen, die mit Hilfe dieser Formel schrittweise verändert wird. Fatou interessierte sich dabei insbesondere für den Fall z0 = 0 und untersuchte das Verhalten der Bahnkurve z0, z1, z2, ... für verschiedene c. Vor allem wollte er wissen, für welche c die Bahnkurve beschränkt bleibt und für welche sie ins Unendliche abdriftet. Er konnte nachweisen, daß die Bahnkurve nicht beschränkt ist, wenn für irgendein i der Betrag |zi| den Wert 2 oder größer annimmt. Die Mandelbrot-Menge enthält nun genau diejenigen komplexen Zahlen c, für die die Bahnkurve nach obiger Definition beschränkt bleibt.
Die grafische Darstellung entsteht dadurch, daß der Bildschirm einen Ausschnitt der komplexen Zahlenebene darstellt und jeder Bildschirmpunkt für eine komplexe Zahl steht. Ihr Realteil entspricht der x-Koordinate und ihr Imaginärteil der y-Koordinate von c. Strebt die Zahlenfolge z0, z1, z2, ... nicht gegen unendlich, so gehört der entsprechende Wert zur Mandelbrot-Menge, andernfalls nicht. In der Praxis wird die Folge beginnend mit z0 maximal nmax-mal iteriert (ein typischer Wert für nmax ist 100). Ist sie auch dann noch beschränkt, hat also noch nicht den Betrag 2 erreicht, so wird der zugehörige Bildpunkt schwarz gezeichnet. Erreicht Sie dagegen bereits nach j, j < nmax Schritten den Betrag 2, so ist sie unbeschränkt und der Wert von j bestimmt die Farbe des Bildschirmpunktes. Der Wert von j bestimmt in diesem Fall die Farbe des Bildpunktes.
Schreiben Sie ein Programm, das die Mandelbrot-Menge darstellt.
Beginnen Sie mit nmax = 100 und dem zwischen den Punkten
(-2, -1) und (1, 1) liegenen rechteckigen Ausschnitt der komplexen
Zahlenebene. Versuchen Sie zunächst eine grobe Farbzuordnung mit
2 oder drei Farben (neben schwarz) und stellen Sie Ihr Programm
nach erfolgreichem Test auf nmax unterschiedliche Farben
um. Dabei könnte Ihnen die Methode getHSBColor der Klasse
Color eine Hilfe sein. Versuchen Sie schließlich ein
einfaches Verfahren zu realisieren, mit dem Sie das Bild durch
Mausklicks ausschnittsweise zoomen können.
Aufg2019.java
20. [C] (Käsekästchen) Ein nettes Spiel, das Schulkinder oft spielen, ist "Käsekästchen". Käsekästchen wird von zwei Spielern auf einem karierten Blatt Papier gespielt. Dazu wird zunächst ein Spielfeld in Form eines Rechtecks auf das Blatt gezeichnet, dessen Rand auf den Begrenzungslinien der Karos verläuft. Die typische Größe eines Spielfelds ist 10 * 10 Karos, es können aber auch größere oder kleinere Felder verwendet werden. Um das Spiel interessanter zu gestalten, können auch unregelmäßig geformte Spielfelder gezeichnet werden.
Jeder der beiden Spieler darf nun abwechselnd einen Bleistiftstrich auf dem Spielplan machen. Dieser hat die Länge der Seite eines Karos und muß auf dessen Rand verlaufen. Es dürfen weder Striche gezeichnet werden, die auf dem Rand des Spielfelds liegen, noch ist es erlaubt, bereits vom Gegner gezeichnte Striche zu wiederholen.
Nach und nach ergeben sich nun unregelmäßig geformte Strich- und Treppenmuster auf dem Spielplan. Kann ein Spieler die Umrandung eines Karos vervollständigen, also die letzte seiner vier Begrenzungslinien zeichnen, so gehört das umrandete Feld ihm und er darf es mit einem Kreuz in seiner Farbe markieren. Anschließend darf der Spieler einen weiteren Strich zeichnen. Kann er wieder ein Karo komplettieren, so gehört es ebenfalls ihm. Dies geht solange, bis kein weiteres Karo mehr umrandet werden kann. Dann ist wieder der Gegner an der Reihe.
Das Spiel ist beendet, wenn alle Karos umrandet sind. Sieger ist der Spieler, der die meisten Karos besitzt. Interessant ist das Spiel, weil es trotz dieser einfachen Regeln einige taktische Varianten bietet. So wird oftmals die Entscheidung erst in der Endphase des Spiels fallen, wenn es einem Spieler durch geschickte Vorbereitung (oder Glück) gelingt, mit einem einzigen Zug eine ganze Kette von Karos in Besitz zu nehmen.
Schreiben Sie ein JAVA-Applet, das das Spiel Käsekästchen implementiert und es einem Spieler erlaubt, gegen den Computer zu spielen. Entwerfen Sie eine geeignete Datenstruktur zur Darsellung des Spielplans und teilen Sie das Programm grob in folgende Funktionsblöcke auf:
21. [C] (Analoguhr) Schreiben Sie ein Programm zur Darstellung der Uhrzeit mit Hilfe einer Analoguhr. Die Uhr soll Stunden, Minuten und Sekundenzeiger besitzen und stets die aktuelle Uhrzeit anzeigen. Seine Größe soll sich der Größe des Fensters anpassen.
22. [C] (Fraktales Wachstum von Pflanzen) Das Aussehen einfacher Pflanzen läßt sich in grober Näherung sehr gut durch einfache fraktale Konstruktionsvorschriften abbilden. Dazu wird zunächst ein Stamm konstruiert, der n Äste erhält. Jeder Ast wird separat durch folgende Parameter festgelegt:
Hier ist n = 2 und die beiden Regeln zur Konstruktion der Äste lauten:
Schreiben Sie nun ein Programm, daß in der Lage ist, diese Art von fraktalen Pflanzen hervorzubringen und auf dem Bildschirm darzustellen. Um die Ausgabe interessanter zu gestalten, können Sie die Farbe mit zunehmender Rekursionstiefe verändern. In den o.g. gezeigten Beipielen wurde beispielsweise jeweils ein etwas helleres grün verwendet, um einen plastischen Effekt zu erzielen.
23. [D] (Matherätsel-Löser) Im Unterhaltungsteil von Zeitschriften tauchen immer wieder mathematische Rätsel auf, bei denen über- und nebeneinanderstehende Gleichungen durch Symbole oder Zahlen verschlüsselt sind. Aufgabe des Lesers ist es, das Rätsel zu lösen, indem die Symbole systematisch durch die Ziffern 0 bis 9 ersetzt werden, so daß alle Gleichungen lösbar sind. Beispiele für solche Rätsel sind:
f + ef = ac + + + ei + gah = dbb --------------- aa + dbg = dac bfb + jhb = fee + - + ih - hi = fa --------------- fja + ce = ajj bbc + ggf = ccd - + - ggc - aa = ai --------------- ggj + geg = big kiha : f = ige : + = - ka + fg = eg --------------- kih + fb = kci abc + def = gfd - : - eh * a = dfg --------------- add - dg = fibSchreiben Sie zunächst ein Applet, das ein vorgegebenes Matherätsel durch Ausprobieren sämtlicher Möglichkeiten löst. Versuchen Sie zuvor eine Zeitabschätzung, um herauszufinden, wie lange Ihr Programm benötigen wird. Die zu lösenden Rätsel sollen dabei genau die Struktur haben, wie sie auch in den Beispielen verwendet wurde:
24. [D] (Jagd auf den Wumpus) In Einführungskursen zur Informatik wird immer gerne das Simulationsspiel "Jagd auf den Wumpus" zitiert. Wumpus ist eine gefährliche Bestie, die in einem unterirdischen Höhlensystem haust. Als mutiger Jäger bewaffnen Sie sich mit einem Bogen und fünf Pfeilen und betreten das Höhlensystem, um den Wumpus zu erlegen.
Das Höhlensystem besteht aus 20 Einzelhöhlen, die über jeweils drei Gänge mit einer anderen Höhle verbunden sind. Am Anfang des Spiels ist Ihnen das Verbindungmuster des Höhlensystems unbekannt und auch den Aufenthaltsort des Wumpus kennen Sie nicht. Mit Hilfe Ihrer Taschenlampe ist es Ihnen möglich, die Nummer der Höhle, in der Sie sich gerade befinden, und die Nummern der drei angrenzenden Höhlen, zu erkennen.
Sie haben nun die Wahl, entweder einen der anliegenden Räume zu betreten, oder einen Pfeil abzuschießen, nicht aber beides. Wenn Sie den Raum mit dem Wumpus betreten, frißt er Sie auf und das Spiel ist vorüber.
Es gibt noch zwei weitere Gefahren, vor denen Sie sich in Acht nehmen müssen. Zwei der Höhlen (die Sie natürlich nicht kennen) enthalten eine Falle im Boden. Falls Sie einen dieser Räume betreten, stürzen Sie in die Falle und das Spiel ist aus. Außerdem gibt es zwei weitere Räume, in denen große Fledermäuse sitzen. Wenn Sie einen dieser Räume betreten, werden Sie am Kragen gepackt und in irgendeiner anderen Höhle abgesetzt. Dies kann entweder eine ungefährliche Höhle oder eine mit einer Falle oder mit dem Wumpus sein. Anschließend landet die Fledermaus in einer zufällig ausgewählten anderen Höhle.
Während Ihrer Expedition durch das Höhlensystem erhalten Sie einige Hinweise, die Ihnen dabei helfen, den Kontakt mit den Gefahrenstellen zu vermeiden. Wenn in einer Nachbarhöhle eine Falle ist, spüren Sie einen leichten Luftzug. Befinden Sie sich dagegen in der unmittelbaren Nachbarschaft einer Fledermaus, hören Sie deren Flügelschlag. Der Wumpus selbst stinkt so sehr, daß Sie ihn auf eine Entfernung von zwei Höhlen riechen können.
Um einen Ihrer fünf Pfeile abzuschießen, müssen Sie auf eine der drei Nachbarhöhlen zielen. Der Pfeil fliegt durch Ihre Höhle, durch die Höhle, auf die Sie gezielt haben, und durch eine zufällige Anzahl von n weiteren Nachbarhöhlen, wobei n eine Zahl zwischen 2 und 6 ist. Wenn der Pfeil auf seinem Weg die Höhle des Wumpus durchquert, wird dieser getroffen und Sie haben das Spiel gewonnen. Falls Sie den Wumpus nicht treffen, verläßt dieser seinen Platz und wandert in irgendeine andere Höhle. Falls der Pfeil das zweite Mal Ihre eigene Höhle passiert (er kann auch um die Ecke fliegen), erlegt er Sie selbst und Sie verlieren das Spiel.
Schreiben Sie ein Programm, mit dem Sie "Jagd auf den Wumpus" spielen können. Definieren Sie eine Klasse zur Darstellung einer Höhle und seiner Verbindungen und ein Array, um das Höhlensystem darzustellen. Geben Sie dem Spieler in jedem Schritt die über seine Höhle und die Gefahren, die auf ihn lauern, verfügbaren Informationen, und erlauben Sie ihm, eine der beschriebenen Aktionen auszuführen. Überlegen Sie sich eine einfache grafische Representation des Höhlensystems und der Darstellung seiner Gefahren.