Skip to content

Commit 5b7e44a

Browse files
YoEntexeruf
andauthored
piranhas26: add xml (#120)
* chore: remove premaid xml alias * add: piranhas 26 xml docs Co-authored-by: Janek <github@melonion.me>
1 parent eddee34 commit 5b7e44a

File tree

2 files changed

+177
-1
lines changed
  • hyperbook/book/spiele

2 files changed

+177
-1
lines changed

hyperbook/book/spiele/25_hase-und-igel/xml.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
---
22
name: XML-Dokumentation
3-
permaid: xml
43
---
54

65
# XML-Elemente des Spiels Hase und Igel
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
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

Comments
 (0)