
Projekt jest implementacją klasycznej gry Arkanoid. Jest to jedna z pierwszych gier zręcznościowych wykorzystujących grafikę na wyświetlaczach. Pojawiła się w automatach i na domowych konsolach w latach 80. XX wieku, jako rozwinięcie pomysłu z klasycznego Breakouta.
Gra rozgrywa się na dwuwymiarowej planszy do gry podzielonej na prostokątne pola - celem gracza jest odbijanie piłki za pomocą poziomej platformy i niszczenie bloczków rozmieszczonych na ekranie. Dynamika gry wynika z prostych zasad odbić i kolizji, a jej trudność rośnie z kolejnymi poziomami gry.
1. Płytka Arduino UNO
2. Shield SIC Game Console
Gra wyświetlana jest na ekranie OLED 128x64 piksele z wykorzystaniem biblioteki Adafruit SSD1306. Obsługuje przyciski kierunkowe (lewo/prawo) oraz przycisk startu (zatwierdzania):
-
BUTTON_LEFT
– przesunięcie platformy w lewo -
BUTTON_RIGHT
– przesunięcie platformy w prawo -
BUTTON_CONTINUE
– zatwierdzanie, przejścia i start gry
Gra rozgrywa się na dwuwymiarowej planszy złożonej z 16 kolumn i 8 wierszy komórek (bloczków), które mogą być zwykłe lub specjalne (z efektem power-up). Gracz steruje platformą u dołu ekranu, której zadaniem jest odbijanie piłki w stronę bloczków.
Piłka odbija się od ścian, platformy i bloczków. Trafienie w bloczek powoduje jego zniknięcie i zmianę kierunku ruchu piłki. Jeżeli piłka dotknie dolnej krawędzi ekranu, gracz przegrywa – wyświetlana jest animacja przegranej, a gracz może uruchomić grę ponownie przyciskiem.
ELEMENTY GRY I ICH DZIAŁANIE
1. Ekran początkowy
Gra rozpoczyna się od ekranu tytułowego z nazwą „Arkanoid” oraz inicjałami autorów. Po chwili automatycznie uruchamiana jest gra.

