All posts by Jörn Dreyer

Software Engineering I, WS1011

Das Ingame JSON Protokoll kennt, wie bereits aus dem Chatprotokoll bekannt, in Serverrichtung Commands und in Clientrichtung Events.

Commands

Die Commands müssen mindestens ein action Attribut enthalten welches folgende Werte annehmen kann (keys in Klammern sind optional):

Action Keys Beispiel Bemerkung
CHOOSE_SECTOR sector {"@action":"CHOOSE_SECTOR","properties":{"entry":{"key":"sector","value":"Sector@1a3b6f"}}} Wählt den Startsektor aus. sector muss eine ID sein.
START_GAME keiner {"@action":"START_GAME"} Startet das spiel wenn jeder Spieler einen Startsektor gewählt hat.
LEAVE_GAME keiner {"@action":"LEAVE_GAME"} Verlässt das aktuelle Spiel.
TRANSFER_MEN source, target, amount {"@action":"TRANSFER_MEN","properties":{"entry":{"key":"source","value":"Tower@1a3b6f"},"entry":{"key":"target","value":"Invention@b54ddf"},"entry":{"key":"amount","value":"12"}}} Transferiert amount Men von einem Ort zum anderen, solange es keine Armee betrifft. source und target erwarten die ID eines Towers, einer Invention oder einer Resouorce
CREATE_ARMY tower, amount, (weapon), (target) {"@action":"CREATE_ARMY","properties":{"entry":{"key":"tower","value":"Tower@1a3b6f"},"entry":{"key":"weapon","value":"Invention@b54ddf"},"entry":{"key":"amount","value":"12"},"entry":{"key":"target","value":"Sector@1a3b6f"}}} Erzeug mit amount men aus dem per ID angegebenen tower eine neue Army. Die Army wird mit der per ID angegebenen weapon ausgerüstet, wenn genügend waffen im tower verfügbar sind, oder erstellt werden können. Als target kommen per ID angegebene Turrets oder angrenzende Sectoren in Frage.
MOVE_ARMY army, target {"@action":"MOVE_ARMY","properties":{"entry":{"key":"army","value":"Army@d54a23"},"entry":{"key":"target","value":"Sector@1a3b6f"}}} Versetzt die army an das angegebene target, welches ein Tower oder ein Sector sein kann.
RESEARCH tower, invention {"@action":"RESEARCH","properties":{"entry":{"key":"tower","value":"Tower@123abc"},"entry":{"key":"invention","value":"Invention@f45a3b"}}} Erforscht die per ID angegebene invention im per ID angegebenen tower. Es wird ein Research-Objekt erzeugt, dem per TRANSFER_MEN noch Forscher zugewiesen werden müssen.
MESSAGE message, (audience), (recipient) {"@action":"MESSAGE","properties":{"entry":{"key":"message","value":"Hallo"},"entry":{"key":"audience","value":"USER"},"entry":{"key":"recipient","value":"jfd"}}} Siehe Chatprotokoll.

Weitere Commands werden folgen 😉

Events

Der Server schickt Events in der Form

{"@ts":"199027638079229","@src":"Player@1f8882e","@prop":"name","@nv":"jfd","@ov":"jdr"}

In diesem Fall wurde zum Timestamp 199027638079229 von der source Player@1f8882e die property name von jdr (old value) auf jfd (new value) geändert.
Wer sich die Events vom Server genauer anschaut wird feststellen, dass Werte die null sind in JSON wegoptimiert werden.

Tipp: Das nötige Datenmodell lässt sich größtenteils aus dem Eventstream ableiten.

Software Engineering I, WS1011

