Software-Challenge Dokumentation

XML-Elemente des Spiels Hase und Igel

Diese Dokumentation beschreibt die spielspezifischen Elemente des XML-Protokolls für das Spiel Hase und Igel.

Spielstatus

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>

Spiel betreten ohne Reservierungscode

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.

Spielzug

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.

Spielergebnis

<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>
XML-Dokumentation