Snake in rust using ncurses crate
The game is playable
run with
cargo run
hjkl or arrow keys for movement
esc or p to pause
Click the image for asciinema
The unicode characters used are:
- 0x0298 ʘ
- 0x2550 ═
- 0x2551 ║
- 0x2554 ╔
- 0x2557 ╗
- 0x255a ╚
- 0x255d ╝
- 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
Snake going through the wallsFood spawning in the wallsBoxdraw 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)
- Autoplay the game using a simple pathfinding algorithm (to show on r/unixporn of course 🤡)
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.