Tetris - projekt na "Języki i Techniki Programowania II"

Tetris 2D


Celem projektu jest stworzenie apletu graficznego do gry w Tetrisa dwuwymiarowego. Gra będzie dostepna w trybie auto i w trybie manual. Stopniować trudność gry będzie mozna na dwa sposoby: poprzez zmianę prędkości działania programu oraz przez zamianę zestawu używanych klocków

Tryb auto oznacza, że komputer symuluje grę, dzięki czemu początkujący gracz może przypatrzyć się zasadom, jakie rządzą tą grą. Tryb ręczny to gra gracza przy użyciu klawiatury. Program nie przewiduje użycia myszki do gry.

W grze będzie można wybierać prędkość opadania klocków, z zakresu od 1 do 10, ponadto będzie można wybrać opcję wzrastającej prędkości w trakcie gry.

Zestaw klocków użyty w programie:

Program posiada dwa zestawy klocków, a ściślej mówiąc jeden zestaw oraz możliwość wyboru jednego z podzestawów. Wersja łatwiejsza zawiera klocki składające się z czterech kwadratowych elementów. Wersja trudniejsza zawiera wszystkie możliwe klocki, które zawieraję od jednego do pięciu elementów.

Czerwone kropki na klockach oznaczają osie obrotu klocków, dwie kropki oznaczają, że klocek ma dwie osie obrotu i obraca się względem tej, która znajduje się niżej, lub gdy są na równej wysokości - przy obrocie zgodnie z ruchem wskazówek zegara względem lewej, przy obrocie w przeciwnym kierunku względem prawej osi.

Kolizje klocków

Do kolizji klocków może dojść w dwóch przypadkach:
- podczas opadania klocka w dół,
- podczas obrotu klocka.
Pierwsza możliwość w naszej grze nie będzie zachodzić, a ściślej mówiąc będzie rozwiązywana innym sposobem. Mianowicie w momencie gdy klocek znajdzie się w takiej pozycji, że jego przesunięcie w dół w nastepnej turze nie będzie możliwe, klocek zostanie "przymurowany", tzn. nie będzie już można go obrócić ani przesunąć w poziomie a program przejdzie do dalszych czynności (sprawdzenie czy nie zapełniono całej lini pojemnika oraz do rozpoczęcia ruchu następnego klocka). W drugim przypadku schemat postępowania będzie nastepujący: najpierw tworzymy kopię klocka, nastepnie dokonujemy obrotu i sprawdzamy kolizje. Jeśli kolizje wystapią z obu stron (licząc względem środka ciężkości) obrót uznajemy za niemożliwy do wykonania. Gdy kolizja zajdzie tylko z jednej strony dokonujemy przesunięcia klocka tak długo aż dojdzie do kolizji z drugiej strony (czyli uznajemy obrót za niemożliwy do realizacji) lub klocek nie będzie kolidował z innymi.

Sterowanie:

    klawisze strzałek:

    • w prawo - przesunięcie klocka w prawo
    • w lewo - przesunięcie klocka w lewo
    • do góry - obrót klocka w lewo (przeciwnie do ruchu wskazówek zegara)
    • w dół - obrót klocka w prawo (zgodnie z ruchem wskazówek zegara)
  • spacja - zrzucenie klocka na dno

Punktacja

Punktacja zastosowana w grze ma za zadanie premiować usuwanie kilku lini na raz, i tak wzór opisujacy liczbę zdobytych punktów za usunięcie linii będzie następujący:
Liczba punktów=(Liczba linii)2 x Prędkość
Gdzie Prędkość oznacza liczbę z zakresu od 1 do 10 oznaczajacą predkość opadania klocków w danym momencie

Projekt klas:

  • klasa "nadzorca" - rozpoczyna grę, wczytuje dane (poziomy trudności), tworzy pojemnik, tworzy w pętli nowe klocki, wyświetla liczbę zdobytych punktów, ewentualnie wyświetla następny klocek
  • klasa "pojemnik" - przechowuje informacje o juz ułożonych klockach, rysuje pojemnik wraz z klockami
  • klasa "klocek" - wykonuje ruchy klockiem (zależne od czasu oraz zależne od gracza), wykrywa kolizje, wykrywa opadnięcie klocka na klocki w pojemniku, rysuje lecący klocek

Diagram przypadków użycia:

Diagram klas