Übungsblatt 1
Java-Programmierung
tud

Wichtige Hinweise


Sinn und Zweck dieses Übungsblatts ist es, Eclipse kennenzulernen, sich mit Swing auseinanderzusetzen und ein Architekturmuster im Einsatz zu sehen.

Um mit dem zur Verfügung gestellten Quellcode arbeiten zu können, benötigen Sie Java 5 und Eclipse 3.x. Beides ist im RBG-Pool verfügbar oder kann auf dem eigenen Rechner installiert werden. Sofern Sie sich mit den neuen Sprachfeatures von Java 5 noch nicht auskennen, sollten Sie sich unsere Informationsseite im Helpdesk anschauen. Dort finden sie auch Installationshinweise zu Eclipse.

Für die Bearbeitung des Übungsblatts müssen Sie das TicTacToe-Paket herunterladen, entpacken und in Eclipse importieren. Letzteres funktioniert folgendermaßen: Im Package Explorer rechts klicken und Import auswählen. Jetzt Existing projects into Workspace auswählen und auf next drücken. Navigieren Sie zu dem Verzeichnis, das das Projekt enthält, wählen Sie das TicTacToe-Projekt aus und drücken Sie auf finish. Sollten sich hierbei Probleme ergeben, melden sie sich am besten im Forum. Hinweis: Das Paket enthält auch Testklassen für JUnit, die im demnächst erscheinenden JUnit-Tutorial verwendet werden.

Aufgabe 1: Muster im Spiel

Machen Sie sich vertraut mit Eclipse und Java und versuchen Sie soweit wie möglich, das TicTacToe-Paket zu verstehen. Die Klassen sind ausreichend kommentiert und sollten daher weitgehend selbsterklärend sein. Das Spiel kann über die Klasse TicTacToeApp gestartet werden.

Die graphische Benutzungsoberfläche wurde mit Swing realisiert. Im Helpdesk finden Sie ein Swing-Tutorial, welches sich am TicTacToe-Paket orientiert, es dient daher sowohl zum Verständnis der Sourcen als auch Swing im Allgemeinen.

In dem Paket wird ein sehr bekanntes Architekturmuster eingesetzt - das sogenannte MVC (Model-View-Controller) Pattern - was darauf abzielt, die Präsentation und Repräsentation zu trennen. Interessant, und durchaus üblich für Architekturmuster ist, dass sie selbst verschiedene, weitere Entwurfsmuster einsetzen. Hier ist dies unter anderem das Observerpattern, welches eine 1-zu-n Beziehung zwischen Model und View ohne starke Kopplung bewerkstelligt. Beide werden in einer späteren Vorlesung noch genauer vorgestellt.

Um das Observerpattern im Einsatz zu sehen, instanzieren Sie einen neuen View (Klasse TicTacToeView) und melden Sie diesen beim gleichen Model und Controller wie der erster View an.

Aufgabe 2: Legale Züge

Die Anzeige soll um ein Feature ergänzt werden. Hierzu wird nicht die bestehende View-Klasse verändert, sondern eine neue Klasse davon abgeleitet. In dieser ergänzen Sie zunächst ein Textfeld am unteren Rand, in dem Statusmeldungen angezeigt werden sollen.

Wenn man sich mit der Maus auf ein Spielfeld bewegt, soll in diesem Statusfeld eine Meldung erscheinen, ob dieser Spielzug möglich wäre. Um dies zu erreichen könnten Sie bei jedem Spielfeld einen MouseAdapter zusätzlich zum ActionListener anmelden und dann auf das MouseEntered-Signal reagieren. In einem TicTacToe-Spiel ist jeder Spielzug erlaubt wenn das Feld frei ist. Stellen sie außerdem sicher, dass keine Meldung angezeigt wird, wenn der Mauszeiger sich ausserhalb des gesamten Spielfeldes befindet.

Sie müssen nun nur noch anstatt der alten View-Klasse die neue in TicTacToeApp instanzieren.

Aufgabe 3: Ein anderer Blick

Die Observerschnittstelle wird benutzt, um das Model vom View abzukoppeln. Damit wird es möglich, den View auszutauschen, ohne dass es die Klienten merken. Erstellen Sie einen neuen Observer TicTacToeTextualView der die Spielzüge textuell in der Konsole ausgibt, und außerdem jeden Zug in einen Spielzuglog (eine Collection vom Typ Spielzug) schreibt. Melden sie diesen neuen View ebenfalls beim Model an.

Zusatzaufgabe: Mit oder ohne Computergegner

Wenn Sie noch ein paar weitere Swing-Komponenten kennenlernen wollen, dann ergänzen sie noch einen Checkbutton, mit dem der Computerspieler während des Spiels ein- und ausgeschaltet werden kann.  Um dies zu erreichen müssen Sie auch den Spielablauf im Controller entsprechend verändern.

 

 

SiteMap Print Version Updates as RSS feed Updates as HTML page