Projekt
Spieleserver
Tic
Tac Toe
Leitung: Dr. Michael Hahsler
Elisabeth Damberger
Matrikel-Nr.:
9950573
Studienrichtung: BW (151)
16. Jänner 2004
Inhaltsverzeichnis
2.1. Spielregeln von Tic-Tac-Toe
Es soll im
Rahmen der LV „Rechnerpraktikum aus Java“ ein Spiele-Server
(Multi-Thread-Server) und Clients für das Spiel Tic-Tac-Toe mit jeweils 2
Spielern implementiert werden.
Das
entsprechende Vorgehen sieht wie folgt aus:
1.
Protokoll entwickeln
2.
UML-Diagramm für Server
und Client
3.
Server implementieren
(sollte über telnet bereits verwendbar sein)
4.
Client implementieren
(Grafische Oberfläche/Applet oder Computergegner sind optional)
5. Dokumentation:
Ø Erklärung des Spiels (Problemstellung, Analyse)
Ø UML-Diagramme & Protokoll (Design)
Ø Erklärung der Klassen (Implementierung)
Ø Installation & Wartung
Anzahl der Spieler pro
Spiel: 2

Spielfeld: besteht aus 3 × 3 Feldern
Ablauf: abwechselnd
markiert jeder Spieler ein Feld mit seinem Symbol (z.B. mit einem Kreuz
"x" oder Kreis "o" bzw. mit Nummer 1 oder 2), um so eine
Reihe von 3 gleichen Markierungen nebeneinander in horizontaler, vertikaler
oder diagonaler Anordnung herzustellen
Beginner:
nach Zufallsprinzip
Gewinner:
der Spieler, dem die Reihe von 3 gleichen Markierungen nebeneinander in einer
Reihe, Spalte oder in einer Diagonale zuerst gelingt
z.B.:



Spalte
Diagonale Reihe


