Please see more games in GridWorlds.jl
This package provides some basic variants of the snake game.
pkg> add SnakeGames
julia> using SnakeGames
julia> play()
Single snake and single food. The snake can move through the boundary.
game = SnakeGame(;walls=[
CartesianIndex.(1, 1:8)...,
CartesianIndex.(8, 1:8)...,
CartesianIndex.(1:8, 1)...,
CartesianIndex.(1:8, 8)...])
play(game)
Add boundaries to the game. The game stop when the snake hits the wall.
game = SnakeGame(;n_snakes=2)
play(game)
2 snakes and 1 food. Game stop when two snake eat the same food.
A known bug is that, two snakes of length 1 can move across each other.
game = SnakeGame(;n_snakes=3, n_foods=5)
play(game)
3 snakes and 5 foods. Game stop when one snake hits another.
In fact, we can have many snakes and foods.
And even in the 3D mode. (TODO: add a picture.)
By default, a vector of 2*n_snakes+2
bits is used to represent the current state of each grid.
- The first
n_snakes
bits are used to mark which snakes' head occupy the grid. - The following up
n_snakes
bits are used to mark which snakes' body occupy the grid. - The last two bits are used to mark whether this grid is occupied by wall/food or not.
You can access it via game.board
and use it in your own algorithms.