Anwendungspraktikum aus JAVA Programmierung SS 2006 Leitung: Dr. Albert Weichselbraun JAVA PROJEKT „Schiffe Versenken“ mit GUI Projektheft Marija Matejic Matrikelnummer: 9352571 E-mail: [email protected] Inhaltsverzeichnis 1. Projektdefinition 2. Projektbeschreibung 3. Projektanalyse 3.1 Projektplanung 3.2 Netzplan 3.3 Modellierung 3.3.1 Use Case Diagramm 3.3.2 Klassendiagramm 3.3.3 Sequenzdiagramm 3.3.4 Zustandsdiagramm 2 1. Projektdefinition Projektbezeichnung Software Version vom Spiel „ Schiffe versenken“. Kurzbeschreibung In diesem Projekt wird das Papier und Bleistift Spiel „Schiffchen Versenken“ in eine Software Version mit Hilfe der Java Programmiersprache umgesetzt. Das Spiel ist leicht mit Hilfe eines User Interfaces zu bedienen. In der Grundversion des Spieles werden die Schiffe in beiden Spielfeldern mittels des Zufallsgenerators dargestellt. Wenn die Zeit zulässt, besteht in einer erweiterten Version die Möglichkeit, dass der User seine Schiffe selber auf dem Spielbrett auswählen kann. Projektziele Projektziele sind die Funktionalität der Software wie deren leichte Benutzung zum anderen. Projektumfang Das Projekt ist während der Dauer der Lehrveranstaltung als Anwendungspraktikum in Java fertig zu stellen und hat den Umfang von der halben Lehrveranstaltung, d.h. etwa 13 Wochen. 2. Projektbeschreibung Ziel des Projektes ist eine funktionstüchtige Software Version des Spieles „Schiffe versenken“ in Java Programmiersprache zu erstellen. Das Spiel wird von einem User gegen den Computer gespielt. Spielfelder Es werden 2 Spielfelder dargestellt, das User_Spielfeld und das Computer_Spielfeld. Das rechteckige Spielfeld besteht aus quadratischen Feldern und soll 8 x 8 Felder haben. Es sind insgesamt 5 Schiffe zu platzieren, die verschiedene Größe haben: ein Schiff der Größe 1 belegt 1 Feld, ein Schiff der Größe 2 belegt 2 Felder, ein Schiff der Größe 3 belegt 3 Felder, ein Schiff der Größe 4 belegt 4 Felder, ein Schiff der Größe 5 belegt 5 Felder. Schiffe werden entweder horizontal oder vertikal platziert. Sie dürfen sich berühren, aber nicht überlappen. Der Computer platziert zufällig die 5 Schiffe im Computer_Spielfeld, die für den User unsichtbar sind. In der Grundversion werden auch die Schiffe im User_Spielfeld zufällig platziert, die für den User ersichtlich sind. In der erweiterten Version (optional) wählt der User die Felder, wo er seine Schiffe platzieren will. Spielablauf Am Anfang jedes Spieles ist der User am Zug. Der User feuert in das gegnerische Spielfeld, in dem er mit der Maus ein gegnerisches Feld anklickt. 3 Er bleibt solange am Zug bis er einen Fehlschuss abgegeben hat, d.h. bis ein Feld beschossen wurde, unter dem sich kein Schiff befindet. Wenn der User das erste Mal einen Fehlschuss getätigt hat, übernimmt der Computer. Sobald der User oder der Computer alle gegnerischen Schiffe getroffen hat, hat er gewonnen und das Spiel ist beendet. Graphisches Feedback Sowohl Fehlschüsse als auch Treffer werden in beiden Spielfeldern mit speziellen Farbcodierungen gekennzeichnet. Die Fehlschüsse werden mit gelb, die Treffer in orange und das Versenken eines kompletten Schiffes in rot dargestellt. GUI – Übersicht Das Menü Das Spiel wird über einen Menüpunkt gestartet und beendet. Die Menüleiste am oberen Rand des Interfaces beinhaltet die beiden Untermenüs Spiel und Hilfe. In dem Spiel Menü wiederum lässt sich das Spiel starten, in dem der Menüpunkt Neues Spiel selektiert wird. Entsprechend wird das Spiel über den Menüpunkt Beenden beendet. Tastenkürzel stehen ebenfalls zur Verfügung. Das Hilfe Untermenü gibt Informationen über das Spiel und bietet ausserdem eine einfache Spielanleitung an. Spiel – GUI Die graphische Version des Spieles beinhaltet 2 Spielfelder, einen User_Spielfeld und einen Computer_Spielfeld. Die Spielfelder werden zweidimensional dargestellt, mittels einer 8 x 8 Matrix (siehe Abb. 1). Die Interaktion der Spieler erfolgt per Mausklick. Die Schüsse können abgegeben werden, in dem das gewünschte Feld im gegnerischen Spielfeld angeklickt wird. Entsprechend, ob das Feld, in dem sich das Schiff befindet, getroffen wird oder nicht, ändert sich die Farbe des Feldes. Im Fall des Nichttreffens verändert sich die Farbe des Feldes in gelb, im Fall des Treffens in orange und im Fall des Versenkens des ganzen Schiffes in rot. Am Anfang des Spieles stehen jedem Spieler 5 Schiffe zur Verfügung, die zu treffen sind. Jedes versunkene Schiff wird dann in einer so genannten Ergebnisanzeige aufgelistet (im unteren Teil der GUI). Somit ist es für jeden Spieler ersichtlich, wie viele Schiffe noch zu versenken sind. Wenn alle Schiffe im gegnerischen Spielfeld versunken sind, hat jedes Schiff in der Ergebnisanzeige den Wert 1 und das Spiel ist beendet. 4 Abb. 1: Entwurf der „Schiffe Versenken“ GUI 5 3. Projektanalyse 3.1 Projektplanung Tabelle 1 zeigt die einzelnen Arbeitsschritte die geplant sind, um das Projekt zeitgemäss abzuschliessen. Die Dauer des Projektes wird in Arbeitstagen berechnet, wobei ein Arbeitstag 6 Arbeitsstunden beinhaltet. Zusätzlich zu der Dauer der Schritte sind die erforderlichen Vorgänger- und Nachfolgerschritte aufgeführt. ID A B C D E F G H I K L M N O Beschreibung Projektdefinition und -beschreibung Projektanalyse Design Implementierung Basis Klassen Implementierung Controller Korrigieren/Testen GUI Design Implementierung Basis GUI Integration Basis GUI Implementierung Interaktion GUI Integration Interaktion GUI Entwicklung von Schiffbildchen Fertigstellung Gesamtprojekt Schreiben Projektbericht Dauer (d) 5 5 5 10 5 5 3 5 7 15 10 2 5 15 Vorgänger Nachfolger -A B C D E B G F,H I K K L,M O B C,G D E F I H I K M,L N N O -- Tabelle 1: Arbeitsschritte für das Projekt „Schiffe Versenken“ Die Methoden, die beim Programmieren des Spieles „Schiffe Versenken“ verwendet werden, sind folgende: 1. Eclipse 2. Java 1.5 3. Java Swing (für Graphik) 3.2 Netzplan Der Netzplan ist laut dem Projektplan und anhand der Daten aus der Tabelle 1 erstellt worden. Der kritische Pfad ist mit den dicken Pfeilen markiert und enthält die folgende Vorgänge: A – B – C – D – E – F – I – K – L – N – O. 6 Abb. 2: Netzplan 7 3.3 Modellierung Im Folgenden sind die einzelnen Modellierungsdiagramme mit einer kurzen Beschreibung angeführt. 3.3.1 Use Case Diagramm Das Use Case Diagramm besteht aus den beiden Usern Spieler und Computer. Jeder User hat als einzigen Use Case die Aktion schiessen. Diese Aktion schiessen selbst wird erweitert durch die Zustände getroffen und daneben, welche das Resultat der Aktion darstellen. Der Zustand getroffen wird erweitert durch den Zustand versenkt, und dieser wiederum durch den Zustand Spiel beenden. 8 Abb. 3: Use Case Diagramm 9 3.3.2 Klassendiagramm Das Klassendiagramm für das Projekt verwirklicht das Model – View – Contoller SW Pattern. Die drei Einheiten werden hierbei strikt voneinander getrennt, um für ein durchsichtiges Handhaben der verschiedenen Aufgabenfelder zu sorgen: so muss die graphische Darstellung der Anwendung nicht aufwendig mit Daten gespeist werden, um auf Veränderung im Spielgeschehen zu reagieren, sondern kann diese eigenständig beziehen. Abb. 4: Klassendiagramm 10 3.3.3 Sequenzdiagramm Abb.5: Sequenzdiagramm 11 3.3.2 Zustandsdiagramm Abb. 6: Zustandsdiagramm Das Zustandsdiagramm für die Anwendung ist in zwei Komponenten unterteilt: die Computerkomponente und die Userkomponente. Angefangen von dem Startzustand (schwarzer Punkt am linken Rand) wechselt das Programm in turn Zustand. Dies bedeutet, dass der User am Zug ist einen Schuss abzufeuern. Entsprechend dem Resultat des abgegebenen Schusses wechselt der Zustand des Programms entweder zu hit oder wechselt zum turn Zustand des Computers. Vom hit Zustand aus registriert eine Counter_Variable, ob ein Schiff der Länge n versenkt worden ist. Ist dies der Fall, wechselt der Zustand zu sunk, ansonsten bleibt der Zustand bei hit (wobei die Counter_Variable inkrementiert wird). Von beiden Zuständen hit und sunk wechselt der Zustand zurück zu turn für den Fall, dass eine miss Aktion (daneben geschossen) registriert wird. Dies bedeutet wiederum ein Wechsel des Spielers. Der Endzustand (schwarzer Punkt am rechten Rand) wird erreicht sobald entweder der User oder der Computer alle fünf Schiffe des Gegners versenkt hat. 12