Java Projekt: 4-gewinnt
Praktikum aus Programmierung
Robert Bobro
8.1.2004
Sinn dieses Projektes ist es ein
Spiel zu programmieren auf der Basis von Client – Server Architektur. Auf den
Server können sich Spieler anmelden und gegen einander spielen.
Das Spiel heißt 4 gewinnt und ist ein Spiel für zwei Spieler. Ziel ist es vier
Steine in einer Reihe bekommen und das senkrecht, waagerecht oder diagonal. Sie
erreichen es damit dass sie ein Stein in eine von den sieben Spalten einwerfen.
Die Spalten füllen sich von unten
nach oben, das heißt der Stein fällt bis er den Boden oder ein anderer Stein
erreicht. Dann ist der andere Spieler am Zug. Das geht so weiter bis jemand
gewinnt oder bis alle Spalten voll sind.
Das Problem besteht darin einen Server zu implementieren der gleichzeitig
mehreren Klienten über das Netzwerk erlaubt das Spiel 4 gewinnt zu spielen.
Dazu gehört Spiel starten, auf ein spiel warten und es muss auch eine
Spielerliste geben die Spieler sollen auch ein Skore haben. Die einzelnen Klienten melden sich über Telnet
ein.
UML: Use Case Diagramm

![]()
![]()

Um die Kommunikation starten ist
der Server (GameServer) verantwortlich. Der sorgt auch für die erzeugung von Threads (ServerThread) die parallel nebeneinander
existieren und repräsentieren die Klienten auf diesem Server und hat die
leistet die Funktion der Kommunikation zwischen Server und Klienten.
ServerThread ist fest mit einem Spieler(Player) verbunden der in der Spielerdatabase(PlayerList)
gespeichert ist. Jeder Spieler hat verschiedene zustände in welchen er sich
befinden kann(Online – heißt das der Spieler seine befehle macht , Waiting –
heißt das der Spieler auf ein Spiel wartet, Playing – heißt das er spielt), der
Thread sorgt auch dafür das er Befehle machen kann die für diesen zustand
gedacht sind (z.b. er kann nicht die Spielerliste abrufen wehrend er spielt)
und führt sie durch. Die Basis Befehle wie spiel starten usw. befinden sich in
der Protocol klasse. Wehrend des Spiels wird die Klasse Protocol nicht benutzt
und die befehle werden direkt von Thread gemacht. in der Spielerdatabase sind
alle Spieler gespeichert die zurzeit auf dem Server sind. Sie hat außerdem die
macht die Spieler zustände zu ändern. Wenn ein neues Spiel(Game) startet wird
eine neue Instanz der klasse erzeugt. Dann fragt der Thread ob der Gegner
spielen will. Und erst dann können die Spieler die Zuge machen das Spiel auswertet
sie aus entscheidet ob jemand gewonnen hat, wenn die Spalten voll sind endet
das spiel mit einen Unentschieden. Wenn das Spiel wobei ist wird das Ergebnis
in das Skore von den jeweiligen Spielern gespeichert. Dann fängt das ganze von
vorne an.
UML: Klassendiagramm, Sequenzdiagramm


`


Das Protokoll:
![]()
Please enter your name:
Name
Wenn das Name schon existierst:
This user already exist
Wenn nicht:
![]()
Welcome to 4 wins server
Say 'show players'
for showing all connected players
Say 'help' for help
Say 'start game:
player' to start a game
Say 'exit' to quit
Say 'wait for game'
to wait for game
Schreibt aus
Socket: Spieler Socket Name: Spieler
Name Status: Spieler Status Score(wins/looses): x/x
von allen Spielern
Schreibt help aus
Andere Spieler macht ein request
waiting for request

You have been requested. Do you want to play:[y/n]
a.
n
Nachdem der angefragte Spieler sein Zug gemacht hat
b. y
![]()
wen der Spieler nicht existiert: such user does not
exist
wen sie ihr name eingeben: you cannot play
with you
wen der Spieler nich auf Spiel
wartet: Player istn't waiting for game
game started waiting for player to accept
![]()
Spieler akzeptiert nicht:
Player refused
Spieler akzeptiert:
0000000 0000000 0000000 0000000 0000000 0000000![]()
Nachdem der andere Spieler sein Zug gemacht hat
![]()
Make your move:[number of column 1..7]
number
![]()
![]()
wen jemand falsch eingibt:
You entered wrong number
wen die Spalte voll ist:
This column is already full please enter other column.
wen alles OK ist
Move accepted.
Gewinner:
You win
![]()
Verlierer:
You have lost.
Goodbye.

Server schreibt aus
Sie
sollen eingeben
class GameServer:
static
void main - sie startet das Programm, wenn sich jemand anmelden möchte
zuweist sie ihm ein freies Socket zu und
erzeugt das Thread. Die Spielerdatabase(PlayerList) wird auch erzeugt.
Spiel 4 gewinnt ist ein Spiel für zwei Spieler. Ziel ist es vier Steine in einer Reihe bekommen und
das senkrecht, waagerecht oder diagonal. Sie erreichen es damit dass sie ein
Stein in eine von den sieben Spalten einwerfen.
Die Spalten füllen sich von unten
nach oben, das heißt der Stein fällt bis er den Boden oder ein anderer Stein
erreicht. Dann ist der andere Spieler am Zug. Das geht so weiter bis jemand
gewinnt oder bis alle Spalten voll sind.
Um das Spiel spielen zu können muss zuerst der Server gestartet werden. Den starten sie wie ein normales Java Programm. In dem Ordner in dem sich das Spiel befindet tippen sie ins command line: java GameServer.
Dann können sie sich über Telnet einmelden: telnet server_IPadress(z.b. 192.167.2.2) 9999. folgen sie dann die help Instruktionen die auf dem Bildschirm ausgeschrieben werden.