KOBALTMEERCODE. FLOTTE. WETTKAMPF.
Anleitungen & Inhalt

ANLEITUNGEN

AUF DIESER SEITE

Einstieg

Kobaltmeer läuft lokal auf deinem Rechner. Du brauchst Python 3.12 oder neuer. Für die Zuschaueroberfläche ist eine grafische Sitzung nötig; Partien ohne Grafik laufen auch auf einem Server.

Herunterladen

kobaltmeer.zip herunterladen

Das Paket (4,5 MB) enthält das Spiel, den Beispielbot, die Starterbots für C++, C#, Go, Rust und JavaScript, den Replay-Viewer und die Heimnetz-Arena. Entpacke es an einen Ort deiner Wahl; es entsteht der Ordner Kobaltmeer. Kobaltmeer ist frei unter der MIT-Lizenz: Du darfst es verändern und weitergeben.

Alle Befehle auf dieser Seite werden im Kobaltmeer-Ordner ausgeführt, also dort, wo start.sh liegt. Relative Pfade wie bots/mein_bot.py beziehen sich auf diesen Ordner.

Installation

Linux

Öffne ein Terminal in dem Ordner, in dem die heruntergeladene Datei liegt (meist Downloads), entpacke sie und wechsle in den neuen Ordner:

cd ~/Downloads
unzip kobaltmeer.zip
cd Kobaltmeer

Der Starter legt beim ersten Aufruf eine eigene Python-Umgebung .venv an, lädt die benötigten Pakete (NumPy und pygame, rund 30 MB) und öffnet dann das Spielfenster. Das dauert beim ersten Mal ein bis zwei Minuten, danach startet es sofort:

./start.sh

Lieber von Hand:

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python main.py

Windows

Klicke die heruntergeladene Datei mit der rechten Maustaste an und wähle „Alle extrahieren…“. Öffne den entstandenen Ordner Kobaltmeer, klicke mit der rechten Maustaste auf eine freie Stelle und wähle „Im Terminal öffnen“. (Windows legt beim Entpacken oft einen Ordner kobaltmeer an, in dem erst der Ordner Kobaltmeer liegt.) In diesem PowerShell-Fenster:

.\start.cmd

Wie unter Linux legt der Starter beim ersten Aufruf eine eigene Umgebung .venv-win an, lädt die Pakete und öffnet das Spielfenster. Lieber von Hand:

py -m venv .venv-win
.\.venv-win\Scripts\python.exe -m pip install -r requirements.txt
.\.venv-win\Scripts\python.exe main.py

In allen weiteren Beispielen ersetzt du ./start.sh durch .\start.cmd. Manche Beispiele gehen mit \ am Zeilenende über mehrere Zeilen; das versteht nur Linux. Schreibe sie in PowerShell in eine Zeile (ohne die \) oder ersetze \ durch einen Gravis `.

Die erste Partie

Vier eingebaute Bots spielen gegeneinander, und du siehst zu:

./start.sh gui

Mit deinem eigenen Bot gegen einen eingebauten Gegner:

./start.sh gui --bots bots/mein_bot.py collector --seed 42 --turns 240

bots/mein_bot.py ist ein vollständiger, bearbeitbarer Beispielbot. Er sammelt, fährt mit voller Fracht heim, liefert ab und baut eine kleine Flotte. Wie du ihn änderst, erklärt die Bot-Anleitung.

Ohne Grafik, mit gespeichertem Replay und Ergebnisbericht:

./start.sh play --bots bots/mein_bot.py collector --seed 42 --turns 240 \
  --replay replays/erste-partie.json.gz --output runs/erste-partie.json

Das Replay öffnest du anschließend im Fenster oder im Replay-Viewer:

./start.sh gui --replay replays/erste-partie.json.gz

Die eingebauten Gegner

Vier regelbasierte, offen lesbare Strategien stehen als Gegner bereit. Ihre Parameter sind von Hand gesetzt, nicht trainiert, und sie sind unterschiedlich stark.

Name Strategie
collector Sammler: sammelt größere Mengen und bringt sie zurück
courier Kurier: fährt häufiger mit weniger Fracht heim
pioneer Pionier: sucht weiter entfernt, baut eine größere Flotte und Relais
raider Freibeuter: verfolgt zusätzlich beladene Gegner, wenn er selbst wenig Fracht hat

Die Oberfläche

Das Fenster zeigt die Karte mit allen Flotten, Häfen und Relais, eine Rangliste mit Lager, Fracht, Schiffen und Verlusten, die Lagerkurven und einen Inspektor. Klicke ein Schiff oder ein Feld an, um Fracht, Vorkommen und den letzten Befehl zu sehen. Über Regeln / Profil oben links wählst du Regelprofil, Kartengröße und einzelne Regeln; mehr dazu unter Regeln.

Taste Funktion
Leertaste / P Pause / weiter
→ / Punkt Eine Runde vor; am Live-Ende wird die nächste Runde berechnet
← Eine aufgezeichnete Runde zurück
Pos1 / Ende Anfang / Ende der bisherigen Aufzeichnung
1/s, 4/s, 12/s, 48/s Wiedergabetempo in Runden pro Sekunde
R Gleiche Karte, gleiche Aufstellung, Botcode neu laden
N Neue Karte (Seed + 1)
E Replay speichern
L Zuletzt gespeichertes Replay öffnen
V Ressourcenwerte in den Feldern anzeigen
G Raster an / aus
Klick auf die Zeitleiste Zu einer aufgezeichneten Runde springen
Esc / Fenster schließen Live-Partie als Replay speichern und beenden

Springst du in einer laufenden Partie zurück, siehst du dir ihre Geschichte nur an; sie wird nicht umgeschrieben. Ein geladenes Replay führt keinen Botcode aus. R startet daraus ausdrücklich eine neue Partie.

Wenn dein Bot einen Fehler hat

Eigene Bots laufen in einem eigenen Prozess. Sie haben 500 ms pro Zug und bis zu fünf Sekunden für den Start; mit --timeout-ms stellst du ein anderes Limit ein. Bei einer Ausnahme, ungültigen Befehlen oder Zeitüberschreitung wird der Bot für den Rest der Partie abgeschaltet: Seine Schiffe warten, die anderen Bots spielen weiter.

print() im Bot landet im Debugprotokoll und stört die Kommunikation nicht. Berichte und Replays enthalten Fehlermeldungen (faults), die letzten Ausgaben (stderr_tail) und die gemessenen Entscheidungszeiten.

Wichtig: Der lokale Botprozess dient der Fehlerbehandlung und dem Zeitlimit. Er ist keine Sicherheits-Sandbox. Führe lokal nur Bots aus, denen du vertraust. Für Bots anderer Leute gibt es die isolierte Heimnetz-Arena.

Wie geht es weiter?