-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Beschreibung
Das Spiel wird mit einer definierten Anzahl Runden gestartet. Spieler melden sich zu dem Spiel an und werden zufällig auf der Spielkarte positioniert. Per Zufall wird ein Spieler initial zum Fuchs/Gejagten erklärt. Somit sind alle anderen Spieler Jäger bis einer den Fuchs fängt und selbst zum neuen Fuchs wird. Pro Runde kann jeder Spieler einen Zug durchführen. Ein Zug ist entweder die Änderung der eigenen Position oder das Werfen einer Bombe. Wird ein Spieler von dem Strahl einer Bombe berührt so ist er gelähmt und muss die nächste Runde an seiner letzten Position aussetzen. Das Spiel endet nach Ablauf der Rundenanzahl. Sieger ist der Spieler mit den meisten Punkten. Für jede Runde die ein Spieler der Fuchs ist, bekommt er Punkte und je länger er der Fuchs ist, desto mehr Punkte erhält er pro Runde.
Runde
Eine Runde dauert so lange bis alle Spieler ihren nächsten Zug übermittelt haben. Der Server wartet jedoch maximal 1 Sekunde bis er die eingegangenen Befehle auswertet.
Spieler
Ein Spieler ist ein Bot der an den Server angemeldet wurde und mit seiner implementierten Strategie teilnimmt.
Fuchs
Anfangs wird ein Spieler per Zufall zum Fuchs und kassiert pro Runde Punkte. Wird er von einem anderen Spieler gefangen, wird dieser andere Spieler zum Fuchs und an eine andere Position im Spielfeld teleportiert. Fangen mehrere Spieler den Fuchs gleichzeitig wird der Spieler zum Fuchs dessen Befehl am schnellsten eingegeben wurde.
Spielzüge
Mögliche Spielzüge:
- bewegen (oben, unten, links oder rechts)
- Bombe werfen
- aussetzen
Map
Die Map (gesamtes Spielfeld) ist eine rechteckige Karte bestehend aus einer vorgegebenen Anzahl Felder. Ein Feld ist entweder frei oder ein Hindernis. Spieler können nur freie Felder betreten. Es können mehrere Spieler gleichzeitig auf dem selben freien Feld stehen. Hindernisse innerhalb der Karte können mit Bomben entfernt werden. Ein Feld kann ein Special beinhalten das von Spielern eingesammelt werden kann.
Bombe
Bomben können von einem Spieler waagerecht oder senkrecht auf ein Feld in seiner Reichweite geworfen werden. Anfangs kann jeder Spieler nur eine Bombe gleichzeitig ablegen. Nachdem diese explodiert ist, kann er erneut eine Bombe ablegen. Nach einer bestimmten Anzahl Runden zünden sich die Bomben selbst und erzeugen einen Strahl in alle vier Himmelsrichtungen. Zerstörbare Wände oder Specials die von einem Strahl getroffen werden, werden vernichtet. Der Strahl geht dann nur bis zum Gegenstand. Spieler die von einem Strahl getroffen werden, werden für eine bestimmte Anzahl Runden gelähmt und verlieren alle gesammelten Specials. Liegen mehrere Bomben auf dem gleichen Feld löst die Bombe die zuerst explodiert auch alle anderen Bomben auf dem Feld und in Reichweite aus. Somit ist bei mehreren Bomben die Bombe mit der größten Reichweite entscheidend. Berührt ein Bombenstrahl eine weitere Bombe wird diese ebenfalls sofort ausgelöst.
Special
Specials werden zufällig auf dem Spielfeld verteilt und können von Spielern eingesammelt werden.
Folgende Specials gibts es:
- Bombenstrahlreichweite erhöhen
- Anzahl der Bomben erhöhen
- vorübergehender Schutz vor Bombenstrahl
Alle Spieler die gleichzeitig ein Feld mit einem Special betreten bekommen das Special. Nachdem ein Special aufgesammelt wurde verschwindet es.
Specials werden im Spielverlauf immer wieder an zufälligen Positionen erzeugt.
Wände
- Zerstörbare Wände: Können durch Bombenstrahlen vernichtet werden und ggf. ein Special freilegen
- Unzerstörbare Wände: Können nicht vernichtet werden und somit als Schutz dienen
Ende
Das Spiel endet nach der vorgegebenen Anzahl Runden.
Prinzipiell kann ein angemeldeter Bot/Spieler ein einfacher Telnet-Client sein der Befehle (Strings) an den Server überträgt.
Folgende Befehle kann der Server verarbeiten:
| Zeichen | Befehl | Kommentar |
|---|---|---|
| w | nach oben gehen | |
| a | nach links gehen | |
| s | nach unten gehen | |
| d | nach rechts gehen | |
| b[i][d] | Bombe i Felder in Richtung d werfen | b3w für 4 Felder nach oben |
| n | nichts tun | |
| q | Verbindung zu Server trennen |
Bei ungültigen Befehlen geschieht nichts.
Ausnahmen:
Alle nichteindeutigen Befehle zum Werfen einer Bombe (z.B. b1n oder b2u) legen die Bombe stattdessen auf die eigene Position. Wenn die eigene Reichweite 4 beträgt, man aber z.B. b7w sendet wird die nächsthöchste Reichweite verwendet, also b4w.
Legende:
P: min. 1 Spieler
B: aktive Bombe
w: zerstörbare Wand
W: unzerstörbare Wand
b: Special um die Anzahl verfügbarer Bomben zu erhöhen
r: Special um die Reichweite des Bombenstrahls zu erhöhen
h: Aluhut zur vorübergehenden Resistenz gegen Bombenstahlen
*: Explosion
_: frei
|: Trennstrich
Nachdem sich die Spieler verbunden haben bekommt jeder Spieler den Spielstatus zurück:
Runde: 1/1000, Spieleranzahl: 2, Spielfeldgröße: x 10 y 10, Cmd-Timeout: 1,
_|_|_|w|_|_|_|_|_|_|
p|_|_|W|f|_|_|_|_|_|
_|_|W|W|w|_|_|W|w|_|
_|w|w|w|w|_|_|_|_|_|
_|_|_|w|_|_|_|_|_|_|
_|_|_|_|_|w|_|_|w|_|
_|r|_|_|W|_|_|_|_|_|
_|_|w|_|w|_|_|_|_|_|
_|w|_|w|_|w|_|_|w|_|
b|w|_|w|_|_|w|_|_|w|
Name: Punkte: Feld:
Player2 0 x4 y1
Player1 0 x0 y1
Player 1 sendet "b" an den Server.
Player 2 sendet "d" an den Server.
Beide Spieler erhalten den neuen Status nachdem die Befehle abgearbeitet wurden:
Runde: 1/1000, Spieleranzahl: 2, Spielfeldgröße: x 10 y 10, Cmd-Timeout: 1,
_|_|_|w|_|_|_|_|_|_|
p|_|_|W|_|f|_|_|_|_|
_|_|W|W|w|_|_|W|w|_|
_|w|w|w|w|_|_|_|_|_|
_|_|_|w|_|_|_|_|_|_|
_|_|_|_|_|w|_|_|w|_|
_|r|_|_|W|_|_|_|_|_|
_|_|w|_|w|_|_|_|_|_|
_|w|_|w|_|w|_|_|w|_|
b|w|_|w|_|_|w|_|_|w|
Name: Punkte: Feld:
Player2 2 x5 y1
Player1 0 x0 y1
p hat eine Bombe platziert und f ist nach rechts gegangen.
Dann gehen beide Player jeweils einen Schritt nach unten:
Runde: 2/1000, Spieleranzahl: 2, Spielfeldgröße: x 10 y 10, Cmd-Timeout: 1,
_|_|_|w|_|_|_|_|_|_|
B|_|_|W|_|_|_|_|_|_|
p|_|W|W|w|f|_|W|w|_|
_|w|w|w|w|_|_|_|_|_|
_|_|_|w|_|_|_|_|_|_|
_|_|_|_|_|w|_|_|w|_|
_|r|_|_|W|_|_|_|_|_|
_|_|w|_|w|_|_|_|_|_|
_|w|_|w|_|w|_|_|w|_|
b|w|_|w|_|_|w|_|_|w|
Name: Punkte: Feld:
Player2 5 x5 y2
Player1 0 x0 y2
...Danach wartet Player1 auf die Explosion und Player2 geht weiter nach unten...
Runde: 4/1000, Spieleranzahl: 2, Spielfeldgröße: x 10 y 10, Cmd-Timeout: 1,
*|_|_|w|_|_|_|_|_|_|
*|*|_|W|_|_|_|_|_|_|
*|p|W|W|w|_|_|W|w|_|
_|w|w|w|w|_|_|_|_|_|
_|_|_|w|_|f|_|_|_|_|
_|_|_|_|_|w|_|_|w|_|
_|r|_|_|W|_|_|_|_|_|
_|_|w|_|w|_|_|_|_|_|
_|w|_|w|_|w|_|_|w|_|
b|w|_|w|_|_|w|_|_|w|
Name: Punkte: Feld:
Player2 14 x5 y4
Player1 0 x1 y2
Runde: 15/1000, Spieleranzahl: 2, Spielfeldgröße: x 10 y 10, Cmd-Timeout: 1,
_|_|_|w|_|_|_|_|_|_|
_|_|_|W|_|_|_|_|_|_|
_|_|W|W|w|_|_|W|w|_|
_|w|w|w|w|_|_|_|_|_|
_|_|_|w|_|_|_|_|_|_|
_|_|p|_|_|w|_|_|w|_|
_|_|_|B|W|_|_|_|_|_|
_|_|w|f|w|_|_|_|_|_|
_|w|_|w|_|w|_|_|w|_|
b|w|_|w|_|_|w|_|_|w|
Name: Punkte: Feld:
Player2 135 x3 y7
Player1 0 x2 y5
usw.
Der Server wird in Go (1.6) programmiert.
Beispiel-Workspace:
$HOME/go/src/bomberman-server (bomberman-server-directory)
- Anwendung bauen: $ go install
- Server starten: in $HOME/go/bin/bomberman-server
Per Telnet auf Port 5000 verbinden.