rsnaker 0.1.1

A good old retro Snake in terminal UI
Documentation

crates.io Doc.rs GPLv3 License Last Commit Build Test Last doc

Snake Game using Ratatui

It is a terminal-based snake game using the Ratatui crate for rendering. Terminal Output Menu Terminal Output Running

Features

  • Terminal UI: Uses Ratatui for rendering a grid-based game.
  • Game Logic: Manages snake movement, collisions, and scoring.
  • Multithreading: Uses multiple threads for input handling, rendering at 60 FPS, and game logic execution.
  • Emoji-based graphics: Supports rendering the snake using emojis instead of ASCII.
  • Configurable parameters: With clap for command-line arguments & toml file.

TODO

  • Add a save score (local db) with a pseudo got from cmdline
  • Add some performance log with tracing, for example
  • Show game options in the menu, and visually change them
  • Enhance fruits eaten detection and grid management with multiple emojis as body
  • Manage mouse/touchscreen mouvement to control the snake
  • Internal code: Provide a macro exemple for trait implementation widget and this error use.

πŸ’– Support

  • If you like this game and want to contribute to more amazing features, consider giving me a coffee on kofi πŸ₯€to support development.

Run Game options

  • To see run options, use: rsnake --help
  • E.g., rsnake -z 🐼 -b πŸ₯ or cargo run -- -z 🐼 -b πŸ₯ (if from source)
  • To save a set of commands, create and alias or use --save to generate to a snake_config.toml file near the executable.
  • Then load with --load option. Shipped one

Installation from release

βœ… Prerequisites

  • πŸ’» Use a terminal that supports emoji
    • On Windows,the new microsoft terminal shipped with w11 (and compatible w10) supports emoji out of the box among other improvements.
    • On Linux / Android, if need install the Noto Emoji font : πŸ‘‰ Emoji font support for instructions.
    • Some screen display can flicker at 60 FPS in the terminal, use a decent display or an external monitor.

Running

  • Download the latest release from the releases page according to your OS.
  • Run the executable using the terminal or double click on the file if your OS support it.
  • For windows:
    • Search for "Terminal" in the search menu to launch it and set as default (to be able to run the snake by double clicking the .exe) or run rsnake from the terminal with:
    • cd "download path" then .\rsnake-x86_64-pc-windows-msvc.exe
  • For Linux/macOS/android:
    • cd "download path" && ./rsnake-x86_64-unknown-linux-gnu (or ./rsnake-x86_64-apple-darwin on macOS)
    • Or use the executable directly if you have it in your PATH.
  • See Run option below for more details.

Installation from source

βœ… Prerequisites

Running

  • Clone this repository git clone https://github.com/FromTheRags/rsnake.git
  • Go to the directory cd rsnake
  • To run the game, either:cargo run or cargo run --manifest-path rsnake/Cargo.toml (if in another directory)
  • To install the game as a command:
    cargo install --path .
    And then run the game with: rsnake
  • See Run option below for more details.

Architecture

  • Uses Arc & RwLock for synchronization.
  • Spawns separate threads for input handling, rendering (60Hz), and game logic execution.

Documentation generation

  • cargo doc --document-private-items --no-deps --open

Tests

  • As usual run them with cargo test the project is set up with a lib containing all the code, and a main.rs just calling it
  • As this is a widespread pattern providing full compliance with the Rust test ecosystem, allowing doc comment to be automatically tested, for example.
  • To have a coverage report, install llvm-cov: rustup component add llvm-tools-preview cargo install cargo-llvm-cov
  • And run cargo llvm-cov --open
  • A great coverage is not a goal for this project (tests are only there to showcase tests in rust),
  • For reference the current coverage is : codecov

Installation Rust and tools for Linux

Make sure your system has curl, gcc and git installed:

sudo apt update
sudo apt install curl git gcc -y

Use the official installer rustup, or any alternative method on https://www.rust-lang.org/tools/install (by your own):

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Follow the prompts in the terminal.
  • After installation, run:
echo "source '$HOME/.cargo/env'" >> ~/.bashrc
source ~/.bashrc
  • Verify the installation:
rustc --version

Enable Emoji Font Support

To properly display emoji characters in your terminal and system fonts, install an emoji-compatible font.

For Ubuntu/Debian-based distros:

sudo apt install fonts-noto-color-emoji

For Arch Linux:

sudo pacman -S noto-fonts-emoji

For Fedora:

sudo dnf install google-noto-emoji-color-fonts

Optional: Configure Font Fallback (if emojis still do not render)

Create or edit the following file:

~/.config/fontconfig/fonts.conf

Add:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <alias>
        <family>sans-serif</family>
        <prefer>
            <family>Noto Color Emoji</family>
        </prefer>
    </alias>
</fontconfig>

Then refresh the font cache:

fc-cache -f -v

Test Your Setup

Run:

echo "Rust is awesome! πŸ¦€πŸ”₯πŸš€"

You should see emojis rendered correctly in your terminal or text editors.

  • Then follow quick installation instructions

References

Contributors