Berner Fachhochschule Hochschule für Technik und Informatik, HTI Fachbereich Elektro- und Informatik Labor für technische Informatik Projektarbeit Java 4-Gewinnt © 2004, Labor für Technische Informatik Dateiname: Erstellt: Autoren: Version: Projektarbeit Info4.DOC Januar 2005 Roger Weber, Christoph Reinhard 1.1 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung 1.1 Allgemeine Ziele 1.2 Thema 1.3 Alternative Themen 1.4 Bewertung 1.6 Abgabetermin 1.5 Dokumentation 2 Projektarbeit 4-Gewinnt 2.1 Aufgabenstellungen 2.2 Verschiedene Funktionsstufen 2.3 Mögliches Vorgehen Anhang A: GUI- Möglichkeiten Anhang B: GUI mit Swing Anhang C: Vernetzung der PC’s 3 3 3 3 3 3 3 4 4 4 4 5 6 8 2 Einführung 1 Einführung 1.1 Allgemeine Ziele Mit der vorliegenden Projektarbeit sollen folgende Ziele erreicht werden: 1. Der Stoff des Unterrichtsmoduls "Informatik 4" soll durch das Programmieren einer etwas umfangreicheren Anwendung gefestigt und vertieft werden. Insbesondere geht es darum, ein objektorientiertes Design zu erstellen und dieses anschliessend in Code umzusetzen. 2. Das Zusammenarbeiten in Teams soll gefördert werden. Diese Projektarbeit wird deshalb in Zweier- oder Dreiergruppen durchgeführt. 1.2 Thema In dieser Arbeit geht es darum, das Spiel 4-Gewinnt als Java-Applikation mit einem GUI auf einem PC zu implementieren. Eine detaillierte Beschreibung finden sie im Kapitel 2. 1.3 Alternative Themen Sie können als Alternative zum Thema 4-Gewinnt ein eigenes Thema wählen. Voraussetzungen sind: 1. Das Programm ist eine Java-Applikation. 2. Die Applikation verwendet ein GUI. 3. Sie beschreiben ihre Applikation in einem Pflichtenheft. Dieses Pflichtenheft muss vom Dozenten vor Projektbeginn genehmigt werden. Alle weiteren Bedingungen (Bewertung, Kurzreferat und Dokumentation) entsprechen dem vorliegenden Dokument. 1.4 Bewertung Die Projektarbeit wird mit einer Note bewertet. Bewertungskriterien sind: 1. Dokumentation 2. Funktionalität & Zielerreichung 3. Design 4. Code-Qualität 1.5 Dokumentation In der Dokumentation beschreiben Sie bitte das Pflichtenheft, das Projektmanagement (Analyse), die Struktur des Programms (Klassendiagrammen), die Probleme, die Tests usw. Auch das Laborjournal können sie in die Dokumentation integrieren. Legen Sie Ihrem Bericht eine CD mit dem Quellode bei. Der Bericht sollte (ohne Anhang) 10 Seiten A4 nicht überschreiten. 1.6 Abgabetermin Der Abgabetermin ist die letzte Woche der Unterrichtsperiode. 3 Projektarbeit 4-Gewinnt 2 Projektarbeit 4-Gewinnt 2.1 Aufgabenstellungen Das Spiel 4-Gewinnt soll auf einem PC implementiert werden. Das Programm hat folgende Eigenschaften: 1. 2. 3. 4. 5. Die Spieler können sich zu Beginn des Spiels anmelden. Jeder Spieler erhält eine Farbe. Die Spieler kommen abwechslungsweise zum Zuge. Der Spielstand wird auf dem GUI grafisch dargestellt. Mögliche Varianten zur Darstellung finden sie im Anhang A. Sie können aber selbstverständlich eine eigene Oberfläche entwickeln. Das GUI soll in AWT oder Swing programmiert werden. Das Programm erkennt, welcher Spieler gewonnen hat und gratuliert diesem. 2.2 Verschiedene Funktionsstufen Abhängig davon wie sie in ihrem Projekt vorwärts kommen können sie verschiedene Funktionsstufen in ihr 4-Gewinnt einbauen. Die erste Stufe sollten alle Teams erreichen. In den weiteren Stufen geht es darum, das Spiel an zwei PC’s über das Netz zu spielen. Den für die Vernetzung notwendigen Code finden sie auf dem Info-Laufwerk, eine Beschreibung dazu im Anhang. 1. 2. 3. Spiel gegeneinander an einem PC Spiel gegeneinander mit zwei vernetzten PC’s Abspeichern des Spielstandes 2.3 Mögliches Vorgehen 1. 2. 3. 4. 5. 6. Erstellen sie das Projektmanagement (Zeitplan, Organisation im Team ...) Erstellen sie ein Design für die Software Schreiben sie den Code. Testen sie die Software. Führen sie während der Projektarbeit ein Journal, in welchem sie die gemachten Erkenntnisse, Probleme und Lösungen notieren. Erstellen sie ihre Dokumentation nicht erst am Schluss des Projektes, sondern parallel zum Projektablauf. 4 GUI- Möglichkeiten Anhang A: GUI- Möglichkeiten Verschiedene GUI Möglichkeiten: 5 GUI mit Swing Anhang B: GUI mit Swing Swing ist eine etwas modernere Bibliothek zur Programmierung von GUI’s als AWT. Sie können diese Projektarbeit entweder in AWT oder in Swing programmieren. Swing wird sehr ähnlich wie AWT programmiert. Wesentlichste Unterschiede sind: 1. Die Klassennamen beginnen mit einem „J“. Z.B. JButton statt Button. 2. Eine Komponente wird nicht einfach mit „add“ auf dem Fenster zugefügt. Zuerst muss eine Methode „getContentPane“ aufgerufen werden: auf dem von ihr zurückgegebenen Container können die Komponenten mit „add“ zugefügt werden. 3. Anstelle der Methode „paint“ wird „paintComponent“ verwendet. 4. Gezeichnet wird in einem „JPanel“. „Canvas“ gibt es in Swing nicht. Wenn sie sich für Swing entscheiden gibt ihnen dieser Anhang eine kurze Übersicht zu einigen Swing- Klassen, die sie für 4-Gewinnt gebrauchen können: Class JFrame java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame Class JOptionPane java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JOptionPane Class JMenuBar java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JMenuBar 6 GUI mit Swing Class JPanel java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JPanel Class JLabel java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JLabel 7 Vernetzung der PC’s Anhang C: Vernetzung der PC’s Um das Spiel gegen einen Gegner auf einem anderen Computer im Netzwerk zu spielen, müssen die jeweiligen Züge (Reihe in welcher der Stein plaziert wird) ausgetauscht werden. Eine Möglichkeit dies zu tun, ist die Kommunikation über Sockets. Die Kommunikation über Sockets Als Socket bezeichnet man eine Stream- basierte Programmierschnittstelle zur Kommunikation zweier Rechner in einem TCP/IP-Netz. Das Übertragen von Dateien über eine Socket- Verbindung ist vergleichbar mit dem Zugriff auf eine Datei: 1. Verbindung aufbauen 2. Daten lesen und/oder schreiben 3. Verbindung schliessen Zur Kommunikation über Sockets stehen zwei Klassen „Client.java“ und „Server.java“ zur Verfügung. Server.java Wichtig: Zuerst muss ein Objekt der Klasse Server instanziert werden. Der Server wartet dann auf dem entsprechenden Port auf eine Verbindung des Clients. public Server(String port) public void sendMove(int ownMove) Konstruktor: öffnet den Socket und warte auf einen Slave um eine Verbindung herzustellen. Wartet bis vom Client ein Zug gesendet wird und gibt diesen als int zurück. Sendet einen Zug zum Client. public void closeConnection() Schliesst die Verbindung. public String getConnectionStatus() Gibt den Status der Verbindung als String zurück. public int getNextMove() public String getMoveStatus() - "Verbindung hergestellt!" - "Verbindung terminiert!" Gibt den Status des gesendeten Zuges zurück. - "waiting for move from client..." - "got move from client. move = " + move Client.java public Client(String port, String remoteIP) public int getNextMove() public void sendMove(int ownMove) public void closeConnection() public String getConnectionStatus() public String getMoveStatus() Konstruktor: versucht sofort eine Socket- Verbindung zum Server (remoteIP) herzustellen Wartet bis vom Master ein Zug gesendet wird und gibt diesen als int zurück. Sendet einen Zug zum Master. Schliesst die Verbindung. Gibt den Status der Verbindung als String zurück. - "Verbindung hergestellt!" - "Verbindung terminiert!" Gibt den Status des gesendeten Zuges zurück. - "waiting for move from server..." - "got move from server. move = " + move 8