Tetris

Gra polega na układaniu spadających bloków (tetrominoes) w rzędy. Celem jest budowanie pełnych poziomych linii bez przerw. Każda kompletna linia jest kasowana, a punkty są naliczane. Gra kończy się, gdy bloki nagromadzą się i dotkną górnej granicy planszy, uniemożliwiając pojawienie się nowej figury.

Written By Coder Matthew

Last updated 8 months ago


1) Grafiki użyte w Tetris

Tak to się prezentuje już w samym unity
  • 1. Border

    • Grafika tworząca ramkę wokół planszy.

    • Używany do wizualnego oddzielenia planszy Tetrisa (Tilemapy) od reszty interfejsu użytkownika lub tła.

  • 2. Grid

    • Grafika tła dla siatki lub pola do wyświetlania wyniku/informacji.

    • Używany do rysowania siatki planszy.

  • 3. Ghost

    • Grafika reprezentująca cień spadającej figury.

  • 4. Blue, Cyan, Green, Orange, Purple, Red, Yellow

    • Grafiki kolorowych kafelków dla poszczególnych Tetromino.

    • Są to płaskie grafiki 2D, używane do rysowania figur Tetromino w miejscach, gdzie nie da się użyć standardowych Tiles (np. w oknie podglądu następnej figury lub jako ikony w UI).


2) Hierarchia w Unity

Wszystkie obiekty
  • Main Camera

    • Odpowiada za widok gry, czyli za wyświetlanie planszy i spadających figur. Ustawia projekcję ortograficzną, idealną dla gier 2D opartych na siatce (Tilemap).

    • Jest statyczna i skupiona na obszarze planszy, aby uchwycić całe pole gry Tetrisa.

  • Grid

    • Obiekt Unity Grid (Siatka), który definiuje globalny system współrzędnych labiryntu. Jest to niezbędna struktura nadrzędna dla komponentów Tilemap.

    • Organizator, który zapewnia, że wszystkie Tilemapy (plansza i cień) używają tego samego układu komórek (np. 1x1 jednostka na kafelek).

  • Board

    • Jest to obiekt, do którego przypięty jest skrypt Board, będący sercem mechaniki gry.

    • Kontroluje generowanie nowych figur (SpawnPiece), logikę Game Over, sprawdzanie kolizji (IsValidPosition) oraz usuwanie pełnych linii (ClearLines).

  • Ghost

    • Reprezentuje obiekt wizualizujący miejsce, w którym figura spadnie.

    • Do tego obiektu przypięty jest skrypt Ghost (cień), który śledzi aktywną figurę.

    • Ułatwia graczowi planowanie, pokazując docelową pozycję opadającej figury.

  • Border

    • Obiekt wizualny tworzący ramkę wokół pola gry. Jest to graficzny element (Sprite), który definiuje granice planszy (np. czarna ramka).

    • Służy celom estetycznym, wizualnie oddzielając planszę gry od reszty ekranu i interfejsu.

  • Canvas

    • Jest kontenerem nadrzędnym dla wszystkich elementów interfejsu użytkownika (UI). Zarządza skalowaniem i rozmieszczeniem tekstu na ekranie.

    • Niezbędny do hostowania tekstu wyniku (ScoreText).

  • ScoreText (wewnątrz Canvas)

    • Element tekstowy (TextMeshPro) wyświetlający aktualny wynik gracza. Pokazuje wynik w formacie czterech cyfr.

    • Skrypt Board (w metodzie UpdateScore) na bieżąco aktualizuje ten obiekt.


3) Skrypty użyte w tej grze

Tak właśnie wyglądają gotowe skrypty w unity
  • Board

    • Jest to centralny menedżer i kontroler całej planszy gry. Zarządza logiką czyszczenia i ustawiania bloków na Tilemap, generowaniem nowych figur (SpawnPiece) oraz sprawdzaniem warunków Game Over.

    • Kontroluje kluczowe mechaniki: usuwanie pełnych linii (ClearLines) oraz walidację pozycji (IsValidPosition) każdej figury, zanim ta się przesunie lub obróci.

  • Data

    • Statyczny skrypt (klasa) przechowujący wszystkie stałe dane niezbędne do działania mechaniki Tetrisa.

    • Zawiera definicje kształtów wszystkich bloków (Cells).

    • Zapewnia spójność i zgodność z oficjalnymi regułami Tetrisa, dostarczając geometryczne zasady, których używają skrypty TetrominoData i Piece.

  • Ghost

    • Skrypt tworzący wizualny cień (preview) spadającej figury, wskazujący, gdzie nastąpi Hard Drop.

    • Śledzi aktywną figurę (Piece) i oblicza jej najniższą możliwą pozycję na planszy.

    • Używa oddzielnej warstwy Tilemap do rysowania cienia. Logika jest uruchamiana w LateUpdate, aby cień był zawsze aktualny po wszelkich ruchach figury.

  • Piece

    • Skrypt sterujący pojedynczą, aktywną, spadającą figurą (Tetromino).

    • Zarządza inputem gracza (ruch boczny, Soft/Hard Drop, rotacja) oraz kontroluje timery spadania i blokady.

    • Implementuje zaawansowaną logikę rotacji oraz TestWallKicks, aby umożliwić obrót figury, nawet gdy jest ona zablokowana przy ścianie lub innym bloku.

  • TetrominoData

    • Używa struktury (struct w C++, pozdrawiamy mgr Tomasza Kożaka) używana do definiowania konfiguracji każdego typu bloku.

    • Łączy w sobie wygląd (Tile), typ Tetromino (np. 'I', 'J', 'L') oraz odpowiednie dane geometryczne z klasy Data.

    • Jest używany przez skrypt Board do losowania nowej figury i przekazywania wszystkich jej cech geometrycznych do aktywnego obiektu Piece.


4) Całe skrypty

Tutaj znajdziesz całe skrypty bez owijania w bawełne 😊, każdy blok kodu jest starannie zakomentowany tak żebyś w miarę mógł ogarnąć o co chodzi nawet jak nie znasz unity i C#.