Written in MicroPython for Raspberry Pi Pico and Pimoroni Pico Display
- Manages the main game data and functionality.
- Attributes include:
- score
- game states (e.g. title screen, playing, game over)
- Methods include:
- initialize level data
- update game
- get user input
- draw game objects
- Attributes include:
- A singly-linked list to represent the Snake.
- Attributes include:
- pointer to "head" SnakeNode
- current direction
- Methods include:
- push new head node
- pop tail node
- check if co-ordinate occupied by a SnakeNode
- update direction
- draw entire Snake
- draw green line between two SnakeNodes
- Attributes include:
- Single node in the Snake linked list.
- Attributes:
- position
- direction
- pointer to next node in list
- Attributes:
- Represents food for the Snake.
- Attribute:
- position
- Methods:
- draw food
- reset position to random location (always ensures new position is not inside Snake or walls)
- Attribute:
- Represents the game arena.
- Attribute:
- array of wall positions
- Methods:
- load wall positions from txt file
- draw walls
- check for collisions with walls
- Attribute:
- Each level is a 20x11 grid of cells.
- Each cell in the grid can contain:
- a SnakeNode
- a piece of Food
- a wall
- nothing
- The "positions" of SnakeNodes, Food, and walls are defined in terms of this grid of cells:
( 0, 0)
top-left(19, 0)
top-right( 0, 10)
bottom-left(19, 10)
bottom-right
- Levels are designed through a txt file:
- Each line represents a row
- Each character represents a cell
- The first 20 chars of the first 11 lines comprise the grid:
- any chars or lines outside that range are currently ignored
- extra parameters for each level could easily be added after line 11:
- E.g. a target score to pass each level (currently hard-coded as 5 to simplify debugging)
- The '0' char (zero) represents a wall
- The ' ' char (space) represents an empty cell
- Currently any char other than '0' represents an empty cell since all other chars are ignored
- It would be relatively simple to add different wall types or level objects since they would just be defined with another char
For example, the file level-2.txt contains the following text:
00000 00000 0 0 0 0 0 0 0 0 0 0 0 0 00000 00000
Which creates the following level:
NOTE: This image is blurry because it is a zoomed in photo of a very small screen. The actual Pico display module is surprising sharp and clear.