Inhaltsverzeichnis

Rundenbasierter Gameserver mit REST-API

Die ganze Dokumentation findet sich mittlerweile auf https://github.com/JungleState/ksr_junglestate

1. Organisation & Ablauf

Alle Talenta/EF Schüler:innen gründen zusammen die Software-Firma CanopySoft Corp, um einen Game-Server zu realisieren. Die Lehrperson hat dabei zwei Rollen: einerseits vertritt sie die Auftraggeberin, die JungleState Inc, andererseits fungiert sie als Projekt-Coach.

Die Umsetzung folgt der Entwicklung in einer Software-Firma:

  1. Kick-off (1w):
    • Der Auftraggeber stellt das Projekt und die Requirements vor.
    • Die Projektgruppe definiert ihre Projektorganisation und erstellt ein Proposal.
    • Einreichung des Proposals inkl. Komponentenplanung und Zeitplan
  2. Implementierungsphase (5w)
    • Umsetzung gemäss Proposal
    • Alle Artefakte werden in Github abgelegt:
      • Quellcode
      • Dokumentation (als Markdown)
      • Issues (Implementierungseinheiten)
      • Milestones (jede Woche einer)
    • Nach jeder Woche erwartet die Auftraggeberin einen kurzen Email-Report mit folgendem Inhalt:
      • Projektfortschritt
      • Ist vs. Soll: Wo steht das Projekt im Vergleich zum Zeitplan?
      • Aufgewendete Zeit: Wieviel Zeit wurde für jede Komponente verwendet?
  3. Abgabe Projekt (3w)
    • Begutachtung durch Auftraggeber
    • Allfällige Gewährleistungsarbeiten
  4. Reflektion
    • Was hat gut funktioniert was nicht?
      • Organisation
      • Planung
      • Implementierung

2. Requirements

JungleState möchte einen Game-Server entwickeln lassen, der remote Clients in einem rundenbasierten Game gegeneinander spielen lässt. Die Requirements definieren die Vorgaben zum Spiel und zur gewählten Technologie.

2.1 Spielbeschrieb

Das Spiel besteht aus dem Urwald und Affen, die sich gegenseitig mit Kokosnüssen bewerfen.

2.1.1 Spielfeld

Der Urwald besteht aus einer zweidimensionalen Matrix mit diskreten Feldern. Jedes Feld kann durch einen eindeutigen Zustand beschrieben werden, zum Beispiel

2.1.2 Spielablauf

Jeder Affe erhält zu Beginn der Runde seinen einsehbaren Teilbereich des Urwalds. Dieser beträgt typischerweise 5×5 Felder um die Position des Affen. Der Affe entscheidet sich für eine Aktion, entweder MOVE oder THROW_COCONUT in einer der 8 Richtungen. Kokosnüsse fliegen nur ein Feld weit.

Wird ein Affe von einer Kokosnuss getroffen, wird seine Lebensenergie um eine bestimmte Menge verringert. Fällt die Lebensenergie eines Affen auf null, fällt er ohnmächtig vom Ast und scheidet aus1).

Kollidieren zwei Affen oder ein Affe und der Dickicht, verringert sich die Lebensenergie ebenfalls, die Affen bleiben auf ihrem Feld stehen.

Findet ein Affe eine Banane, wird die Lebensenergie erhöht. Gefundene Kokosnüsse erhöhen den Munitionsvorrat. Sowohl Lebensenergie als auch Kokosnussvorrat sind begrenzt.

2.1.3 Punkte, Spielende, Gewinn

Affen erhalten Punkte für gewisse Aktionen:

Das Spiel endet wenn weniger als zwei Affen übrig bleiben, oder nach einer definierten Zeit.

Gewinner ist der Affe mit den meisten Punkten. Eventuell könnte man den Gewinner auch nur aus den wachen Affen auswählen - allerdings schafft dies einen Anreiz, sich möglichst lange zu verstecken und am Schluss auf den letzten Überlebenden loszugehen…

2.2 Technische Vorgaben

Die Umsetzung folgt der Client-Server-Architektur.

2.2.1 Server

Der Server wird als REST-API definiert und implementiert. Das API soll mit der Anfangsanfrage mitgeliefert werden (HATEOS).

2.2.2 Client

Clients greifen ausschliesslich über das REST-API auf ein Spiel zu. Zum Lieferumfang gehören:

3. Proposal

Die Gruppe erarbeitet ein Proposal um die obigen Requirements umzusetzen. Das Proposal beinhaltet die folgenden zwei Teile:

Design

Das Design wird als Markdown-Dokument auf Github gestellt. Es beinhaltet:

Ausführungsplan

Die Umsetzung wird in kleinere Einheiten, sogenannte Tasks aufgeteilt, die in maximal einer Woche umsetzbar sein sollten. Für jede Woche wird in Github ein Milestone erstellt, und für jeden Task wird ein Github Issue erstellt. Zumindest für die ersten Wochen sollten die Tasks auf den passenden Milestone eingeteilt werden.

Gibt es Abhängigkeiten zwischen den Tasks? Wie gross sind die Tasks (1, 2, 3, 5 Stunden)?

Beispiel-Tasks:

Materialien

1)
Selbstverständlich erwachen alle ohnmächtige Affen nach dem Spielende ohne bleibende Schäden zu erleiden. Bei der Entwicklung dieses Spiels dürfen keine Tiere zu Schaden kommen!