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
dictof 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_shipsandget_shoteach round is 100ms. After this time, your move will time out and you will lose either the game (ifplace_shipshas timed out) or the chance to make a shot that round (ifget_shothas 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