Arduino Powered Space Invaders Like Game on 1602 LCD Character Display /AKA LCD Invaders/
by arduinocelentano in Circuits > Arduino
3851 Views, 7 Favorites, 0 Comments
Arduino Powered Space Invaders Like Game on 1602 LCD Character Display /AKA LCD Invaders/
There is no need to introduce a legendary “Space Invaders” game. The most interesting feature of this project is that it uses text display for graphical output. It is achieved by implementing 8 custom characters.
You may download the complete Arduino sketch here:
https://github.com/arduinocelentano/LCD_invaders/
🔗 You could also check out another project where I teach how to stream video on a character display and my salvaging LCD tutorial.
Supplies
- Arduino UNO board;
- LCD keypad shield;
- USB cable for sketch uploading.
Game Design
The screen does not allow to control separate pixels and provides just two lines of text which is not enough for game. But it allows to implement up to 8 custom characters. The trick is to process each 5x8 pixels character as two 5x4 pixels game cells. That is to say, we’ll have 16x4 game field, which makes sense. 8 characters is just enough to implement sprites for player's spaceship, bullets and animated aliens. Since the sprites are 5x4 and the characters are 5x8, we’ll need some characters with two sprites like “a spaceship and a bullet” sprite, “an alien and a bullet sprite” etc. All the custom characters are shown on the picture.
Processing Buttons
Typically, all the buttons on an LCD shield are connected to the same analogue pin. There are different versions of LCD shield, so you’ll probably need to slightly change integer literals in my button processing code.
Classes Hierarchy
I have implemented a base class GameObject which has coordinates and speed fields and processes collisions. Classes Ship, Alien and Bullet are inherited from it.
Updating the Screen
Rendering logic may look somewhat complicated because we have to transform 16x4 game logic into 16x2 display. Please read the comments in the code for further reference. To avoid flickering, I used a two dimensional char array as a text buffer. It allows to use a couple (one for each line) of print operations to update the screen.
Game Logic
Here is the heart of the game. The main loop changes coordinates of all the objects, checks all sorts of collisions and button press events. The speed of aliens and their shooting probability increases from level to level. But the score reward increases as well.
An Easter Egg
There is no level after level 42. Seriously. It’s the Ultimate Level of Life, The Universe, and Everything. :)