Diese Dokumentation beschreibt die spielspezifischen Elemente des XML-Protokolls
für das Spiel Hase und Igel.
Die folgende XML-Struktur beschreibt den regelmäßig mitgeteilten Spielstatus,
der ein Spielfeld aus Feldern, die in einer Spirale angeordnet sind,
sowie die darauf verorteten Spieler enthält.
Die Felder werden implizit nummeriert,
wobei das erste Feld (START) den index 0 erhält.
< room roomId = "ROOM_ID" >
< data class = "memento" >
< state class = "state" startTeam = "ONE" turn = "0" >
< board >
< field >START</ field >
< field >CARROTS</ field >
< field >SALAD</ field >
< field >POSITION_1</ field >
< field >POSITION_2</ field >
< field >HEDGEHOG</ field >
< field >MARKET</ field >
< field >HARE</ field >
...
< field >GOAL</ field >
</ board >
< hare team = "ONE" position = "1" salads = "5" carrots = "68" >
< lastAction class = "advance" distance = "1" />
< cards />
</ hare >
< hare team = "TWO" position = "2" salads = "5" carrots = "68" >
< lastAction class = "advance" distance = "2" />
< cards />
</ hare >
< lastMove class = "advance" distance = "2" />
</ state >
</ data >
</ room >
Betritt ein beliebiges offenes Spiel:
< join gameType = "swc_2025_hase_und_igel" />
Sollte kein Spiel offen sein, wird so ein neues erstellt.
Je nachdem ob paused
in server.properties
true oder false ist,
wird das Spiel pausiert gestartet oder nicht.
Folgende Arten von Zügen sind möglich:
< room roomId = "ROOM_ID" >
< data class = "fallback" />
</ room >
< room roomId = "ROOM_ID" >
< data class = "eatsalad" />
</ room >
< room roomId = "ROOM_ID" >
< data class = "exchangecarrots" amount = "-10" />
</ room >
< room roomId = "ROOM_ID" >
< data class = "advance" distance = "3" />
</ room >
< room roomId = "ROOM_ID" >
< data class = "advance" distance = "5" >
< card >HURRY_AHEAD</ card >
< card >FALL_BACK</ card >
< card >EAT_SALAD</ card >
</ advance >
</ room >
Für einen Vorwärtszug können Karten angegeben werden,
die in der gegebenen Reihenfolge ausgespielt werden.
Falls die einzige oder letzte Karte auf einem Marktfeld angegeben wird,
wird diese Karte stattdessen gekauft.
< room roomId = "ROOM_ID" >
< data class = "result" >
< definition >
< fragment name = "Siegpunkte" >
< aggregation >SUM</ aggregation >
< relevantForRanking >true</ relevantForRanking >
</ fragment >
< fragment name = "Feldnummer" >
< aggregation >AVERAGE</ aggregation >
< relevantForRanking >true</ relevantForRanking >
</ fragment >
< fragment name = "Karotten" >
< aggregation >AVERAGE</ aggregation >
< relevantForRanking >true</ relevantForRanking >
</ fragment >
</ definition >
< scores >
< entry >
< player name = "Spieler 1" team = "ONE" />
< score >
< part >0</ part >
< part >0</ part >
< part >0</ part >
</ score >
</ entry >
< entry >
< player name = "Spieler 2" team = "TWO" />
< score >
< part >2</ part >
< part >63</ part >
< part >0</ part >
</ score >
</ entry >
</ scores >
< winner team = "TWO" regular = "true" reason = "Spieler 2 ist weiter vorne." />
</ data >
</ room >