Skip to content

uttarayan21/snake-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Snake in rust using ncurses crate

The game is playable

run with

cargo run

Keybinds

hjkl or arrow keys for movement

esc or p to pause

Screenshot

Click the image for asciinema

Need unicode support in terminal to print the snake

The unicode characters used are:

  • 0x0298 ʘ
  • 0x2550 ═
  • 0x2551 ║
  • 0x2554 ╔
  • 0x2557 ╗
  • 0x255a ╚
  • 0x255d ╝

Todo 🚧

  • Add a way to change the snake speed
    • Make a ui to switch the snake speed
    • Interal implementation of the snake speed
  • Implement Highscore System
    • Make the ui
    • Internal Implementation
  • Use unicode charachters to draw the snake

Bugs 🐛

  • Snake going through the walls
  • Food spawning in the walls
  • Boxdraw characters not rendering properly
  • Remove all the logging in the ui
  • Pausing delayed if esc is pressed but not if p is pressed.
  • The game flickers a lot after sometime (probably due to the constant redrawing of the whole board every tick)

Maybe in the future

  • Autoplay the game using a simple pathfinding algorithm (to show on r/unixporn of course 🤡)

Notes

A few notes about the game and how I should improve the game

A few notes about time complexity and redrawing with ncurses

The complexity of the program is O(n) every tick (time which changes relative to the speed)

However the place, I can improve is the redrawing of the game

At the time of writing the in commit f9be68e the game still redraws the total board and the total snake every tick.

I think this can be improved by only drawing the parts of the snake and the board when needed


Rust specific stuff I learned

char and std::char are not the same. char is the primitive type std::char is the char module.

As of Sat, 23 Jan 2021 21:49:13 +0000 the char::from_u32 (used in this program) is not valid in primitive char but is valid in std::char

ncursesw is not needed to print unicode characters. I have no clue where I got that idea from.