When I was in university, I went to a coding competition where they had a contest that involved writing AIs to play a simple space game. At the time, our team wrote an AI that did terribly, but I enjoyed participating. The winners used some cheese moves, which made me realize that the game was about min-maxing, not about creating interesting strategies.
After talking with some other participants from MIT, they showed me that MIT has a similar contest called battlecode that has been running for over 10 years, where the game and rules change every year.
Not being an MIT student, I never really got a chance to play, but I decided that I wanted to implement my own game AI challenge - the idea would be that the players write an AI to play a simplified RTS. Thus, dmangame was born. The premise for dmangame is that you control a team of bots that are trying to win the game by destroying all other bots and capturing their home base. A typical game looks like this:.
I wanted to make the game AI as simple as possible, so anyone could play. A lot
of time was spent designing a simple AI. A given unit had only 3 commands:
capture(square) - but with these 3
commands, any number of strategies could be created. The mechanics of the game
are reasonably simple: if you control a base, it will spawn a new unit every X
turns. If you shoot a bullet at a square, any units it passes through will take
damage. To capture a base, you have to sit on it for a certain amount of turns
The typical game strategy consists of having to explore a map to find the enemy base and then figure out a way to capture it.
Some of the challenges involved were: creating a simple unit API, running games on google app engine and creating a game playback engine. To this day, games are still running between AIs on my appengine instance in an endless tournament
The AIs that emerged had different strategies: RushAI would send a single unit to explore and when it found an enemy base, it would do a zerg rush. ExpandAndSearchAI would gather units together and then explore the map as fast as possible, then bum rush the enemy. CircleBlaster would play defensively - creating a ring around its base, trying to prevent any other AIs from finding the actual location. ClockAI is a geometric AI that would act like a hand on an analog clock: the units would form a line that continually sweeps clockwise around the base, growing larger and larger. GooseAI created V formations of 3 units that it would send around the map
The maps available are a small 1v1 map, a medium sized 1v1 map, a large 1v1 map, a battle royale map and a map with excess open bases. To figure out which teams do well on which maps, I used the MELO ranking system for multiplayer games and track each team’s MELO score on a per map basis. Interestingly, there was no one clear winner: Each AI had its trade-offs and would perform differently on different maps.