Skip to content
Elixir AI for the "Battleship" game to demonstrate my elixir behavior tree library
Elixir Clojure CSS Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
client
config
lib
test
.formatter.exs
.gitignore
Procfile
README.md
elixir_buildpack.config
mix.exs
mix.lock

README.md

Battleship Guesser (demonstrating the Elixir Behavior Tree AI library)

A demo using my Elixir Behavior Tree AI Library to make an AI that plays Battleship.

Front end

A clojurescript client that provides a UI for defining the game board size, placing your ships, and playing out the AI's guesses.

It uses CSS grid to map the server data into a view, with a lot of help from the re-frame library for the interactivity.

You can play it live.

(Note that it takes a few minutes for the heroku server to spin up sometimes.)

back end

The backend is written in Elixir as an OTP app with a Phoenix RESTful api.

You use it in 2 ways:

  1. Via the command line script (see Releases)
  2. Via a RESTful web server (hosted on Heroku, instructions below):

Create a new game

You need to supply the board dimensions.

curl -X POST -H "Content-Type: application/json" -d '{"cols": 3, "rows": 4}' https://elixir-battleship-guesser.herokuapp.com/new/

Responds with an id and empty game object (plays will be an empty array, and guess will be nil).

{"id": "YOUR_TOKEN", "game": GAME_OBJECT}

Example game object:

{"size": {"cols": 8, "rows": 8},
 "plays": [{"col": 3, "row": 4, "status": "hit"}],
 "guess": {"col": 3, "row": 5}
}

Where status will be either "hit" or "miss".

Start the game

This will tell the AI will make the initial guess. Responds with a "game object" as above.

curl -X PUT -H "Content-Type: application/json" -H "game-token: YOUR_TOKEN" https://elixir-battleship-guesser.herokuapp.com/start/

Only use this when ready for the first guess. After that use the miss, hit, and sunk endpoints, which will update the board and trigger a new guess.

Miss/Hit/Sunk

Same usage as /start/ endpoint (just replace the final path segment with miss, hit, or sunk.

Note, for sunk, you must also supply a body of -d "{size: SHIP_SIZE}" to denote the size of the ship that was sunk.

Leave/delete game

curl -X DELETE -H "Content-Type: application/json" -H "game-token: YOUR_TOKEN" https://elixir-battleship-guesser.herokuapp.com/leave/

Responds with status code 204.

You can’t perform that action at this time.