Space Invaders

Typ_projektu
Arduino
Zdjecie główne
Krótki opis projektu

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.

Niezbędne elementy

[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)

Sprzęt

Aby odpalić grę wystarczy posiadać:

1.Komputer lub laptop z zainstalowany arduino i odpowiednimi bibliotekami

2.Płytkę Shield SIC Game Console

Opis projektu

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 i Adafruit_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 aktywnym INPUT_PULLUP.
  • Obsługa wejścia: w pętli loop() funkcja handleInput() 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.
kod programu
Zip poniżej 
Tagi
#Arduino #Gra #ProstyProjket #PoziomWstępny #SpaceInvaders