Moje Idealne Tetris

Repozytorium GitHub projektu



Czym To Jest

Tetris to legendarna gra i taka, w którą bardzo lubię grać. Naprawdę kocham tę grę i lubię w nią grać. To świetny sposób na rozładowanie stresu. Na potrzeby zabawnego weekendowego projektu postanowiłem zbudować tę grę jako grę/aplikację przeglądarkową przeznaczoną zarówno na komputer, jak i na urządzenia mobilne, wykorzystując zasady vibe coding. Mobilna strona tej wersji została zainspirowana przez Play-Tetris, które ma naprawdę świetne ustawienie mobilne z opartymi na przeciąganiu sterowaniem. Sprawdź i zagraj w moją implementację Tetrisa tutaj, to według mnie najbardziej „idealna” wersja Tetrisa.



rozgrywka mojej wersji tetris, zagraj w nią sam tutaj

Poza Kodem

Nie zabierałem się za budowę klona Tetrisa jako projektu do portfolio ani po to, żeby nauczyć się czegoś nowego. Zbudowałem go, ponieważ naprawdę go potrzebowałem. Kiedy jestem zestresowany, czy to przez ciężki tydzień w pracy, czy po prostu przez to, że życie się piętrzy, Tetris jest jedną z niewielu zdrowych rzeczy, które naprawdę pomagają mi się zresetować. Kiedy jestem zestresowany, mam tendencję do jedzenia dużo, a to z czasem się kumuluje, więc posiadanie czegoś, co działa bez żadnych minusów, jest dla mnie bardzo ważne. Już 10 do 30 minut upuszczania klocków i mój mózg ma wrażenie, jakby został trochę oczyszczony. To nie jest dla mnie tylko zwykłe odprężenie, to sposób na to, by mieć coś prostego i skupionego, w co można wlać ten stres. Istnieją nawet całkiem ciekawe badania pokazujące, że Tetris może wpływać na to, jak mózg radzi sobie z natrętnymi wspomnieniami i stresem, na przykład w eksperymentach z filmami traumatycznymi, u osób leczonych po prawdziwych wypadkach oraz jako uzupełnienie terapii z mierzalnymi zmianami w mózgu. Nie próbuję zamieniać tej gry w leczenie medyczne, ale fajnie jest widzieć, że może istnieć prawdziwa nauka wspierająca to, co już czuję, że Tetris może naprawdę pomóc ludziom radzić sobie ze stresem.

Więc zacząłem szukać dobrej wersji Tetrisa do grania, a problem polegał na tym, że nic dostępnego naprawdę nie pasowało do tego, jak chciałem grać. Mobilne aplikacje w iOS App Store są pełne reklam i mikropłatności. Wersje internetowe były opóźnione albo na telefonie sprawiały okropne wrażenie. Klasyczna wersja NES jest świetna, ale wymaga emulatora i dodatkowego sprzętu. Kupiłem nawet Miyoo Mini, myśląc, że rozwiąże problem, a skończyło się tylko na tym, że nosiłem ze sobą drugie urządzenie tylko po to, żeby grać w Tetrisa. W pewnym momencie zdałem sobie sprawę, że spędzam więcej czasu na szukaniu odpowiedniej wersji, niż zajęłoby mi po prostu zbudowanie własnej.

Dzięki nowoczesnym przeglądarkom, narzędziom LLM takim jak Claude Code oraz workflowom takim jak vibe coding, w końcu poczułem, że nadszedł właściwy moment, by zbudować Tetrisa, którego chciałem, samodzielnie. Szybki, minimalistyczny, bez reklam, bez kont, bez sklepu z aplikacjami. Po prostu gra przeglądarkowa, która działa na moim telefonie i laptopie oraz którą mam w pełni pod kontrolą. W około dzień miałem działającą wersję, a po mniej więcej tygodniu pracy od czasu do czasu, żeby uczynić ją solidną i uzyskać odpowiednie odczucie zarówno na komputerze, jak i na urządzeniach mobilnych, byłem z niej zadowolony.

Dzielę się nią, bo jeśli okaże się, że pomoże choć jednej innej osobie rozładować stres tak, jak pomaga mi, to byłoby dla mnie naprawdę bardzo miłe. To drobna rzecz, ale czasem drobna rzecz jest dokładnie tym, czego potrzebujesz.

Funkcje

  • Klasyczna plansza Tetrisa 10x20
  • Pełne sterowanie klawiaturą na komputerze oraz sterowanie gestami dotykowymi na urządzeniach mobilnych
  • Standardowy generator losowania elementów seven-bag
  • Podgląd trzymanego klocka i następnego klocka
  • Projekcja ghost piece pokazująca, gdzie klocki wylądują
  • Krzywa prędkości oparta na poziomach z dynamicznym opóźnieniem blokady
  • Śledzenie wyniku, linii, poziomu i najlepszego wyniku zapisane w local storage
  • Punktacja za soft drop i hard drop
  • Menu w grze z opcjami wznowienia, restartu, wyjścia, wyciszenia muzyki/SFX oraz linkiem do kodu źródłowego
  • Animacja błysku przy czyszczeniu linii z efektem dźwiękowym
  • Wsparcie dla bezpiecznego obszaru iOS (Dynamic Island, notch, wskaźnik ekranu głównego)
  • Wsparcie offline przez Service Worker (działa bez internetu po pierwszej wizycie)
  • Możliwość instalacji jako PWA (dodanie do ekranu głównego na iOS/Android dla doświadczenia podobnego do aplikacji)

