KOBALTMEERCODE. FLOTTE. WETTKAMPF.
Anleitungen & Inhalt

ANLEITUNGEN

AUF DIESER SEITE

Bots in anderen Sprachen

Neben Python kann Kobaltmeer jedes Programm als Bot starten, das ein einfaches JSON-Zeilenprotokoll spricht. Für fünf Sprachen gibt es fertige Starterbots. Sie sammeln, fahren zum nächsten eigenen Hafen zurück, bauen Schiffe und zeichnen Ziele für den Replay-Viewer auf. Es sind lesbare Beispiele, keine besonders starken Gegner.

Sprache Starterbot Voraussetzung In der Heimnetz-Arena
C++ bot.cpp g++ mit C++17 ja
C# Bot.cs .NET SDK 10, keine NuGet-Pakete ja
Go bot.go Go, nur Standardbibliothek ja
Rust bot.rs Rust/Cargo und ein C-Linker ja
JavaScript bot.mjs Node.js, keine npm-Pakete nur lokal

Die Strategie steckt in decide (Go, Rust), Decide (C#) bzw. der Hauptschleife. Das C++-SDK kobaltmeer.hpp bietet orders(), distance(), destination(), explain() und run().

Bauen und spielen

Im Kobaltmeer-Ordner (unter Windows: py sdk\build_example.py cpp und .\start.cmd):

python3 sdk/build_example.py cpp
./start.sh play --bots exec:sdk/examples/cpp/process.json collector --size 16 --turns 160
./start.sh gui  --bots exec:sdk/examples/cpp/process.json collector

Für C#, Go und Rust genauso mit csharp, go und rust. JavaScript braucht keinen Build:

./start.sh play --bots exec:sdk/examples/javascript/process.json collector

Nach jeder Änderung am Quellcode erneut bauen. Unter Linux geht auch das kurze ./sdk/examples/cpp/build.sh. exec:… funktioniert auch bei benchmark, compare und tournament.

Compiler fehlen? Unter Linux x64 lädt ein optionales Setup Go, Rust und das .NET SDK aus den offiziellen Quellen, prüft die Prüfsummen und legt sie privat unter ~/.cache/kobaltmeer/toolchains ab, ohne den globalen PATH zu ändern:

python3 scripts/setup_language_tools.py

Unter Windows installierst du die Compiler selbst und startest das Terminal danach neu:

SpracheInstallation unter Windows
C++MinGW-w64, z. B. als ZIP von WinLibs (Ordner mingw64\bin in den PATH) oder über MSYS2, sodass g++ im Terminal gefunden wird
C#das .NET SDK 10 von Microsoft; die .NET-Laufzeit allein reicht nicht
GoGo von go.dev
Rustrustup von rust-lang.org (bringt Cargo mit)
JavaScriptNode.js von nodejs.org

Fehlt ein Compiler, sagt dir build_example.py, welcher.

Das Prozessmanifest

Ein Bot besteht aus einer Datei process.json und seinen Programmdateien:

{
  "format": "kobaltmeer-process-bot-v1",
  "name": "Mein C++-Bot",
  "command": ["./bot"],
  "files": ["bot", "bot.cpp"]
}
  • command ist eine Argumentliste. Es wird keine Shell gestartet. Andere Laufzeiten gehen genauso, z. B. ["java", "-jar", "bot.jar"].
  • Das Programm läuft im Ordner des Manifests.
  • files nennt alle zum Bot gehörenden Dateien relativ zum Manifest, auch Datendateien. Nicht erlaubt sind absolute Pfade, .. und Symlinks; höchstens 256 Dateien und 32 MB.
  • Bei Turnieren wird genau dieser Dateistand als Version gespeichert. Eine geänderte Datei ergibt eine neue Version.

Das Protokoll

UTF-8, genau ein JSON-Objekt pro Zeile, nach jeder Antwort flushen. Diagnoseausgaben gehören nach stderr, niemals nach stdout.

  1. Die Engine startet dein Programm und sendet:

json {"type":"init","protocol":"kobaltmeer-bot-v1","seed":12345}

  1. Dein Bot initialisiert seinen Zufall aus dem Seed und antwortet:

json {"type":"ready","name":"Mein Bot"}

  1. In jeder Runde kommt eine Anfrage mit type: "turn", deiner player-ID, den vollständigen rules und dem state. Der Zustand enthält turn, resource[y][x], ships, players und sites mit denselben Feldern wie in der Python-API.

  2. Dein Bot antwortet:

json {"type":"orders","ships":{"0":"E","3":"O"},"spawn":false}

Optional mit debug: eine Liste aus Objekten mit ship, target, reason und path, wie bei explain() in Python.

Erlaubte Aktionen sind O, N, E, S, W und B. Unbekannte neue Felder in der Anfrage solltest du ignorieren.

Zeitlimits: fünf Sekunden für den Start, 500 ms pro Zug (einschließlich Lesen und Schreiben). Ungültiges JSON, Antworten über 1 MB, ein beendetes Programm oder eine Zeitüberschreitung schalten den Bot für den Rest der Partie ab.

Sicherheit: Lokal gestartete exec:-Bots laufen ohne zusätzliche Isolation, genau wie Python-Bots. Starte nur Programme, denen du vertraust. Fremde Bots gehören in die isolierte Heimnetz-Arena.

Mitgelieferte Bibliotheken

Das C++-SDK nutzt nlohmann/json 3.12.0 (MIT-Lizenz), der Rust-Starter serde_json mit mitgelieferten Abhängigkeiten. Beide Builds laufen ohne Paketdownloads. Die Lizenzen liegen im Ordner sdk/.