Das Lobby Chat Protokoll wird in der Online Hilfe des MLM Servers beschrieben. Allerdings wechselt das Protokoll nach einem JOIN GAME in einen JSON Dialekt. Um dort Nachrichten zu verschicken müssen die Nachrichten folgendermaßen formatiert sein:
{"@action":"MESSAGE","properties":{"entry":{"key":"message","value":"Hallo"},"entry":{"key":"audience","value":"USER"},"entry":{"key":"recipient","value":"jfd"}}} oder
{"@action":"MESSAGE","properties":{"entry":{"key":"message","value":"Hi"}}}

  • Die action die ausgeführt werden soll heißt MESSAGE
  • In den properties muss mindestens ein key value Paar für message enthalten sein
  • Optional: ein key value Paar für audience (ALL, USER oder TEAM) und recipient für den nickname des Users bzw den Teamnamen.

Nachrichten ohne recipient bzw. an ALL werden an alle Spieler im aktuellen Spiel / in der Lobby gesendet. An User oder Teams adressierte Chatnachrichten werden immer zugestellt, d.h. es ist möglich aus der Lobby mit MSG USER fred "Wie läufts?" mit dem User fred in Kontakt zu treten, obwohl er sich in einem Spiel befindet.

Software Engineering I, WS1011

Der Server spricht generell ein zeilenbasiertes String Protokoll. Daher kann man eine telnet Verbindung benutzen um das Protokoll zu erkunden. Nach dem öffnen einer Konsole und der Eingabe von
telnet se1.cs.uni-kassel.de 4000
kann man mit HELP eine Liste aller verfügbaren Befehle abrufen.
Besonders hervorzuheben sind

  • REGISTER USER <username> <email> <password> um neue Benutzer zu registrieren,
  • LOGIN <username> <password> um sich einzuloggen,
  • LIST GAMES um eine Liste der Spiele abzurufen und
  • JOIN GAME <gamename> um einem Spiel beizutreten.

Um einen Timeout zu vermeiden sollte vom Client in regelmäßigen abständen ein NOOP geschickt werden.

Jedes erfolgreiche Kommando wird vom Server mit einem OK beendet. Fehler werden mit einer Zeile beantwortet die mit ERROR beginnt.

Nach einem erfolgreichen JOIN GAME Kommando das mit OK bestätigt wurde wechselt der Server in ein JSON basiertes Protokoll, bei dem er JSON codierte Events verschickt und JSON codierte Commands erwartet.

Eine liste der möglichen Commands und ihrer Properties wird später an dieser Stelle nachgereicht…

Software Engineering I, WS0910

Light and Shadow

Auf SE-Island leben die Programmierer ein friedliches Leben. Sie bestellen das Land und gehen fischen um sich mit dem Nötigsten zu versorgen. Und wenn es mal etwas zu bauen gibt wissen sie auch mit Holz und Steinen umzugehen. Aber die Götter sind gelangweilt von all der Harmonie und fassen den Entschluss einen Wettkampf unter den Programmierern zu veranstalten. Nachdem sie neue Programmiersprachen mit allerlei Firlefanz erschaffen hatten um unter den Programmierern einen Wettbewerb auzulösen stürzten sich die Programmierer mit Freuden auf die neuen Möglichkeiten. Allerdings schlugen Neugier und Freude schnell in blinden Glauben und Fanatismus um, der schließlich auch die Götter erfasste. Sie zersplitterten in kleine Gruppen die einer Programmiersprache huldigten als sei sie eine Religion und versuchen seither die Schar ihrer Gläubigen auf ganz SE-Island zu vergrößern.

Das Land

In der Welt von SE-Island gibt es zehn Hauptstädte und zehn Dörfer, von denen jeweils zwei in der Nähe einer Hauptstadt liegen. Die Küsten sind reich an Fisch und die Äcker warten nur darauf bestellt zu werden. Holz und Stein finden sich ebenso reichhaltig, allerdings ist der Tiefere Wald bisher verschlossen geblieben.

Light and Shadow
Light and Shadow

Rot = Hauptstädte, Schwarz = Dörfer, Weiß = SE-Hauptstädte

Die Programmierer