siehe
Beilage (Excel-Tabelle: tictactoe.xls, Blatt Sequenz)
siehe Beilage (Excel-Tabelle: tictactoe.xls, Blatt Protokoll)
Class Server
java.lang.ObjectServer
public class Server
extends java.lang.Object
|
Constructor Summary |
|
|
|
|
|
Method Summary |
|
|
|
|
|
Methods
inherited from class java.lang.Object |
|
|
|
Constructor Detail |
public Server()
|
Method Detail |
public static void main(java.lang.String[] args) throws java.io.IOException
Mainmethode
Throws:
java.io.IOException
Class SpieleThread
java.lang.Objectjava.lang.Thread
SpieleThread
All
Implemented Interfaces:
java.lang.Runnable
public
class SpieleThread
extends
java.lang.Thread
|
Field Summary |
|
Fields
inherited from class java.lang.Thread |
|
|
|
Constructor Summary |
|
|
|
|
|
Method Summary |
|
|
|
|
|
Methods
inherited from class java.lang.Thread |
|
|
|
Methods
inherited from class java.lang.Object |
|
|
|
Constructor Detail |
public SpieleThread(java.net.Socket socket)
Konstruktor zur Erstellung eines neuen (Spiele)Threads für jeden eingewählten Spieler
|
Method Detail |
public void run()
Überschreiben der Methode run der Klasse Thread
Class Protocol
java.lang.ObjectProtocol
public
class Protocol
extends
java.lang.Object
|
Field Summary |
|
|
Constructor Summary |
|
|
|
|
|
Method Summary |
|
|
|
|
|
|
|
|
|
|
|
Methods
inherited from class java.lang.Object |
|
|
|
Field Detail |
public TicTacToe spiel
|
Constructor Detail |
public Protocol(int usernummer, java.lang.String username,SpieleThread meinThread)
Konstruktor inkl. Spielernummer u. Spielernamen laut Server-Einwahl bzw. –Registrierung
|
Method Detail |
public java.lang.String processInput(java.lang.String inputLine)
Verarbeitung der Eingaben der Benutzer (start, help, bye, spielen etc.)
public void generateoutput(java.lang.String output)
ermöglicht die Ausgabe von Text ohne Input bzw. Eingabe des Spielers
public java.lang.String help()
Hilfefenster - Anzeige aller Befehle, Beschreibung des Spiels etc.
Class TicTacToe
java.lang.ObjectTicTacToe
public
class TicTacToe
extends
java.lang.Object
|
Constructor Summary |
|
|
|
|
|
Method Summary |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Methods
inherited from class java.lang.Object |
|
|
|
Constructor Detail |
public TicTacToe()
Default-Konstruktor
public TicTacToe(Protocol sp1)
Konstruktor: ein neues Spielfeld 3 x 3 wird erzeugt, Spielstand wird auf 0 gesetzt, der erzeugende Spieler bzw. desseb Protokoll wird übergeben
|
Method Detail |
public java.lang.String toString()
Ausgabeformat für die Anzeige des Spielfeldes
public java.lang.String gegnerSuchen()
die Spielernummer des gewünschten Gegenspielers soll aus der Liste der eingeloggten Spieler ausgewählt werden; ist kein weiterer Spieler eingeloggt, kann nicht gespielt werden
public java.lang.String gegnerAnzeigen(int gegnernr,
java.lang.String gegnername)
der ausgewählte Gegenspieler wird angezeigt
public void gegnerbenachrichtigen(Protocol sp2,
java.lang.String sp2_name)
der ausgewählte Gegner wird benachrichtigt, daß er für ein Spiel ausgewählt wurde
public java.lang.String spielen()
eine neue Runde des Spiels beginnt; alle Felder sind noch frei (= 0)
public java.lang.String anfangen()
der Zufallsgenerator bestimmt, ob Spieler 1 oder 2 beginnen darf
public java.lang.String feldSuchen()
Abfrage des gewünschten Feldes, das der aktuelle Spieler belegen will
public java.lang.String feldAnzeigen(java.lang.String eingabe)
Anzeige des Feldes, das vom aktuellen Spieler gewählt wurde
public java.lang.String naechstenAnzeigen()
Anzeige des Spielers für den nächsten Spielzug (abwechselnd)
public java.lang.String gewinnstatusChecken()
Kontrolle, ob ein Spieler bereits gewonnen hat (3 in einer Reihe/Spalte/Diagonale)
public java.lang.String zuegestatusChecken()
Kontrolle, ob bereits 9 Züge (ohne Gewinner = unentschieden) durchgeführt wurden
public java.lang.String spielstandAnzeigen()
der Spielstand (Gewinne pro Spieler) wird angezeigt
public java.lang.String setzen()
je nach Spieler wird das ausgewählte Spielfeld entsprechend belegt - sofern es noch frei ist bzw. existiert und noch nicht 9 Züge absolviert wurden
Der Java-Code der vier betreffenden Klassen ist in der
Beilage bzw. in folgenden Dateien zu finden:
Ø Server.java
Ø SpieleThread.java
Ø Protocol.java
Ø
TicTacToe.java
Wählt sich ein Spieler ein,
wird vom Server (Server.java) ein neuer SpielerThread
(SpielerThread.java) erzeugt. Dieser wiederum erzeugt für den Spieler bzw. SpielerThread
ein neues Protocol (Protocol.java). Das Protocol des Spielers,
der den Befehl „start“ eingibt, erstellt ein neues Spiel bzw. eine Instanz von TicTacToe
(TicTacToe.java).
Der Spieleserver ist auf dem
lokalen Server bzw. Localhost, Port 5555 installiert. Zugriff erhalten die
Spieler (User) durch Einwahl mittels Telnet („telnet localhost 5555“). Es sind
4 Java-Dateien programmiert (siehe auch UML-Klassendiagramm).
Um TicTacToe spielen zu
können, muß man sich am Spieleserver einwählen. Dies erfolgt im Eingabeaufforderungsfenster
durch den Befehl „telnet localhost 5555“.
Nach dem Einwählen fragt der Server
nach einem (beliebigen) Benutzernamen, mit dem man anschließend in der
Spielerliste aller eingewählter Spieler/User eingetragen wird.
Ist noch kein weiterer
Spieler eingewählt, kann (noch) nicht gespielt werden. Erst wenn sich ein
weiterer Spieler (= Spieler 1) eingewählt hat, kann dieser durch den Befehl „start“ das
Spiel TicTacToe starten. Anschließend erscheint eine aktuelle Liste aller eingewählten
bzw. wartenden Spieler, aus der er einen Gegner (= Spieler 2) auswählen kann.
Nach Eingabe der Spielernummer seines Wunschgegners wird dieser benachrichtigt,
daß er zu einem Spiel eingeladen wurde.
Nachdem das Spielerpaar
(Spieler 1 und Spieler 2) feststeht, kann Spieler 1 durch den Befehl „spielen“ die erste
(bzw. eine neue) Runde des Spiels TicTacToe starten. Der Zufallsgenerator
bestimmt, welcher Spieler beginnen darf. Jeder Spieler wird nun abwechselnd
aufgefordert, auf ein freies Feld zu setzen, welches entsprechend mit 1 oder 2
markiert wird. Das Spielfeld besteht aus 3 Zeilen und 3 Spalten. Die Feldbezeichnungen
lauten z.B. „1-1“ oder „3-1“ (die erste Zahl steht dabei für die Zeile, die
zweite Zahl für die Spalte). Die genauen Spielregeln finden sich in Kapitel 2.1.
Sobald ein Spieler 3 in
einer Reihe (= gewonnen) hat oder 9 Spielzüge (= unentschieden) erreicht
wurden, meldet dies der Server. Bei einem Sieg wird der Spielstand entsprechend
aktualisiert. Danach kann mit dem Befehl „spielen“
eine weitere Spielrunde gestartet werden.
Durch Eingabe von „start“ gelangt
man wieder an den Beginn des Spieles, wo die Auswahl eines (anderen) Gegners
möglich ist, sofern weitere Spieler eingeloggt sind. Der Spielstand wird wieder
auf 0 gesetzt.
Durch Eingabe von „help“ gelangt
man jederzeit in das Hilfefenster, in dem alle möglichen Befehle, Spielregeln
u.ä. aufgelistet sind.
Durch Eingabe von „bye“ kann mich sich jederzeit vom Server
abmelden. Spielstände und Benutzernamen werden gelöscht. Die Verbindung zum
Server wird beendet. Etwaiig laufende Spielrunden werden somit abgebrochen.