|
| 1 | +--- |
| 2 | +name: XML Dokumentation |
| 3 | +permaid: xml |
| 4 | +--- |
| 5 | + |
| 6 | +# XML-Elemente des Spiels Piranhas |
| 7 | + |
| 8 | +Diese Dokumentation beschreibt die spielspezifischen Elemente des [XML-Protokolls](/xml/protokoll) |
| 9 | +für das Spiel Piranhas. |
| 10 | + |
| 11 | +## Spielstatus |
| 12 | + |
| 13 | +Die folgende XML-Struktur beschreibt den regelmäßig mitgeteilten Spielstatus. |
| 14 | +Gesendet wird diese Nachricht immer dann, wenn sich was am Spielfeld ändert, |
| 15 | +d.h. wenn ein Spieler einen Zug gespielt hat. |
| 16 | + |
| 17 | +Ein Status enthält das aktuelle Spielfeld und den zuletzt gespielten Zug. |
| 18 | +Das Spielbrett ist ein 2-Dimensionales Grid an Feldern, |
| 19 | +mit dem Koordinatenursprung (0 , 0) unten links in der Ecke. |
| 20 | +Entsprechend überträgt der Server das Spielfeld aufgeteilt |
| 21 | +in die einzelnen Reihen und beginnt dabei mit der untersten Reihe. |
| 22 | +Die Reihen werden von links nach rechts beschrieben. |
| 23 | +Der zuletzt im Spiel gespielte Zug `lastMove` ist wie ein gewöhnlicher |
| 24 | +[Zug](/spiele/26_piranhas/xml#zug-senden) aufgebaut. |
| 25 | + |
| 26 | +```xml |
| 27 | +<room roomId="ROOM_ID"> |
| 28 | + <data class="memento"> |
| 29 | + <state class="state" startTeam="ONE" turn="19"> |
| 30 | + <lastMove> |
| 31 | + <from x="7" y="6"/> |
| 32 | + <direction>UP_RIGHT</direction> |
| 33 | + </lastMove> |
| 34 | + <board> |
| 35 | + <row> |
| 36 | + <field>TWO_S</field> |
| 37 | + <field>TWO_S</field> |
| 38 | + <field>TWO_S</field> |
| 39 | + <field>EMPTY</field> |
| 40 | + <field>EMPTY</field> |
| 41 | + <field>EMPTY</field> |
| 42 | + <field>EMPTY</field> |
| 43 | + <field>TWO_L</field> |
| 44 | + <field>TWO_M</field> |
| 45 | + <field>EMPTY</field> |
| 46 | + </row> |
| 47 | + <row> |
| 48 | + <field>ONE_S</field> |
| 49 | + <field>EMPTY</field> |
| 50 | + <field>EMPTY</field> |
| 51 | + <field>EMPTY</field> |
| 52 | + <field>SQUID</field> |
| 53 | + <field>EMPTY</field> |
| 54 | + <field>EMPTY</field> |
| 55 | + <field>ONE_M</field> |
| 56 | + <field>EMPTY</field> |
| 57 | + <field>EMPTY</field> |
| 58 | + </row> |
| 59 | + ... |
| 60 | + <row> |
| 61 | + <field>EMPTY</field> |
| 62 | + <field>TWO_M</field> |
| 63 | + ... |
| 64 | + <field>TWO_M</field> |
| 65 | + <field>EMPTY</field> |
| 66 | + </row> |
| 67 | + </board> |
| 68 | + </state> |
| 69 | + </data> |
| 70 | +</room> |
| 71 | +``` |
| 72 | + |
| 73 | +### Felder |
| 74 | + |
| 75 | +Die Felder werden wie folgt codiert: |
| 76 | + |
| 77 | +- Leeres Feld: `EMPTY` |
| 78 | +- Krakenfeld: `SQUID` |
| 79 | +- Feld mit Fisch: `TEAM_GRÖßE` (z.B. `ONE_S` für den kleinen Fisch des Spielers 1, meist Rot) |
| 80 | + - wobei TEAM `ONE` oder `TWO` ist |
| 81 | + - und GRÖßE `S`, `M` oder `L` ist, der Größe des Fisches |
| 82 | + |
| 83 | +## Spiel betreten ohne Reservierungscode |
| 84 | + |
| 85 | +Betritt ein beliebiges offenes Spiel: |
| 86 | + |
| 87 | +```xml |
| 88 | +<join gameType="swc_2026_piranhas"/> |
| 89 | +``` |
| 90 | + |
| 91 | +Sollte kein Spiel offen sein, wird so ein neues erstellt. |
| 92 | +Je nachdem ob `paused` in `server.properties` true oder false ist, |
| 93 | +wird das Spiel pausiert gestartet oder nicht. |
| 94 | + |
| 95 | +## Spielzug |
| 96 | + |
| 97 | +### Aufforderung |
| 98 | + |
| 99 | +Wenn der eigene Client am Zug ist, folgt nach dem Spielstatus diese |
| 100 | +Aufforderung, dass der Server einen Zug erwartet: |
| 101 | + |
| 102 | +```xml |
| 103 | +<room roomId="ROOM_ID"> |
| 104 | + <data class="moveRequest"/> |
| 105 | +</room> |
| 106 | +``` |
| 107 | + |
| 108 | +### Zug senden |
| 109 | + |
| 110 | +Ein Zug im Spiel Pirnhas besteht immer aus einer Startposition, |
| 111 | +auf dem ein Fisch des eigenen Teams liegen muss |
| 112 | +und einer Richtung, in welcher sich dieser Fisch bewegen soll: |
| 113 | + |
| 114 | +```xml |
| 115 | +<room roomId="ROOM_ID"> |
| 116 | + <data class="move"> |
| 117 | + <from x="9" y="3"/> |
| 118 | + <direction>LEFT</direction> |
| 119 | + </data> |
| 120 | +</room> |
| 121 | +``` |
| 122 | + |
| 123 | +Die Richtung ist codiert als einer der folgenden acht Optionen: |
| 124 | + |
| 125 | +`UP` `UP_RIGHT` `RIGHT` `DOWN_RIGHT` `DOWN` `DOWN_LEFT` `LEFT` `UP_LEFT` |
| 126 | + |
| 127 | +## Spielergebnis |
| 128 | + |
| 129 | +Wenn das Spiel vorbei ist, erhalten die Clients das Ergebnis der Partie: |
| 130 | + |
| 131 | +```xml |
| 132 | +<room roomId="ROOM_ID"> |
| 133 | + <data class="result"> |
| 134 | + <definition> |
| 135 | + <fragment name="Siegpunkte"> |
| 136 | + <aggregation>SUM</aggregation> |
| 137 | + <relevantForRanking>true</relevantForRanking> |
| 138 | + </fragment> |
| 139 | + <fragment name="Schwarmgr..e"> |
| 140 | + <aggregation>AVERAGE</aggregation> |
| 141 | + <relevantForRanking>true</relevantForRanking> |
| 142 | + </fragment> |
| 143 | + </definition> |
| 144 | + <scores> |
| 145 | + <entry> |
| 146 | + <player name="Spieler 1" team="ONE"/> |
| 147 | + <score> |
| 148 | + <part>0</part> |
| 149 | + <part>2</part> |
| 150 | + </score> |
| 151 | + </entry> |
| 152 | + <entry> |
| 153 | + <player name="Spieler 2" team="TWO"/> |
| 154 | + <score> |
| 155 | + <part>2</part> |
| 156 | + <part>5</part> |
| 157 | + </score> |
| 158 | + </entry> |
| 159 | + </scores> |
| 160 | + <winner team="TWO" regular="true" reason="Spieler 2 hat den groesseren zusammenhaengenden Schwarm"/> |
| 161 | + </data> |
| 162 | +</room> |
| 163 | +``` |
| 164 | + |
| 165 | +Unter `scores` werden jeweils die beiden Spieler mit den erreichten Punkten aufgezählt. |
| 166 | +Was genau die Werte in `part` bedeuten, steht in der `definition`. |
| 167 | +Für Piranhas ist das die Anzahl der Siegpunkte, |
| 168 | +die im Wettkampfsystem angerechnet werden |
| 169 | +und die am Ende des Spiel erreichte Schwarmgröße. |
| 170 | + |
| 171 | +In diesem Beispiel sieht man, dass Spieler 2 mit einer Schwarmgröße von 5 diese Runde gewonnen hat. |
| 172 | + |
| 173 | +Bei einem Unentschieden erhalten beide Spieler jeweils einen Siegpunkt und der `winner`-Tag führt kein Team: |
| 174 | + |
| 175 | +```xml |
| 176 | +<winner regular="true" reason="Beide Spieler sind gleichauf"/> |
| 177 | +``` |
0 commit comments