Jeder Programmierer kann in jedem der verfügbaren Gebäude mitarbeiten und so indirekt zur Blüte seiner Religion beitragen. Wenn er auf den Rathausplatz eines andersgläubigen Dorfes geschickt wird, wird er zum Missionar um direkt die Bewohner des Dorfes vom Glauben an seine – die wahre – Programmiersprache zu überzeugen. Jeder Programmierer beginnt sein Leben im Stadtzentrum oder Wohnhaus und kann nur durch eine Hungersnot verenden.

Die Religion / Programmiersprache

Jede Siedlung glaubt an genau eine Religion, die ihr Verhalten bestimmt und der auch das gewonnene Mana zugute kommet. Welchen Geboten die Gläubigen nacheifern geben die Götter (in Form von Javaquellcode für eine KI) durch die Religion vor.

Die Siedlungen

Zu jeder Siedlung gehören neben dem Stadtzentrum ein Rathausplatz, auf dem sich die Programmierer versammeln, ein Friedhof und alle sich in der Nähe  befindenden Gebäude. Welche Gebäude die Bewohner errichten richtet sich nach ihrem Glauben (also der KI). Die Hauptstädte der Religionen sind Hochburgen fanatischen Glaubens und können nicht bekehrt werden. Dörfer hingegen können durch das Entsenden von Missionaren bekehrt werden. Sobald ein Dorf bekehrt wird, also eine kritische Masse an Glauben erzeugt wurde, verfallen alle Programmierer dem Hype: das Dorf und alle Arbeiter wechseln komplett zur neuen Programmiersprache.

Die Gebäude

Um Ressourcen abzubauen müssen Gebäude gebaut werden, die mit steigender Anzahl an Arbeitern auch entsprechend produktiver werden. Je weiter sie vom Dorfzentrum entfernt sind, desto langsamer ist die Produktion.

Die Ressourcen

Bevor Ressourcen abgebaut werden können muss erst ein Entsprechendes Produktionsgebäude errichtet werden. Die wenigsten Gebäude kommen ohne Versorgung mit anderen Ressourcen aus.

Die Götter

Die Götter können direkt auf die Spielwelt Einfluss nehmen, indem sie Wunder wirken und so ihren Gläubigen im richtigen Moment Vorteile verschaffen, oder Andersgläubigen benachteiligen. Jedes Wunder zeugt auch von der Wirkenskraft einer Religion und bewirkt einen kleinen Glaubenszuwachs in der betroffenen Region. Sie versuchen durch ihr aktives (Missionieren / Unterstützen durch Wunder) und passives (Steuerung der Gläubigen durch eine KI) Wirken ihren Glauben – die einzig wahre Programmiersprache  – zu verbreiten und die Zahl ihrer Programmierer zu vermehren. Durch ihr Wirken können die Götter Trophäen erhalten (die zwar nicht mit in die Notengebung mit einfließen, aber zeigen wie gut sich die Götter schlagen).

Spielmechanik

  • Die 5 Anfangsarbeiter können nicht sterben
  • Siedlungen: 6 Hauptstädte, 14 Dörfer, 3 SE-Städte
  • Stadteinzugsgebiet: je Feld Entfernung zum Stadtzentrum 10% längere Produktionszeit
  • Hauptstädte können nicht übernommen werden
  • Arbeiter Sterben wenn zu wenig Nahrung in ihrer Heimatsiedlung vorhanden ist (1:1 Verhältnis)
  • In Wohnhäusern gebohrene Arbeiter gehen auf den Rathausplatz
  • Der Rathausplatz ist ein Feld neben dem Dorfzentrum
  • Die Götter teilen sich das Mana ihrer Religion / Programmiersprache
  • Arbeiter bewegen sich ein Feld pro Sekunde, kommen aber erst nach der Produktion an
  • Arbeiter die auf einem Rathausplatz stehen verbreiten dort den Glauben ihrer Heimatsiedlung.
  • Arbeiter gehören ihr leben Lang zu der Siedlung in der sie gebohren wurden.
