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_snakesbits are used to mark which snakes' head occupy the grid.
- The following up
n_snakesbits 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.