
Projekt to implementacja klasycznej gry Space Invaders na płytce Arduino UNO z graficznym wyświetlaczem OLED SSD1306. Gracz steruje statkiem na dole ekranu, strzela pociskami do nadlatujących fal obcych a po zniszczeniu wszystkich przeciwników przechodzi na kolejny poziom z rosnącą prędkością i liczbą bomb. Gracz dysponuje trzema życiami, a w grze widoczny jest licznik punktów oraz różne ekrany stanu gry: START, POKAŻ POZIOM, GRA, WYGRANA i PRZEGRANA.
[przykładowe - prosimy o edycję]
1. Płytka Arduino UNO
2. wyświetlacz SSD1306
3. 3 guziki
(wszystkie powyższe elementy zawierają się w Shield SIC Game Console)
Aby odpalić grę wystarczy posiadać:
1.Komputer lub laptop z zainstalowany arduino i odpowiednimi bibliotekami
2.Płytkę Shield SIC Game Console
1. Sprzęt i biblioteki
- Mikrokontroler: Arduino UNO.
- Wyświetlacz: SSD1306, 128×64 px, interfejs I²C (adres 0x3C).
- Biblioteki:
Wire
– komunikacja I²C;Adafruit_GFX
iAdafruit_SSD1306
– obsługa grafiki OLED;- włączony Watchdog (2 s) do ochrony przed zawieszeniem.
2. Grafika i bitmapy
Wszystkie grafiki (działko w trzech wariantach życia, trzy typy i klatki animacji obcych, pociski, bomby, ekran startowy) są zapisane w pamięci Flash (PROGMEM
) w pliku „bitmap.h”.
- Obcy: 8×8 pikseli (top, middle, bottom), animowane klatki
InvaderTopGfx
,InvaderMiddleGfx
itd. - Działko: 16×8 pikseli, warianty
ca1
,ca2
,ca3
odpowiadające kolejnym poziomom życia gracza. - Pociski/Bomby: wąskie pionowe linie 1×4 piksele.
3. Mechanika i logika gry
- Stany gry: zarządzane w enumie
State { START, SHOW_LEVEL, PLAY, WIN, LOSE }
. - Ruch obcych: co ustalony interwał (
alienStepInt
) poruszają się w prawo lub lewo; po dojściu do krawędzi zmieniają kierunek i schodzą niżej. Prawdopodobieństwo wypuszczenia bomby rośnie wraz z poziomem. - Strzały: gracz może oddać pocisk co najmniej co 150 ms (
SHOOT_DEBOUNCE
); pociski przesuwają się w górę, aż znikną lub trafią obcego. - Bomby: losowo generowane z pozycji żywych obcych, lecą w dół z prędkością 2 piksele/klatkę.
- Kolizje: wykrywane przez funkcję
rectHit(x1,y1,w1,h1, x2,y2,w2,h2)
. Trafienie obcego to +10 pkt; kolizja pocisku z bombą niweluje oba. Zderzenie bomby lub obcego z działkiem powoduje utratę życia, a przy braku żyć — stan LOSE. - Poziomy: po wyeliminowaniu wszystkich obcych (
aliensAlive == 0
) następuje stan WIN, a po krótkiej pauzie gra przechodzi do kolejnego poziomu z większą prędkością obcych i większym „bombChance”.
4. Sterowanie
- Przyciski:
- lewo: pin 9,
- prawo: pin 11,
- strzał: pin 7,
z aktywnymINPUT_PULLUP
.
- Obsługa wejścia: w pętli
loop()
funkcjahandleInput()
sprawdza stan przycisków i przesuwa działko (z ograniczeniem do krawędzi ekranu), a także inicjuje strzał.
5. Wyświetlanie
- Ekran START: bitmapa
start[]
. - Ekran poziomu: napis „Level X” wyśrodkowany.
- Główna klatka gry: rysowanie obcych, bomb, pocisku, działka, oraz licznika punktów w lewym górnym rogu.
- Ekran przegranej: „GAME OVER” i wynik.
Zip poniżej