2. Obsługa wyświetlacza
Do wyświetlania elementów gry wykorzystywana jest biblioteka Adafruit SSD1306 – gra rysuje prostokąty (bloczków, platformy), kwadraty (piłki), tekst i animacje. Ekran odświeżany jest co 30 ms.
3. Poziomy trudności
Gra zawiera trzy poziomy, każdy o innym układzie bloczków i prędkości piłki:
-
Poziom 1: Jeden rząd bloczków – poziom łatwy, gracz uczy się zasad, porusza paletką i zbija pierwsze klocki
-
Poziom 2: Kolumny bloczków z losowymi power-upami – poziom średni, piłka może przyspieszać, a gracz musi być bardziej precyzyjny
-
Poziom 3: Ramka bloczków i losowe przeszkody – poziom trudny, duża liczba trudnych do zbicia klocków, szybka piłka i ograniczony margines błędu
Po zniszczeniu wszystkich bloczków gracz przechodzi automatycznie do kolejnego poziomu. Po poziomie trzecim gra wraca do poziomu pierwszego.
4. Power-upy
Power-upy to specjalne bloczki, które są losowo rozstawiane tylko na początku poziomu 2 i 3. Gracz nie ma wpływu na ich pojawienie – są ustalane losowo przy generowaniu planszy.
Po trafieniu w bloczek z power-upem:
-
platforma gracza powiększa się z 32 do 48 pikseli,
-
efekt trwa dokładnie 5 sekund,
-
po tym czasie platforma wraca do swojej normalnej szerokości.
Power-upy nie pojawiają się ponownie – działają raz po trafieniu i nie są odświeżane w trakcie poziomu.
5. Zasady przegranej
Gdy piłka spadnie poniżej ekranu, zmienna GAMEOVER
zostaje aktywowana. Gra zatrzymuje się i wyświetlana jest animacja smutnej buzi. Na ekranie pojawia się pytanie „Jeszcze raz?”, a gracz może rozpocząć nową grę naciskając przycisk LEFT
.
Niezależnie od tego, na którym poziomie gracz przegra (1, 2 lub 3), gra zawsze resetuje się do poziomu pierwszego. Nie ma możliwości kontynuacji z poziomu, na którym nastąpiła przegrana. Aby ukończyć wszystkie poziomy, trzeba przejść je w jednej sesji bez utraty piłki.
6. Obsługa wejścia
Przyciski LEFT
i RIGHT
przesuwają platformę w lewo i prawo w granicach ekranu. Stan przycisków odczytywany jest co iterację pętli loop()
.
DZIAŁANIE WAŻNYCH FUNKCJI
-
start()
– inicjalizuje poziom gry, pozycję platformy, piłki i stan planszy -
draw()
– rysuje wszystkie elementy gry (platforma, piłka, bloczki) -
win()
– automatycznie przechodzi do kolejnego poziomu -
reset()
– resetuje grę do poziomu pierwszego -
loadLevel(level)
– ustawia układ bloczków w zależności od poziomu -
showSadAnimation()
– animacja przegranej -
showTitleScreen()
– ekran początkowy
NAPOTKANE TRUDNOŚCI
W trakcie testowania gry pojawiły się pewne trudności techniczne. W bardziej złożonych planszach, przy dużej liczbie klocków, zdarzało się, że część z nich nie reagowała poprawnie na kolizje - niektóre bloczki potrafiły się zawiesić i nie chciały ulec zniszczeniu. W szczególności przy trafieniu w kant bloczka, nie zawsze było wykrywane poprawne trafienie, przez co blok nie znikał. Złożoność kolizji i ograniczenia platformy (Arduino UNO + OLED) stanowiły duże wyzwanie optymalizacyjne.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <avr/pgmspace.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
//tutaj tworzymy animacje smutnej buzi po przegranej
#define FRAME_DELAY (42)
#define FRAME_WIDTH (48)
#define FRAME_HEIGHT (48)
#define FRAME_COUNT (sizeof(frames) / sizeof(frames[0]))
const byte PROGMEM frames[][288] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,15,240,0,12,48,0,63,252,0,12,48,0,120,30,0,12,48,0,224,7,0,12,48,1,192,3,128,12,48,3,128,1,192,12,48,3,0,0,192,12,24,3,0,0,192,24,24,6,0,0,96,24,24,6,0,0,96,24,12,7,255,255,224,48,12,7,255,255,224,48,6,0,0,0,0,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,12,24,24,0,0,0,14,24,48,0,0,0,12,12,48,0,0,0,1,12,48,0,0,0,1,12,48,0,15,240,2,12,48,0,63,252,0,12,48,0,120,30,0,12,48,0,224,7,0,12,48,1,192,3,128,12,48,3,128,1,192,12,48,3,0,0,192,12,24,3,0,0,192,24,24,6,0,0,96,24,24,6,0,0,96,24,12,7,255,255,224,48,12,7,255,255,224,48,6,0,0,0,0,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,0,24,24,0,0,0,14,24,48,0,0,0,15,12,48,0,0,0,5,140,48,0,0,0,4,140,48,0,15,240,4,204,48,0,63,252,4,76,48,0,120,30,4,76,48,0,224,7,7,204,48,1,192,3,131,140,48,3,128,1,192,12,48,3,0,0,192,12,24,3,0,0,192,24,24,6,0,0,96,24,24,6,0,0,96,24,12,7,255,255,224,48,12,7,255,255,224,48,6,0,0,0,0,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,15,12,48,0,0,0,15,140,48,0,0,0,7,204,48,0,15,240,6,236,48,0,63,252,6,124,48,0,120,30,6,60,48,0,224,7,6,28,48,1,192,3,134,28,48,3,128,1,198,28,48,3,0,0,198,28,24,3,0,0,199,56,24,6,0,0,99,248,24,6,0,0,97,248,12,7,255,255,224,48,12,7,255,255,224,48,6,0,0,0,0,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,7,192,3,224,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,24,24,4,24,24,0,0,0,0,24,24,0,0,0,0,24,48,24,0,0,0,12,48,16,0,0,6,12,48,0,0,0,7,140,48,0,0,0,7,204,48,0,31,248,6,236,48,0,60,60,6,124,48,0,224,7,6,60,48,0,192,3,2,28,48,1,128,1,130,28,48,3,0,0,195,28,24,3,0,0,195,28,24,6,0,0,99,24,24,6,0,0,99,248,12,6,31,248,97,248,12,7,255,255,224,48,6,7,224,7,224,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,7,192,3,224,96,6,31,240,15,248,96,12,56,120,30,28,48,12,32,24,24,4,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,24,0,0,0,12,48,56,0,0,0,12,48,56,0,0,2,12,48,48,0,0,7,140,48,0,7,224,7,204,48,0,31,248,3,108,48,0,120,30,3,60,48,0,224,7,3,60,48,1,192,3,131,28,48,1,128,1,131,28,24,3,0,0,195,28,24,3,0,0,195,12,24,6,0,0,99,12,12,6,0,0,97,156,12,6,0,0,97,248,6,7,255,255,224,112,6,7,255,255,224,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,15,224,7,240,96,6,63,240,15,252,96,12,48,24,24,12,48,12,0,0,0,0,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,16,0,0,0,12,48,120,0,0,0,12,48,120,0,0,0,12,48,208,0,0,0,12,48,144,0,0,3,140,49,144,31,248,3,204,48,240,63,252,3,236,48,224,240,15,3,60,48,0,192,3,3,60,48,1,128,1,131,28,24,3,128,1,195,12,24,3,0,0,193,12,24,6,0,0,97,12,12,6,0,0,97,140,12,6,0,0,97,140,6,7,255,255,225,252,6,7,255,255,224,248,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,7,192,3,224,96,6,31,240,15,248,96,12,56,120,30,28,48,12,32,24,24,4,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,48,0,0,0,12,48,248,0,0,0,12,49,240,0,0,0,12,51,176,7,224,0,12,55,48,31,248,3,12,54,48,120,30,3,204,54,112,224,7,3,252,54,113,192,3,129,60,62,113,128,1,129,156,31,227,0,0,193,156,31,227,0,0,193,140,27,134,0,0,97,140,12,6,0,0,97,142,12,6,0,0,97,134,6,7,255,255,225,142,6,7,255,255,224,252,3,0,0,0,0,252,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,7,192,3,224,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,24,24,4,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,112,0,0,0,12,49,240,0,0,0,12,51,240,31,248,0,12,55,240,60,60,0,12,55,96,224,7,3,140,62,96,192,3,3,236,62,97,128,1,129,252,60,99,0,0,193,188,28,99,0,0,193,156,31,230,0,0,97,140,31,198,0,0,97,140,15,134,31,248,97,134,12,7,255,255,225,134,6,7,224,7,225,134,6,0,0,0,0,198,3,0,0,0,0,252,1,128,0,0,1,248,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,96,15,240,0,12,49,224,63,252,0,12,51,224,120,30,0,12,55,224,224,7,1,140,62,225,192,3,131,236,60,227,128,1,193,252,60,227,0,0,193,188,28,195,0,0,193,156,28,198,0,0,97,140,31,198,0,0,97,142,15,199,255,255,225,134,15,7,255,255,225,134,6,0,0,0,1,134,6,0,0,0,0,198,3,0,0,0,0,254,1,128,0,0,1,252,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,15,224,7,240,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,16,0,4,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,15,240,0,12,48,192,63,252,0,12,49,224,120,30,0,12,55,224,224,7,0,12,62,193,192,3,128,12,60,195,128,1,192,12,60,195,0,0,192,12,24,195,0,0,192,24,24,198,0,0,96,24,25,198,0,0,96,24,29,198,255,255,96,48,31,135,255,255,224,48,15,0,0,0,0,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,3,128,1,192,96,6,31,240,15,248,96,12,56,120,30,28,48,12,48,24,24,12,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,15,240,0,12,48,0,63,252,0,12,48,192,120,30,0,12,51,192,224,7,0,12,55,193,192,3,128,12,63,195,128,1,192,12,61,195,0,0,192,12,25,131,0,0,192,24,57,134,0,0,96,24,57,134,0,0,96,24,57,134,31,248,96,48,63,135,255,255,224,48,31,0,0,0,32,96,15,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,15,224,7,240,96,6,63,240,15,252,96,12,48,24,24,12,48,12,0,0,0,0,48,24,0,0,0,0,24,24,0,0,0,8,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,15,240,0,12,48,0,63,252,0,12,48,0,120,30,0,12,49,192,224,7,0,12,55,193,192,3,128,12,63,195,128,1,192,12,61,131,0,0,192,12,57,131,0,0,192,24,57,134,0,0,96,24,49,134,0,0,96,24,49,134,0,0,96,48,51,135,255,255,224,48,63,131,255,255,192,96,31,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,7,192,3,224,96,6,31,240,15,248,96,12,56,120,30,28,48,12,32,24,24,4,48,24,0,0,0,0,24,24,0,0,0,12,24,24,0,0,0,14,24,48,0,0,0,12,12,48,0,0,0,1,12,48,0,0,0,1,12,48,0,0,0,2,12,48,0,31,248,0,12,48,0,60,60,0,12,49,192,224,7,0,12,55,192,192,3,0,12,63,129,128,1,128,12,61,131,0,0,192,12,57,131,0,0,192,24,57,134,0,0,96,24,49,134,0,0,96,24,49,134,0,0,96,48,51,135,255,255,224,48,63,7,255,255,224,96,31,0,0,0,0,224,15,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,7,192,3,224,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,24,24,4,24,24,0,0,0,0,24,24,0,0,0,14,24,48,0,0,0,15,12,48,0,0,0,5,140,48,0,0,0,4,140,48,0,0,0,4,204,48,0,7,224,4,76,48,0,31,248,4,76,48,0,120,30,7,204,48,0,224,7,3,140,48,1,192,3,128,12,48,1,128,1,128,12,24,3,0,0,192,24,24,3,0,0,192,24,24,6,0,0,96,24,12,6,0,0,96,48,12,6,255,255,96,48,6,7,255,255,224,96,6,4,0,0,32,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,15,12,48,0,0,0,15,140,48,0,0,0,7,204,48,0,0,0,6,236,48,0,0,0,6,124,48,0,31,248,6,60,48,0,63,252,6,28,48,0,240,15,6,28,48,0,192,3,6,28,48,1,128,1,134,28,24,3,128,1,199,56,24,3,0,0,195,248,24,6,0,0,97,248,12,6,0,0,96,48,12,6,127,254,96,48,6,7,255,255,224,96,6,7,128,1,224,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,7,192,3,224,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,24,24,4,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,6,12,48,0,0,0,7,140,48,0,0,0,7,204,48,0,7,224,6,236,48,0,31,248,6,124,48,0,120,30,6,60,48,0,224,7,2,28,48,1,192,3,130,28,48,1,128,1,131,28,24,3,0,0,195,28,24,3,0,0,195,24,24,6,0,0,99,248,12,6,0,0,97,248,12,6,255,255,96,48,6,7,255,255,224,96,6,4,0,0,32,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,7,192,3,224,96,6,31,240,15,248,96,12,56,120,30,28,48,12,32,24,24,4,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,24,0,0,0,12,48,16,0,0,0,12,48,0,0,0,2,12,48,0,0,0,7,140,48,0,31,248,7,204,48,0,60,60,3,108,48,0,224,7,3,60,48,0,192,3,3,60,48,1,128,1,131,28,48,3,0,0,195,28,24,3,0,0,195,28,24,6,0,0,99,12,24,6,0,0,99,12,12,6,0,0,97,156,12,7,255,255,225,248,6,7,255,255,224,112,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,15,224,7,240,96,6,63,240,15,252,96,12,48,24,24,12,48,12,0,0,0,0,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,24,0,0,0,12,48,56,0,0,0,12,48,56,0,0,0,12,48,48,15,240,0,12,48,0,63,252,3,140,48,0,120,30,3,204,48,0,224,7,3,236,48,1,192,3,131,60,48,3,128,1,195,60,48,3,0,0,195,28,24,3,0,0,195,12,24,6,0,0,97,12,24,6,0,0,97,12,12,6,0,0,97,140,12,7,255,255,225,140,6,3,255,255,193,252,6,0,0,0,0,248,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,3,128,1,192,96,6,31,240,15,248,96,12,56,120,30,28,48,12,48,24,24,12,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,16,0,0,0,12,48,120,0,0,0,12,48,120,0,0,0,12,48,208,15,240,0,12,48,144,63,252,0,12,49,144,120,30,3,12,48,240,224,7,3,204,48,225,192,3,131,252,48,3,128,1,193,60,48,3,0,0,193,156,24,3,0,0,193,156,24,6,0,0,97,140,24,6,0,0,97,140,12,6,31,248,97,142,12,7,255,255,225,134,6,0,0,0,33,142,6,0,0,0,0,252,3,0,0,0,0,252,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,15,224,7,240,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,16,0,4,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,48,0,0,0,12,48,248,0,0,0,12,49,240,15,240,0,12,51,176,63,252,0,12,55,48,120,30,0,12,54,48,224,7,3,140,54,113,192,3,131,236,54,115,128,1,193,252,62,115,0,0,193,188,31,227,0,0,193,156,31,230,0,0,97,140,27,134,0,0,97,140,12,6,255,255,97,134,12,7,255,255,225,134,6,0,0,0,1,134,6,0,0,0,0,198,3,0,0,0,0,252,1,128,0,0,1,248,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,112,0,0,0,12,49,240,15,240,0,12,51,240,63,252,0,12,55,240,120,30,0,12,55,96,224,7,1,140,62,97,192,3,131,236,62,99,128,1,193,252,60,99,0,0,193,188,28,99,0,0,193,156,31,230,0,0,97,140,31,198,0,0,97,142,15,135,255,255,225,134,12,7,255,255,225,134,6,0,0,0,1,134,6,0,0,0,0,198,3,0,0,0,0,254,1,128,0,0,1,252,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,7,192,3,224,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,24,24,4,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,96,0,0,0,12,49,224,31,248,0,12,51,224,60,60,0,12,55,224,224,7,0,12,62,224,192,3,0,12,60,225,128,1,128,12,60,227,0,0,192,12,28,195,0,0,192,24,28,198,0,0,96,24,31,198,0,0,96,24,15,198,31,248,96,48,15,7,255,255,224,48,6,7,224,7,224,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,7,192,3,224,96,6,31,240,15,248,96,12,56,120,30,28,48,12,32,24,24,4,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,192,7,224,0,12,49,224,31,248,0,12,55,224,120,30,0,12,62,192,224,7,0,12,60,193,192,3,128,12,60,193,128,1,128,12,24,195,0,0,192,24,24,195,0,0,192,24,25,198,0,0,96,24,29,198,0,0,96,48,31,134,0,0,96,48,15,7,255,255,224,96,6,7,255,255,224,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,15,224,7,240,96,6,63,240,15,252,96,12,48,24,24,12,48,12,0,0,0,0,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,192,31,248,0,12,51,192,63,252,0,12,55,192,240,15,0,12,63,192,192,3,0,12,61,193,128,1,128,12,25,131,128,1,192,24,57,131,0,0,192,24,57,134,0,0,96,24,57,134,0,0,96,48,63,134,0,0,96,48,31,7,255,255,224,96,15,7,255,255,224,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,7,192,3,224,96,6,31,240,15,248,96,12,56,120,30,28,48,12,32,24,24,4,48,24,0,0,0,0,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,7,224,0,12,48,0,31,248,0,12,49,192,120,30,0,12,55,192,224,7,0,12,63,193,192,3,128,12,61,129,128,1,128,12,57,131,0,0,192,24,57,131,0,0,192,24,49,134,0,0,96,24,49,134,0,0,96,48,51,134,0,0,96,48,63,135,255,255,224,96,31,7,255,255,224,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,7,192,3,224,96,12,31,240,15,248,48,12,56,56,28,28,48,24,32,24,24,4,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,31,248,0,12,48,0,60,60,0,12,49,192,224,7,0,12,55,192,192,3,0,12,63,129,128,1,128,12,61,131,0,0,192,12,57,131,0,0,192,24,57,134,0,0,96,24,49,134,0,0,96,24,49,134,31,248,96,48,51,135,255,255,224,48,63,7,224,7,224,96,31,0,0,0,0,224,15,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,255,255,0,0,0,3,192,3,192,0,0,15,0,0,240,0,0,28,0,0,56,0,0,112,0,0,12,0,0,224,0,0,7,0,0,192,0,0,3,0,1,128,0,0,1,128,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,12,15,224,7,240,48,12,60,248,31,60,48,24,48,24,24,12,24,24,0,0,0,0,24,24,0,0,0,0,24,48,0,0,0,0,12,48,0,0,0,0,12,48,0,0,0,0,12,48,0,15,240,0,12,48,0,63,252,0,12,48,0,120,30,0,12,48,0,224,7,0,12,48,1,192,3,128,12,48,3,128,1,192,12,48,3,0,0,192,12,24,3,0,0,192,24,24,6,0,0,96,24,24,6,0,0,96,24,12,7,255,255,224,48,12,7,255,255,224,48,6,0,0,0,0,96,6,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,48,0,0,12,0,0,28,0,0,56,0,0,15,0,0,240,0,0,3,224,7,192,0,0,0,255,255,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
#define OLED_RESET -1
#define SCREEN_I2C_ADDR 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define BUTTON_LEFT 8
#define BUTTON_RIGHT 10
#define BUTTON_CONTINUE 6
//smutna animacja
int currentLevel = 1;
bool POWER_ACTIVE = false;
unsigned long POWER_START_TIME = 0;
bool MAP[16][8];
byte BLOCK_TYPE[16][8];
int WX;
byte WL = 32;
float BX, BY;
float AX = 2, AY = -2;
bool WIN = false;
bool GAMEOVER = false;
void showTitleScreen();
void start();
void showSadAnimation();
void draw();
void win();
void reset();
void loadLevel(int level);
void setup() {
Serial.begin(9600);
pinMode(BUTTON_LEFT, INPUT_PULLUP);
pinMode(BUTTON_RIGHT, INPUT_PULLUP);
pinMode(BUTTON_CONTINUE, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_I2C_ADDR)) {
Serial.println(F("OLED init failed"));
while (1);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
showTitleScreen();
start();
}
void loop() {
if (GAMEOVER) {
showSadAnimation();
display.clearDisplay();
display.setCursor(20, 30);
display.setTextSize(1);
display.print("Jeszcze raz?");
display.setCursor(0, 57);
display.setTextSize(1);
display.print("<-- TAK");
display.display();
while (true) {
if (digitalRead(BUTTON_LEFT) == LOW) {
reset();
return;
}
}
}
if (digitalRead(BUTTON_LEFT) == LOW) WX -= 4;
if (digitalRead(BUTTON_RIGHT) == LOW) WX += 4;
if (WX < 0) WX = 0;
if (WX > SCREEN_WIDTH - WL) WX = SCREEN_WIDTH - WL;
BX += AX;
BY += AY;
if (BX < 0 || BX > SCREEN_WIDTH - 3) AX = -AX;
if (BY < 0) AY = -AY;
if (BY >= SCREEN_HEIGHT - 3) {
GAMEOVER = true;
return;
}
if (BX + 3 >= WX && BX <= WX + WL && BY + 3 >= 60) {
AY = -AY;
}
int cx = int(BX / 8);
int cy = int(BY / 4);
if (cx >= 0 && cx < 16 && cy >= 0 && cy < 8 && MAP[cx][cy]) {
if (BLOCK_TYPE[cx][cy] == 1) {
WL = 48;
POWER_ACTIVE = true;
POWER_START_TIME = millis();
if (WX + WL > SCREEN_WIDTH) WX = SCREEN_WIDTH - WL;
}
MAP[cx][cy] = false;
AY = -AY;
}
display.clearDisplay();
draw();
display.display();
if (POWER_ACTIVE && millis() - POWER_START_TIME > 5000) {
POWER_ACTIVE = false;
WL = 32;
if (WX > SCREEN_WIDTH - WL) WX = SCREEN_WIDTH - WL;
}
delay(30);
}
void start() {
WX = 64 - (WL / 2);
for (byte x = 0; x < 16; x++) {
for (byte y = 0; y < 8; y++) {
MAP[x][y] = false;
BLOCK_TYPE[x][y] = 0;
}
}
if (WX > SCREEN_WIDTH - WL) WX = SCREEN_WIDTH - WL;
loadLevel(currentLevel);
if (currentLevel == 1) {
AX = 3; AY = -3;
WL = 32;
} else if (currentLevel == 2) {
AX = 2.5; AY = -2.5; // Mniejsza prędkość
WL = 25;
} else if (currentLevel == 3) {
AX = 2.5; AY = -2.5;
WL = 25;
}
BX = 64; BY = 52;
GAMEOVER = false;
}
void draw() {
display.fillRect(WX, 60, WL, 3, SSD1306_WHITE);
display.fillRect(BX, BY, 3, 3, SSD1306_WHITE);
WIN = true;
for (byte x = 0; x < 16; x++) {
for (byte y = 0; y < 8; y++) {
if (MAP[x][y]) {
WIN = false;
if (BLOCK_TYPE[x][y] == 1) {
display.drawRect(x * 8, y * 4, 7, 3, SSD1306_WHITE);
} else {
display.fillRect(x * 8, y * 4, 7, 3, SSD1306_WHITE);
}
}
}
}
if (WIN) win();
}
void win() {
currentLevel++;
if (currentLevel > 3) currentLevel = 1;
start();
}
void reset() {
currentLevel = 1;
start();
}
void loadLevel(int level) {
if (level == 1) {
// jeden wiersz bloczków na górze
for (byte x = 0; x < 16; x++) {
MAP[x][0] = true;
}
} else if (level == 2) {
// naprzemienne bloczki z power-upami
for (byte x = 0; x < 16; x++) {
if (x % 4 == 0) { // tylko co 4 kolumna
for (byte y = 0; y < 4; y++) { // tylko 4 klocki w kolumnie
MAP[x][y] = true;
BLOCK_TYPE[x][y] = (random(0, 6) == 0) ? 1 : 0; // rzadziej power-upy
}
}
}
} else if (level == 3) {
// trudny poziom: ramka + losowe bloczki w środku
for (byte x = 0; x < 16; x++) {
for (byte y = 0; y < 8; y++) {
if (x == 0 || x == 15 || y == 0 || y == 7 || (random(0, 10) < 2)) {
MAP[x][y] = true;
BLOCK_TYPE[x][y] = random(0, 5) == 0 ? 1 : 0;
}
}
}
}
}
void showSadAnimation() {
for (int i = 0; i < FRAME_COUNT; i++) {
display.clearDisplay();
display.drawBitmap(40, 8, frames[i], FRAME_WIDTH, FRAME_HEIGHT, SSD1306_WHITE);
display.display();
delay(FRAME_DELAY);
}
}
void showTitleScreen() {
display.clearDisplay();
display.setCursor(20, 20);
display.setTextSize(2);
display.println("Arkanoid");
display.setTextSize(1);
display.setCursor(20, 50);
display.print("by AKx2 + ChatGPT");
display.display();
delay(2000);
}