
Projekt przedstawia prostą, ale wciągającą grę typu Space Shooter, działającą na mikrokontrolerze Arduino UNO z wykorzystaniem wyświetlacza OLED 128x64 piksele oraz shielda SIC Game Console. Gracz steruje statkiem kosmicznym, którego zadaniem jest eliminowanie nadlatujących wrogów. Gra posiada menu wyboru trudności, system punktów, żyć oraz ekran końcowy z wynikiem
1. Płytka Arduino UNO lub kompatybilna
2. Shield SIC Game Console
Komputer PC z zainstalowanym Arduino IDE
Projekt przedstawia klasyczną grę zręcznościową typu Space Shooter, w której gracz steruje statkiem kosmicznym i eliminuje nadlatujących przeciwników. Gra została wykonana na ekranie OLED o rozdzielczości 128x64 piksele, a sterowanie odbywa się za pomocą przycisków kierunkowych oraz przycisku strzału.
Po uruchomieniu urządzenia, na ekranie pojawia się menu główne z możliwością wyboru jednego z trzech poziomów trudności: Easy, Normal oraz Hard. Poziomy różnią się między sobą szybkością statku gracza oraz częstotliwością pojawiania się przeciwników. Po dokonaniu wyboru gracz rozpoczyna rozgrywkę.

Rozgrywka polega na sterowaniu statkiem i unikanie kontaktu z wrogami, jednocześnie starając się ich zestrzelić. Przeciwnicy pojawiają się losowo po lewej stronie ekranu i przesuwają się w prawą stronę. Jeśli przeciwnik nie zostanie zniszczony i minie statek gracza, odejmowane jest jedno życie. Gracz zaczyna z trzema życiami, a po ich utracie gra się kończy. Każdy zniszczony przeciwnik to +10 punktów do wyniku.
Gra została zaprojektowana w taki sposób, by automatycznie zwiększała poziom trudności w trakcie trwania rozgrywki – co kilka sekund zmniejszany jest odstęp między pojawiającymi się przeciwnikami. Dzięki temu, niezależnie od wybranego poziomu startowego, gra staje się coraz trudniejsza im dłużej gracz przetrwa. Na ekranie wyświetlane są informacje o bieżącym wyniku oraz liczbie pozostałych żyć.


Po utracie wszystkich żyć, gra przechodzi do ekranu końcowego, na którym wyświetlany jest osiągnięty wynik, napis „GAME OVER” oraz grafika czaszki (bitmapa). Gracz może w każdej chwili ponownie rozpocząć grę poprzez naciśnięcie przycisku. Po ekranie końcowym gracz ma możliwość ponownego rozpoczęcia gry poprzez naciśnięcie przycisku FIRE, bez konieczności resetowania całego urządzenia. Gra wraca wtedy do ekranu wyboru trudności, dzięki czemu można od razu zagrać ponownie na innym poziomie lub spróbować pobić własny wynik.

1. Domyślna orientacja ekranu OLED
Po podłączeniu wyświetlacza OLED, domyślnie działa on w orientacji poziomej. W projekcie gra miała być wyświetlana pionowo, dlatego konieczne było jej obrócenie. Zostało to rozwiązane przez użycie funkcji display.setRotation(1), co pozwoliło ustawić ekran w orientacji pionowej. Wymagało to również dostosowania całych współrzędnych i rysowania elementów względem nowego układu.
2. Trudność w stworzeniu bitmap elementów gry
Elementy takie jak statek gracza, przeciwnicy czy czaszka na ekranie końcowym zostały wygenerowane jako bitmapy. Do ich stworzenia wykorzystano ChatGPT, ale nie było to proste – większość propozycji na początku była nieczytelna albo nie mieściła się dobrze na ekranie 128x64. Ostatecznie, po wielu próbach i poprawkach, udało się uzyskać sensowne, rozpoznawalne kształty.
3. Restart gry bez resetowania Arduino
Po zakończeniu gry konieczne było zapewnienie możliwości jej ponownego uruchomienia bez fizycznego resetowania urządzenia. W tym celu stworzono prosty system zarządzania stanami (inGame, gameOver), który umożliwia płynne przechodzenie między ekranami. Gracz po zakończeniu gry może nacisnąć przycisk FIRE, co automatycznie przywraca ekran startowy i pozwala rozpocząć kolejną rozgrywkę.
Ustaw odpowiedni język programowania (ostatnia ikona powyżej)