Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
This branch is 79 commits ahead, 40 commits behind james-gray:master.

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Rough Strategy

The snake starts by building a grid of the board based on the data. Note that if any snakes are larger than us we consider any spaces it could move next turn as dangerous, but if we're larger than them we count those spaces as safe because we would just kill them if a collision were to happen. We then make a priority list of the goals starting with the gold, then the food, sorted by distance to the center. We chose distance from the center rather than from ourselves because the gold always spawns in the center. So we wanted to have the best chance of being near the gold when it spawned (Winning by getting 5 gold coins was OP). We skip all goals that any other snake is closer to. Once a goal is selected, we update what the board would look like if we took our intended path to get there, if after getting to the goal there is no clear path to our tail, then we skip that goal.

If no goals are suitable (i.e. we're not closest to them, and the are not safe), then we just take the shortest path to our own tail, allowing us to loop "forever" until a goal spawns that satisfies our conditions. If we can't get to our tail, I think we just make a random move that isn't into a wall (we probably ran out of time). Another solution would be to try to path to another snake's tail, and just follow them until a goal appears or our own tail becomes visible.

Next Steps / Ideas

  • Implement some sort of space filling algorithm
  • Search out the largest empty spaces and try to hang out there
  • Purposely position to kill other snakes - maybe make traps out of existing food if healthy enough?
  • Identify "easy kill" scenarios (i.e. when you are in control of another snakes choke point)
  • Voronoi heuristic for when snakes are really long (see
  • Either avoid or master endgame (Once snakes are super long, and space is slim, the optimal strategy probably changes, either kill of other snakes before this happens, or figure out a good strategy that avoids getting wrecked by RNG once walls start spawning in your face)


A simple BattleSnake AI written in Python.

Visit for API documentation and instructions for running your AI.

This AI client uses the bottle web framework to serve requests and the gunicorn web server for running bottle on Heroku. Dependencies are listed in requirements.txt.


You will need...

Running the Snake Locally

  1. Fork this repo.

  2. Clone repo to your development environment:

git clone
  1. Install dependencies using pip:
pip install -r requirements.txt
  1. Run local server:
python app/
  1. Test client in your browser: http://localhost:8080.

Deploying to Heroku

  1. Create a new Heroku app:
heroku create [APP_NAME]
  1. Deploy code to Heroku servers:
git push heroku master
  1. Open Heroku app in browser:
heroku open

or visit

  1. View server logs with the heroku logs command:
heroku logs --tail


Email, or tweet @send_with_us.


A Simple BattleSnake AI Written in Python






No packages published


  • Python 98.5%
  • Shell 1.5%