Easy-to-use snake game engine. Quickly implement snake for anything!
Project description
snakeng
snakeng is an implementation of the back-end of the classic “snake” game. It provides an interface to inject directional inputs (up/down/right/left), and produces a data structure representing the game state, for each frame of gameplay. This allows snake to be quickly implemented and played on various platforms.
Features:
Configurable game area width/height
Configurable wall behaviour (teleport/wrap or death)
Serializable game state object (if you want to e.g. save/load game states to .json files)
Configurable snake speed options (fixed speed, or automatically increase speed as snake grows)
Configurable apple behaviour (set time before apples disappear, or make apples permanent until collected)
For more information, see the API documentation.
Install
Install via pip:
pip install snakeng
Minimal snake game implementation
This is the simplest possible implementation of snake, using snakeng:
import sys
import time
import keyboard
from snakeng.snake import SnakeGame, Direction
dirmap = {'up': Direction.UP, 'down': Direction.DOWN, 'left': Direction.LEFT, 'right': Direction.RIGHT}
game = SnakeGame() # Create game instance
def keypress_event(e):
new_direction = dirmap.get(e.name, None)
if new_direction is not None:
game.direction_input(new_direction)
keyboard.on_press(keypress_event) # Register callback function to save last keypress
while True:
new_state = game.process() # Produce new frame
sys.stdout.write("\033[2J\n" + new_state.to_string()) # Clear terminal screen and print new game state
sys.stdout.flush() # Flush output
time.sleep(0.05)
Sample command-line (ASCII) implementation
Additionally, a sample terminal-based implementation of a snake game is provided, which can be accessed by running snakeng as a module:
python -m snakeng
The terminal-based implementation accepts several arguments, detailed here:
usage: snakeng [-h] [-x WIDTH] [-y HEIGHT] [-f FPS]
[-s {slow,medium,fast,faster}] [-w] [-o OUTPUT_FILE]
[-i INPUT_FILE] [-p] [-a APPLE_TICKS]
Simple terminal-based snake game showing how to use snakeng. Use arrow keys to
change snake direction, use 'p' to pause, and use 'Ctrl-C' to quit.
options:
-h, --help show this help message and exit
-x WIDTH, --width WIDTH
Game area width in characters. (default: 40)
-y HEIGHT, --height HEIGHT
Game area height in characters. (default: 30)
-f FPS, --fps FPS Framerate in frames per second. (default: 24)
-s {slow,medium,fast,faster}, --fixed-speed {slow,medium,fast,faster}
Sets the snake speed for the whole game. If unset, the
snake speed will automatically increase as the snake
size increases. (default: None)
-w, --wall-death If True, snake will die if it hits a wall. Default
behaviour is to "wrap around" and come out of the
opposite wall. (default: False)
-o OUTPUT_FILE, --output-file OUTPUT_FILE
If set, the game state will be saved to the specified
filename when you quit with Ctrl-C. (default: None)
-i INPUT_FILE, --input-file INPUT_FILE
If set, the game state will be loaded from the
specified filename. (default: None)
-p, --permanent-apples
If True, apples will stay forever until collected.
Default is to disappear after a fixed number of
frames. (default: False)
-a APPLE_TICKS, --apple-ticks APPLE_TICKS
Specifies the number of frames before an uncollected
apple disappears. Can only be used if -p is not set.
Default is to use the width or height of the game
area, whichever is larger. (default: None)
NOTE: the sample implementation uses an ANSI escape sequence to clear the terminal screen,
so it won't work in terminals that don't support ANSI escape sequences.
Contributions
Contributions are welcome, please open a pull request at https://github.com/eriknyquist/snakeng.
If you have any questions about / need help with contributions, please contact Erik at eknyquist@gmail.com.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snakeng-2.0.0-py3-none-any.whl.
File metadata
- Download URL: snakeng-2.0.0-py3-none-any.whl
- Upload date:
- Size: 13.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f15d405cc68b8142c58a383ebd539b007bb5d9e31417f3967ced9ecd2cdf013
|
|
| MD5 |
f370d94a1c0e151643f8e675e2d38f1b
|
|
| BLAKE2b-256 |
5fcf5c7dffc119b3803ba3b48d5ae5e469166cf40172e914313e2c5adf72ae10
|