Your task is to implement a Bot to play a game of Battleships!
In a game of battleships, each player has a 10 x 10 board on which they place 5 different types of ship.
The aim of the game is to shoot all of your opponents ships before they shoot yours.
After cloning this repo, to get started, run:
python -m venv virtualenv
(optional but recommended)
source virtualenv/bin/activate
pip install -r requirements.txt
To implement your bot, your team must submit an implementation of Bot
which
overrides the place_ships
and get_shot
methods. You can see examples of implemented bots
under man.battleships/bots
. SampleBot.py
is a good place to start.
Within each game between two bots, the following happens:
- Player 1 places their ships
- Player 2 places their ships
- Player 1/2 take alternating turns to shoot positions on the board of their opponent.
- After each shot, your bot will receive a
dict
of information indicating whether the last shot hit / missed an enemy ship, sunk an enemy ship, and if so, which ship it was, or an exception if the shot failed for some reason. - The game ends when either player has 'sunk' all of their opponents ships
In order to test your bots, we have provided a script allowing you to
play n
games between two Bots p1
and p2
present in the bots
directory. The usage of this script
is as follows:
python play_game -n [100] <p1> <p2>
Here, p1
and p2
are the string class names of the bots you wish to test.
Alternatively, you may wish to visualise games between two bots. To run the game visualiser and backend, run:
./run_all.sh
(or run_all.bat
on windows)
You can then navigate to localhost:8000
to play a game between any of the bots present in man.battleships/bots
-
Your bot gets a maximum of 3 retries for placing ships in each game and making shots on each turn. If after these retries you fail to return valid ship placements / a valid shot, you either lose the game or lose the chance to make a shot that round
-
The maximum time allowed to compute
place_ships
andget_shot
each round is 100ms. After this time, your move will time out and you will lose either the game (ifplace_ships
has timed out) or the chance to make a shot that round (ifget_shot
has timed out) -
Please play nicely! any obvious attempts to break the game engine will be disqualified
In order to submit your bot, simply make a pull request to man.battleships
containing your
implemented Bot
in the man.battleships/bots
directory .
Ensure that your Python file and implemented Bot
class have the same name.
Good Luck!
Find Enis, Alex or Doug