Java Projekt: 4-gewinnt

Praktikum aus Programmierung

 

 

 

Robert Bobro

8.1.2004

Java Code

Problemdefinition

 

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.

 

Analyse

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Textfeld: <<include>>Textfeld: <<include>>
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Design

 

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

 

  1. show players

Schreibt aus

 

Socket:  Spieler Socket Name: Spieler Name Status: Spieler Status Score(wins/looses): x/x

           

von allen Spielern

 

  1. help

Schreibt help aus

 

 

 

  1. wait for game

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

 


  1. start game: Gegners Name

 

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.

 

  1. exit

 

Goodbye.

 

 


Server schreibt aus

 

      Sie sollen eingeben

 

 

 

Implementierung

 

 

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.                                                    

 

class ServerThread:  

 

class Protocol:  

 

class Player:  

 

class PlayerList:

 

class Game:  

 


 

 

 

Dokumentation für den Anwender

 

 

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.