Produktionsgebäude:
Gebäude Kosten Anzahl Zeiteinheiten für den Bau
Verbrauch : Produktion / je Arbeiter
Anzahl Arbeiter
Anzahl Zeiteinheiten pro Produktionszyklus
ID
Holzfäller 50 Nahrung 400 0 : 1 Holz 8 300 3
Fischerhütte 40 Holz 250 0 : 2 Nahrung 5 200 2
Farm 120 Holz + 30 Nahrung 800 1 Holz : 5 Nahrung 10 200 4
Steinbruch 100 Nahrung + 80 Holz 1500 4 Nahrung + 2 Holz : 1 Stein 15 1000 5
Tempel 200 Stein + 250 Holz 10000 10 Nahrung : 25 Glauben 50 2000 6
Wohnhaus (klein)
200 Holz 500 20 Nahrung : 1 Arbeiter 6 10000 8
Wohnhaus (mittel) 1000 Holz + 500 Stein 1000 20 Nahrung : 1 Arbeiter 6 5000 9
Wohnhaus (gross) 4000 Holz + 2500 Stein 2000 20 Nahrung : 1 Arbeiter 6 1000 10
Blauer Topf der blubbert 700 Stein + 1100 Holz + 2000 Nahrung 500 1 Arbeiter : 500 Mana 25 700 7
Stadtzentrum not buildable 0 : 1 Nahrung + 10 Mana 5 500 1
Rathaus not buildable 0 : 1 Glaube pro Owner das Arbeiters unendlich 400 100
Friedhof not buildable -1 Nahrung x Arbeiter der Stadt *** 400 666
*** Wenn keine Nahrung für Arbeiter vorhanden ist, wird pro fehlende Nahrung ein ZUFÄLLIGER Arbeiter der Stadt getötet!!!
Anfangssituation

1 Hauptstadt mit Rathausplatz, Friedhof und 5 Arbeitern in der Hauptstadt

ES GIBT KEINE STARTRESOURCEN!!!

