A Battlesnake written in Python.
The priority strategy is defensive.
The snake starts by building a grid of the board based on the data. We also consider any spaces the other snakes could move next turn as dangerous.
If no goals are suitable (i.e. we're not closest to any food, or getting to the next food would lead to the dead-end), 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.
- Implement flood filling algorithm to find the next move that would lead to a wider space
- Use A* to find the next closest food when the health is below range
This is a basic implementation of the Battlesnake API. It's a great starting point for anyone wanting to program their first Battlesnake using Python. It comes ready to deploy to Heroku, although you can use other cloud providers if you'd like.
This Battlesnake uses Python 3.7, CherryPy, and Heroku.
-
Fork this repo into your GitHub Account.
-
Clone your forked repo into your local environment.
git clone git@github.com:[YOUR-GITHUB-USERNAME]/starter-snake-python.git
-
Create a new Heroku app to run your Battlesnake.
heroku create [YOUR-APP-NAME]
-
Deploy your Battlesnake code to Heroku.
git push heroku master
-
Open your new Heroku app in your browser.
heroku open
If everything was successful, you should see the following text:
Your Battlesnake is alive!
-
Optionally, you can view your server logs using the Heroku logs command
heroku logs --tail
. The--tail
option will show a live feed of your logs in real-time.
At this point your Battlesnake is live and ready to enter games!
-
Log in to play.battlesnake.com.
-
Create a new Battlesnake. Give it a name and complete the form using the URL for your Heroku app.
-
Once your Battlesnake has been saved you can create a new game and add your Battlesnake to it. Type your Battlesnake's name into the search field and click "Add" to add it to the game. Then click "Create Game" to start the game.
-
You should see a brand new Battlesnake game with your Battlesnake in it! Yay! Press "Play" to start the game and watch how your Battlesnake behaves. By default your Battlesnake should move randomly around the board.
-
Optionally, open your Heroku logs while the game is running to see your Battlesnake receiving API calls and responding with its moves.
Repeat steps 3 and 4 every time you want to see how your Battlesnake behaves. It's common for Battlesnake developers to repeat these steps often as they make their Battlesnake smarter.
At this point you should have a registered Battlesnake and be able to create games!
Now you're ready to start customizing your Battlesnake and improving its algorithm.
Locate the start
function inside server.py. You should see a line that looks like this:
return {"color": "#888888", "headType": "regular", "tailType": "regular"}
This function is called every time a new game starts. Your response determines what your Battlesnake will look like in that game. See Customizing Your Battlesnake for how to customize your Battlesnake's appearance using these values.
On every turn of each game your Battlesnake receives information about the game board and must decide its next move.
Locate the move
function inside server.py. You should see code that looks like this:
data = cherrypy.request.json
# Choose a random direction to move in
possible_moves = ["up", "down", "left", "right"]
move = random.choice(possible_moves)
return {"move": move}
Possible moves are "up", "down", "left", or "right". To start your Battlesnake will choose a move randomly. Your goal as a developer is to read information sent to you about the board (available in the data
variable) and make an intelligent decision about where your Battlesnake should move next.
See the Battlesnake Rules for more information on playing the game, moving around the board, and improving your algorithm.
After making changes, commit them using git and deploy your changes to Heroku.
git add .
git commit -m "update my battlesnake's appearance"
git push heroku master
Once Heroku has updated you can create a new game with your Battlesnake to view your latest changes in action.
At this point you should feel comfortable making changes to your code and deploying those changes to Heroku!
Now you have everything you need to start making your Battlesnake super smart! Here are a few more helpful tips:
-
Keeping your logs open in a second window (using
heroku logs --tail
) is helpful for watching server activity and debugging any problems with your Battlesnake. -
You can use the Python print function to output information to your server logs. This is very useful for debugging logic in your code during Battlesnake games.
-
Review the Battlesnake API Docs to learn what information is provided with each command. You can also output the data to your logs:
def move(self): data = cherrypy.request.json print(data) return {"move": "up"}
-
When viewing a Battlesnake game you can pause playback and step forward/backward one frame at a time. If you review your logs at the same time, you can see what decision your Battlesnake made on each turn.
Once you've made your Battlesnake behave and survive on its own, you can enter it into the Global Battlesnake Arena to see how it performs against other Battlesnakes worldwide.
Arenas will regularly create new games and rank Battlesnakes based on their results. They're a good way to get regular feedback on how well your Battlesnake is performing, and a fun way to track your progress as you develop your algorithm.
Eventually you might want to run your Battlesnake server locally for faster testing and debugging. You can do this by installing Python 3.7 and running:
python server.py
Note: You cannot create games on play.battlesnake.com using a locally running Battlesnake unless you install and use a port forwarding tool like ngrok.
All documentation is available at docs.battlesnake.com, including detailed Guides, API References, and Tips.
You can also join the Battlesnake Developer Community on Slack. We have a growing community of Battlesnake developers of all skill levels wanting to help everyone succeed and have fun with Battlesnake :)