Skip to content
hwmrocker edited this page Dec 5, 2014 · 25 revisions

all messages must be encoded with msgpack.

Connect

{
 "type": "connect",
 "username": "<username>",
 "password": "<geheim>",
 "async": False,
}

username ist ein beliebiger UTF-8-String mit bis zu 32 Zeichen. Die Antwort ist wie bei whoami. Andere Befehle können erst nach einem Connect geschickt werden.

password ist ein beliebiger UTF-8-String mit bis zu 32 Zeichen. Wenn man sich neu verbindet, kann die Verbindung nur dann übernommen werden, wenn man das selbe password mit angibt.

async ist ein boolean (default False). Wenn auf True gesetzt bekommt man asynchrone Informationen. Wie z.B. Aktionsbefehle aller Spieler.

Move

{
 "type": "move",
 "direction": "w",
 "distance": 1
}

direction kann "w", "a", "s", oder "d" (klein geschrieben!) sein.

distance ist per default 1, gibt die anzahl der Blöcke an die zurückgelegt werden sollen.

Antwort

("MOVE", id, position_int, direction, distance)

Diese Antwort erhalten alle Spieler die beim connect async=True gesetzt haben

id ist String. Es ist eine eindeutige Spielerkennzeichnung (z.B Startposition)

position_int ist ein Tupel (x, y) beschreibt den Block auf dem sich der Spielert mit der angegeben id befunden hat. (0, 0) ist die Position in der linken oberen Ecke. x beschreibt die Spalte, y die Zeile.

direction und distance werden aus dem gesendeten Befehl übernommen.

Bomb

{
 "type": "bomb",
 "fuse_time": 5
}

fuse_time ist per default 5, gibt die Anzahl an Sekunden an, bis die Bombe explodieren soll.

Antwort

("BOMB", id, position_int, fuse_time, state, extra_info)

Diese Antwort erhalten alle Spieler die beim connect async=True gesetzt haben

id ist String. Es ist eine eindeutige Spielerkennzeichnung (z.B Startposition)

position_int ist ein Tupel (x, y) Nähere Beschreibung s. o.

fuse_time gibt die Anzahl der Sekunden an, bis die Bombe explodiert.

state ist ein String. Direkt nach dem Platzieren hat er den Wert "ticking".

extra_info ist als Antwort direkt nach dem Platzieren immer None. Diese Paket wird auch asynchron verschickt. Die Tablle, welche Information extra_info enthält kann bei der Beschreibung von what_bombs weiter unten nachgelesen werden.

Whoami

{
 "type": "whoami",
}

Antwort

("WHOAMI", [color, id, self._top, self._left])

color ist ein Triple von Ganzzahlen von 0 - 255. RGB

id ist die Startposition

Map

{
 "type": "map",
}

Antwort

("MAP", "ggWg...\ngWM...")

Die Map wird als string übertragen, jeder Block ist wird als ein Zeichen dargestellt. Die Zeilen sind mit newlines begrenzt.

What Bombs

{
    "type": "what_bombs"
}

Antwort

("WHAT_BOMBS", [
    (position_int, update_timer, state, extra_info), ...
])

position_int ist ein Tupel (x, y) Nähere Beschreibung s. o.

update_timer gibt die Zeit in Sekunden an, wie lange die Bombe in dem aktuellen state noch verbleibt.

state ist ein String, ist der Name des akutellen Zustandes

|-----------|----------|-----------|
| `state`   | tödlich  | Dauer     |
|-----------|----------|-----------|
| ticking   | nein     | variabel  |
| exploding | ja       | 0.2s      |
| burning   | ja       | 1.5s      |
| hiding    | nein     |           |
|-----------|----------|-----------|

Bomben mit dem state hiding werden im nächsten update Zyklus entfernt und sind höchstwahrscheinlich nicht anzutreffen. Dieser Zustand wird aber aufgefürt, da bei aktivierten async bei Zustandsänderungen diese Informationen verschickt werden.

extra_info beinhaltet informationen abhängig vom state.

im state :

  • ticking wird None übertragen.
  • exploding oder
  • burning werden fire_trails übertragen.
  • hiding werden die destroyed_walls mitgeteilt.

fire_trails ist Liste von Positionstuplen. Die Positonen sind die Endpunkte der Feuerstrahlen der Bombe. Alle Positionen die zwischen der Bombenposition und den Enpostionen liegen sind tödlich. Wenn eine Bombe in einer Richtung am Ende des Maprandes liegt, kann es sein, dass auch das Ende des Feuerstrahls mit der Position der Bombe übereinstimmt. Wenn eine Mauer durch die Bombe zerstört wird, ist das Ende des Feuerstrahls die selbe Position wie die Mauer. Hier ein Beispiel

[(0,0), (0,0), (2,0), (0,2),]

destroyed_walls ist eine Liste mit Positionstuplen. Die Liste enthält bis zu vier Einträge. Es ist möglich, dass bei Zwei Bomben die selbe Mauer zerstört wird. In diesem Fall werden nur der ersten Bombe Punkte gutgeschrieben und die Mauer wirklich entfernt. Es kann aber sein, dass auch bei der zweiten Bombe diese Mauer noch auftaucht.

What Foes

{
    "type": "what_foes"
}

Antwort

("WHAT_FOES", [
        (position_int, direction, id, name), ...
])

position_int ist ein Tupel (x, y) Nähere Beschreibung s. o.

direction kann "w", "a", "s", oder "d" sein.

id ist String. Es ist eine eindeutige Spielerkennzeichnung (z.B Startposition)

name ist ein String.

Points

{
 "type": "points"
}

Antwort

("OK", [(id, name, points), ...])

id ist String. Es ist eine eindeutige Spielerkennzeichnung (z.B Startposition)

name ist ein String. Der Spielername.

points ist ein Integer. Die Punkte des Spielers.

Vorschläge

...