Bomberjam is an artificial intelligence programming challenge.
May the best bot win!
Players control a bot using the programming language of their choice. Four bots fight in a 2D grid. The bot with the highest score wins. One player can get points by destroying blocks, hitting another player and being the last player alive.
engine/ folder contains the game engine for the OS of your choice.
Each starter contains a
MyBot.* entrypoint file that must not be renamed.
For each starter, you will also find a
run_game.sh files that allows you to simulate a game. These scripts look like this:
> bomberjam.exe --output replay.json "dotnet MyBot.dll" "java MyBot" "node MyBot.js" "python MyBot.py"
install.sh script may be included to install build dependencies suchs as Node.js packages.
The game engine spawns a process for each bot and communicates with them over standard input and standard output.
Each tick (turn), your bot will receive the current state of the game over standard input. Standard output must be used to send the action (move, plant a bomb or do nothing) within one second.
Use the online viewer to visualize the game from the generated JSON file.
How it works
We use Ubuntu 20.04 Docker containers to compile / package your bot as well as running the games. It means that your code must be compatible with Ubuntu 20.04. The container comes with .NET 5, .NET Core 3.1, Go 1.16.3, Node.js 12, Java 8, Python 3.8 and PHP 8.0 pre-installed.
When you submit a bot, we try to recognize its language using the
MyBot.* entrypoint file. This is why this file cannot be renamed.
Once the language is recognized, the packaging phase begins. During this phase, you'll have access to internet.
install.shscript is executed
- C# and Java code is compiled
run.shscript is created, containing the command to run your bot, such as
- Everything is zipped and stored for later use
When a game is scheduled, our servers will download and unzip the packaged bots. Internet and any network access are unavailable during the game.
The game engine will spawn a process for each bot, using the
run.sh script created during the packaging phase.
Each bot process is contained in an isolated environment with limited CPU and memory (1GB) so one bot cannot interfere with another.