Kommunikations Protokoll
Das Kommunikations-Protokoll:
- Initialisierug
- S>C: (Nachdem C connectet hat) Benachrichtigung schicken:
ok(Bitte einen Nick eingeben mit nick(Nick))
- C>S:
nick(Nick)
Mit einem Nicknamen beim Server anmelden
- S>C: Falls Befehl akzeptiert wurde:
ok(Du heißt jetzt: Nick)
- S>C: Falls Befehl akzeptiert wurde:
ok(Du kannst dich mit init(mrjack) oder init(detektiv) an einem Spiel beteiligen)
- C>S: Zuordnung der Spielerrolle:
init(Spieler)
(siehe Terminologie)
- S>C: Falls Befehl akzeptiert wurde:
ok(Du bist Spieler)
- S>C: Falls nicht mrjack oder detektiv angeben wird:
err(Spieler ist unbekannt: Spieler)
- S>C: Falls der gewünschte Spieler schon vergeben ist:
err(Spieler schon vergeben: Spieler)
- S>C: Falls der Spieler bereits initialisiert ist:
err(Sie sind schon identifiziert als: Spieler)
- Spielbeginn
- S>D: Spielbeginn bekannt geben:
beginn(spiel, detektiv)
- S>J: Spielbeginn bekannt geben:
beginn(spiel, mrjack)
- S>J: Wer ist Mr. Jack bekannt geben:
jack(Farbe)
(siehe Terminologie)
- Rundenbeginn
- S>CC: Rundenbeginn bekannt geben:
beginn(runde)
- Spielzugbeginn
- S>CC: Spielzugbeginn bekannt geben:
beginn(spielzug)
- S>CC: Auswahl der Figuren bekannt geben, welche im Spielzug verwendbar sind (Liste von Listen):
auswahl([[Farbe1,Bool1],[Farbe2,Bool2],[Farbe3,Bool3],[Farbe4,Bool4]])
(siehe Terminologie)
- S>C: Spielzugerlaubnis erteilen:
spielzugerlaubnis(ja)
- C>S: aktive Spielfigur:
aktiv(Farbe)
- S>C: Falls Farbe akzeptiert wurde:
ok(Farbe ist aktiv: Farbe)
- S>C: Falls er nicht dran ist:
err(Du bist nicht dran.)
- S>C: Falls keine bekannte Farbe geschickt wurde:
err(Farbe ist unbekannt: Farbe)
- Teilzugbeginn
- C>S: gewünschte Aktion mitteilen:
aktion(Aktion)
(siehe Terminologie)
- S>C: Falls Aktion akzeptiert wurde:
ok(Aktion wurde akzeptiert)
- S>C: Falls er nicht dran ist:
err(Du bist nicht dran)
- S>C: Falls keine gültige Aktion geschickt wurde:
err(Aktion ist ungültig: Aktion)
- S>C: über mögliche Koordinaten informieren:
moeglichkeiten([Koordinate, ...])
(Liste von Koordinaten, siehe Terminologie)
- C>S: Zielkoordinate übermitteln (dort will ich mich hin bewegen / dort ein Haus bauen / diese Person will ich vertauschen...):
ziel(Koordinate)
- S>C: Falls akzeptiert wurde:
ok(Koordinate akzeptiert)
- S>C: Falls er nicht dran ist:
err(Du bist nicht dran)
- S>C: Falls keine bekannte Koordinate geschickt wurde:
err(Koordinate ist unbekannt: Koordinate)
- bei einigen Spezialfähigkeiten werden die beiden vorangegangenen Punkte wiederholt bis Teilzugende (vom Server) übergeben wird (Gebraucht wird das bspw. zwei weitere Male beim Versetzen der Absperrung)
- S>C:
update_Alibi(Figur)
Wenn ein Spieler den Spion befragt, bekommt (nur) dieser Spieler eine der Figuren angegeben, die nicht mrjack ist
- S>C:
update_Spion(Koordinate)
Der Spion wird auf ein neues Feld versetzt
- Teilzugende
- S>CC: gesetzte Figuren updaten:
update_Figur(Koordinate,Figur)
(alle Updates müssen pro geändertes Feld einmal geschickt werden) (siehe Terminologie)
- S>CC: gesetzte Bauten updaten:
update_Art(Koordinate, Art)
Auf welcher Koordinate wurde ein Haus gebaut
- S>CC: gesetzte Schiffe updaten:
update_Schiff(Koordinate,Koordinate)
Ein Schiff wird von irgendwo, nach irgendwo hin bewegt
- S>CC: Absperrungen updaten:
update_Absp(Koordinate, Koordinate, Koordinate, Koordinate)
Eine Absperrung wird von ihren beiden Ursprungskoordinaten zu den neuen Koordinaten bewegt
- anderer Teilzug (optional) (anderer heisst: die andere Aktion)
- Spielzugende
- S>C: Spielzugerlaubnis entziehen:
spielzugerlaubnis(nein)
- S>CC:
ende(spielzug)
- neuer Spielzug (max. 4x)
- Rundenende
- S>CC:
sichtbar(Bool)
(siehe Terminologie)
- optional und mehrere Verdächtigungen: Markieren / Verdächtigen von Figuren
- D>S:
ziel(Koordinate)
Angabe einer Koordinate, auf der man eine Personen verdächtigt, bzw. eine verdächtige Person nicht mehr verdächtigt
- S>C: Falls er nicht dran ist:
err(Du bist nicht dran.)
- S>C: Falls ungültige Koordinaten geschickt wurde:
err(Enthält ungültige Koordinaten)
- S>C: Falls er nicht mrjack ist:
err(Nur der Detektiv darf verdächtigen)
- S>CC: (Un-)Verdächtige updaten:
update_Verdacht(Figur)
Wenn eine Figur verdächtig war, ist sie nun unverdächtig, wenn unverdächtig, ist sie nun verdächtig
- D>S:
fertig
Der Detektiv ist fertig mit verdächtigen
- S>CC:
ende(runde)
- neue Runde (max. 8x)
- Spielende
- S>CC: Beide Spieler kriegen das Spielende mitgeteilt, wer der Sieger ist und welche Farbe mrjack hatte:
ende(spiel,Sieger,Farbe)
- Als Antwort auf eine Anfrage eines Clients:
- S>C: Die Client-Anfrage kann vom Server nicht verarbeitet werden:
err(Unbekannter Befehl oder Befehl zur Zeit nicht möglich: Befehl)
- S>C: Die Client-Anfrage hat bei der Spielelogik einen Error erzeugt (dürfte nicht bei Gui-Steuerung passieren, nur wenn über die Konsole gespielt wird):
err(...)
- Jederzeit:
- C>S:
aufgeben
Dieser Client gibt auf, woraufhin der Server dem anderen Client den Sieg mitteilt (siehe Spielende)
- C>S:
chat(Text)
sendet eine Chat-Nachricht an den Server, die dieser an den anderen Mitspieler weiterleitet
- S>C:
chat(Text)
- C>S:
quit
Der Client meldet sich vom Server ab, der Socket, und damit auch Nickname, wird wieder freigegeben (bei einem laufenden Spiel passiert das Gleiche, wie wenn aufgeben geschickt wird)
- S>C:
ison
Eine Liste der Spieler, die sich am Server angemeldet haben
Verwendete Terminologie:
- C>S: Client zu Server
- S>C: Server zu Client
- S>J: Server zu Mr. Jack-Client
- S>D: Server zu Detektiv-Client
- J>S: Mr. Jack zu Server
- D>S: Detektiv zu Server
- S>CC: Server zu allen Clients
- Die Befehle
ok(...)
und err(...)
sind nur Konsoleninfos, sodass das Spiel auch per Konsole gespielen werden kann. Sie werden NICHT an die Gui weitergegeben! Daher sind diese Zeilen im Protokoll kursiv geschrieben.
-
Farbe
(Figuren): =rot
| gelb
| braun
| gruen
| beige
| schwarz
| lila
| weiss
-
Aktion
: bewegen
| faehigkeit
| skip
-
Art
: haus
| park
| metro
| laterne
-
Bool
: ja
| nein
-
Sieger
: Spieler
-
Spieler
: mrjack
| detektiv
-
Koordinate
: a1
| a2
| b1
| ... (siehe Bild)
- Runde
- das wo die Sanduhr nach oben geschoben wird
- besteht aus 4 Spielzügen
- Spielzug
- besteht aus 1 oder 2 Teilzügen (je nach Figur)
- der zweite Teilzug kann bei einigen Figuren übersprungen werden (
skip
)
- Teilzug
- besteht aus einer Aktion und Zielkoordinaten
- Aktion
- Bewegung oder Spezialfähigkeit
Schnittstellen:
Alle Befehle werden als Terme an die Schnittstellen übergeben.
Die Server- und Clientschnittstellen wandeln die Terme dann in Atome um, damit diese über Sockets verschickt werden können.
- Serverschnittstelle
-
put_j(+Strukur).
Befehl an Mr. Jack
-
put_d(+Strukur).
Befehl an den Detektiv
-
put_cc(+Struktur).
Befehl an beide Spieler
-
put_c(+Spieler,+Struktur).
Befehl an einen ausgewählten Spieler (siehe Terminologie)
-
put_erlaubnis(+Spieler,+Bool).
Einem Spieler eine Spielzugerlaubnis erteilen / entziehen
-
put_err(+Spieler,+Atom).
Schickt eine Fehlermeldung an den Spieler
-
put_ende(+Sieger).
Beendet das Spiel und gibt den Sieger bekannt
- Clientschnittstelle
-
put_serv(+Struktur).
Befehl an den Server
- Spiellogikschnittstelle
-
schnittstelle_logik(+Struktur)
- Guischnittstelle
-
schnittstelle_gui(+Struktur)
- Chatschnittstelle
-
schnittstelle_chat(+Struktur)
--
MaxBlochberger --
23 Feb 2011