Sterowanie

Komputer (Klawiatura)

Czynność Klawisze
Ruch lub A D
Soft Drop lub S
Hard Drop Space
Obrót CW W X
Obrót CCW Z
Trzymanie C lub LShift
Menu Esc lub M
Kod źródłowy G (ekran tytułowy)

Mobilne (Dotyk)

Czynność Gest
Ruch Przesunięcie w lewo / prawo
Soft Drop Przytrzymaj i przeciągnij w dół
Hard Drop Szybkie machnięcie w dół
Obrót CW Stuknięcie
Trzymanie Szybkie machnięcie w górę

Krzywa Trudności

Krzywa prędkości i opóźnienie blokady w tej wersji zostały dostrojone przy użyciu badań nad tym, jak klasyczne i nowoczesne gry Tetris radzą sobie z progresją trudności. W oryginalnym NES Tetris, grawitacja osiąga jeden rząd na klatkę na poziomie 29, co stało się słynnym “kill screen”, gdzie gra staje się dla większości ludzi praktycznie niegrywalna. To tak naprawdę nie było zaprojektowane zakończenie, bardziej efekt uboczny sprzętu i tego, że DAS (Delayed Auto Shift) był zbyt wolny, by nadążyć za prędkością spadania. Willis Gibson udowodnił to w 2024 roku, gdy przebił się dalej i zawiesił grę na poziomie 157.



rozgrywka klasycznego tetris na nes z 1989 roku (oryginalne źródło)

Nowoczesne gry, takie jak TGM (Tetris: The Grand Master), rozwiązały to inaczej. Zamiast po prostu przyspieszać spadanie klocków, aż gra się zepsuje, TGM ogranicza grawitację do 20G (natychmiastowy spadek), a następnie zaostrza inne okna czasowe, takie jak opóźnienie blokady i DAS, aby zwiększyć trudność. Standard Tetris Guideline używa 500 ms opóźnienia blokady z maksymalnie 15 resetami ruchu, co ta wersja naśladuje. Badania nad trybem TGM2 Death oraz TGM3 Shirase pokazały, że praktyczne minimum dla gry turniejowej to około 250 ms opóźnienia blokady z szybkim DAS, podczas gdy wszystko poniżej 133 ms to już teren dla specjalistów.

Na podstawie tego wszystkiego krzywa prędkości tutaj ogranicza grawitację do 33 ms na rząd (podobnie jak poziomy NES od 19 do 28) zamiast przechodzić do natychmiastowego spadku, a DAS skaluje się od 170 ms do 100 ms na wyższych poziomach, dzięki czemu można przemieszczać się po planszy w trakcie opóźnienia blokady. Celem było sprawienie, by wysokie poziomy były brutalnie szybkie, ale nadal uczciwe, bliższe temu, jak Tetris 99 i TGM radzą sobie z trudnością końcowej fazy gry, zamiast oryginalnego podejścia NES polegającego po prostu na pozwoleniu, by czysta prędkość wyprzedziła twoje wejścia.

Pod Maską

  • Responsywny projekt zoptymalizowany zarówno pod komputery, jak i urządzenia mobilne (pionowo)
  • Wstępnie renderowane sprite’y klocków i tło siatki dla wydajności
  • Używa stylu Super Rotation System (SRS) dla wall kicks przy obracaniu klocków
  • Wykrywanie gestów dotykowych oparte na prędkości dla niezawodnego rozróżniania machnięć i przeciągnięć
  • System czasowy oparty na poziomach dla prędkości grawitacji i opóźnienia blokady
  • Wysokie wyniki i ustawienia audio zapisywane w localStorage
  • Źródło muzyki w tle NmCCQxVBfyM
  • Źródło efektu dźwiękowego czyszczenia linii UMViM2tHrOk
  • Projekt jest w pełni open-source na licencji MIT License
  • Zbudowane przy użyciu następujących narzędzi AI:

Ostateczne Przemyślenia

To był jeden z tych projektów, w których motywacja nie była techniczna, lecz osobista. Po prostu chciałem wersji Tetrisa, która działała tak, jak chciałem, bez reklam, bez dodatkowego sprzętu i bez polegania na cudzej aplikacji, która mogłaby zniknąć lub zmienić się w dowolnym momencie. Sam fakt, że udało mi się przejść od pomysłu do dopracowanej gry w około tydzień pracy wykonywanej od czasu do czasu, korzystając z nowoczesnych narzędzi AI i vibe codingu, mówi wiele o tym, gdzie obecnie jesteśmy w rozwoju oprogramowania.

Używam tej wersji prawie codziennie od czasu, gdy ją zbudowałem, i nadal robi dokładnie to, czego potrzebuję. Pomaga mi oderwać się od wszystkiego, co mnie stresuje, skupić się przez kilka minut na czymś prostym i wrócić z jaśniejszą głową. Jeśli wypróbujesz ją i zrobi to samo dla ciebie, to będzie najlepszy możliwy rezultat, o jaki mógłbym prosić. A jeśli chcesz zrobić fork, dostroić krzywą prędkości, zmienić sterowanie albo zbudować na jej bazie coś własnego, śmiało. Jeśli znajdziesz błąd albo masz sugestię, możesz śmiało otworzyć zgłoszenie w repozytorium GitHub. Na tym właśnie polega sens udostępnienia tego jako open source.