Die Wunder
Wunder Effekt Dauer Kosten Aufladbar Zauber ID Effekt ID
Nahrungswunder + 1 Nahrung Instant 60 Mana ja 1
Ausräuchern 1 Produktionsfeld wird geräumt. Arbeiter werden zum Rathaus geschickt. 3 Produktionszyklen keine Produktion möglich 3 Produktionszyklen 15000 Mana nein 2 7
Meteorit Zerstört alle Gebäude und Arbeiter im Umkreis von 2 Feldern. Ausnahme sind Dorfplatz, Rathaus, Friedhof! Instant 3000000 Mana nein 3
Arbeiter aus Übersee + 1 Arbeiter auf dem Rathausplatz Instant 5000 Mana ja 4
Eiszeit Zeit für die Bewegung aller Arbeiter des Dorfes *100 6 std 1000000 Mana nein 5 9
Wirbelsturm Arbeiter können das Produktionsgebäude (+ Umkeis von 3 Felden) nicht verlassen/betreten. 6 std 5000000 Mana nein 6 10
Schutzschild Schützt vor allen Zaubern ab Anwendung (+ Umkreis von 5 Feldern) 0,5 std 300000 Mana nein 7 11
Die Trophäen
Bedingung Titel
Die meisten Arbeiter Brüter
Am meisten Holz produziert
Am meisten Nahrung produziert
Am meisten Stein produziert
Am meisten Mana produziert
Am meisten Arbeiter produziert
Am meisten Glauben produziert
Am meisten Zauer gesprochen
Am meisten Städte bekehrt
100000 Holz produziert Holzwurm I
200000 Holz produziert Holzwurm II
300000 Holz produziert Holzwurm III
500000 Holz produziert Holzwurm IV
800000 Holz produziert Holzwurm V
1300000 Holz produziert Holzwurm VI
2100000 Holz produziert Holzwurm VII
3400000 Holz produziert Holzwurm VIII
5500000 Holz produziert Holzwurm IX
8900000 Holz produziert Holzwurm X
1000000 Nahrung produziert Hamster I
2000000 Nahrung produziert Hamster II
3000000 Nahrung produziert Hamster III
5000000 Nahrung produziert Hamster IV
8000000 Nahrung produziert Hamster V
13000000 Nahrung produziert Hamster VI
21000000 Nahrung produziert Hamster VII
34000000 Nahrung produziert Hamster VIII
55000000 Nahrung produziert Hamster IX
89000000 Nahrung produziert Hamster X
1000 Stein produziert Bomberman I
2000 Stein produziert Bomberman II
3000 Stein produziert Bomberman III
5000 Stein produziert Bomberman IV
8000 Stein produziert Bomberman V
13000 Stein produziert Bomberman VI
21000 Stein produziert Bomberman VII
34000 Stein produziert Bomberman VIII
55000 Stein produziert Bomberman IX
89000 Stein produziert Bomberman X
1000000 Mana produziert Kanalisierer I
2000000 Mana produziert Kanalisierer II
3000000 Mana produziert Kanalisierer III
5000000 Mana produziert Kanalisierer IV
8000000 Mana produziert Kanalisierer V
13000000 Mana produziert Kanalisierer VI
21000000 Mana produziert Kanalisierer VII
34000000 Mana produziert Kanalisierer VIII
55000000 Mana produziert Kanalisierer IX
89000000 Mana produziert Kanalisierer X
1000 Glauben produziert Die reine Lehre I
2000 Glauben produziert Die reine Lehre II
3000 Glauben produziert Die reine Lehre III
5000 Glauben produziert Die reine Lehre IV
8000 Glauben produziert Die reine Lehre V
13000 Glauben produziert Die reine Lehre VI
21000 Glauben produziert Die reine Lehre VII
34000 Glauben produziert Die reine Lehre VIII
55000 Glauben produziert Die reine Lehre IX
89000 Glauben produziert Die reine Lehre X
1 Siedlung übernommen Bekehrer I
2 Siedlungen übernommen Bekehrer II
3 Siedlungen übernommen Bekehrer III
5 Siedlungen übernommen Bekehrer IV
8 Siedlungen übernommen Bekehrer V
13 Siedlungen übernommen Bekehrer VI
21 Siedlungen übernommen Bekehrer VII
34 Siedlungen übernommen Bekehrer VIII
55 Siedlungen übernommen Bekehrer IX
89 Siedlungen übernommen Bekehrer X
10 Zauber gesprochen Gandalf I
20 Zauber gesprochen Gandalf II
30 Zauber gesprochen Gandalf III
50 Zauber gesprochen Gandalf IV
80 Zauber gesprochen Gandalf V
130 Zauber gesprochen Gandalf VI
210 Zauber gesprochen Gandalf VII
340 Zauber gesprochen Gandalf VIII
550 Zauber gesprochen Gandalf IX
890 Zauber gesprochen Gandalf X
Software Engineering I, WS0910

Da das erste Release ansteht, eine kurze Info zu den Terminen:

  • In der letzten Woche des Releases trifft sich der Product Owner der ersten Releases mit den Kunden, aktualisiert das Product Backlog und erstellt mit dem Kunden das neue Release Backlog.
  • In der ersten Woche des neuen Releases präsentieren der alte Product Owner und der alte Scrum Master den Kunden das fertig gestellte Release.
    • Präsentation mit Installation auf einem Kundenrechner.
    • Alle Teammitglieder sollten anwesend sein.
    • Betreuer und Kunden werden anwesend sein und sich Notizen zur Bewertung des Vortrags machen.

Bitte nehmt Kontakt mit euren Kunden auf und vereinbart entsprechende Termine.

Des weiteren gilt die Releasepräsentation als Offizielle Übergabe der Product Owner und Scrum Master Rollen.