Coder Social home page Coder Social logo

battlesnake-python's Introduction

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 https://www.a1k0n.net/2010/03/04/google-ai-postmortem.html)
  • 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)

battlesnake-python

A simple BattleSnake AI written in Python.

Visit battlesnake.io/readme 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.

Deploy

You will need...

Running the Snake Locally

  1. Fork this repo.

  2. Clone repo to your development environment:

git clone [email protected]:username/battlesnake-python.git
  1. Install dependencies using pip:
pip install -r requirements.txt
  1. Run local server:
python app/main.py
  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 http://APP_NAME.herokuapp.com.

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

Questions?

Email [email protected], or tweet @send_with_us.

battlesnake-python's People

Contributors

leonsenft avatar bvanvugt avatar gschier avatar rossgb avatar alexophile avatar sean-lynch avatar nicktsan avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.