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:
| Sprache | Installation 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 |
| Go | Go von go.dev |
| Rust | rustup von rust-lang.org (bringt Cargo mit) |
| JavaScript | Node.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"]
}
commandist 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.
filesnennt 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.
- Die Engine startet dein Programm und sendet:
json
{"type":"init","protocol":"kobaltmeer-bot-v1","seed":12345}
- Dein Bot initialisiert seinen Zufall aus dem Seed und antwortet:
json
{"type":"ready","name":"Mein Bot"}
-
In jeder Runde kommt eine Anfrage mit
type: "turn", deinerplayer-ID, den vollständigenrulesund demstate. Der Zustand enthältturn,resource[y][x],ships,playersundsitesmit denselben Feldern wie in der Python-API. -
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.
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/.