Pobierz

Transkrypt

Pobierz
Układy Cyfrowe
Specyfikacja wstępna
„Zebranie informacji dotyczących tematyki projektu oraz przedstawienie koncepcji realizacji
projektu”
Projekt:
Realizacja:
Emil Rosłanowski
Adrian Staniec
Michał Waśkiewicz
1. Informacje ogólne dotyczące gry Tetris:
Krótki zarys historyczny
Tetris – gra komputerowa stworzona przez Aleksieja Pażytnowa w 1985 roku w Związku
Radzieckim. Oryginalna wersja powstała podczas pracy Pażytnowa w Moskiewskiej Akademii
Nauk dla komputera Electronica 60. Gra posiada dużą ilość różnorodnych wariacji i implementacji.
Do powstania programu zainspirowała Pażytnowa gra Pentomino.
●
Reguły gry
Gra rozgrywa się na prostokątnej planszy(początkowo pustej) zwanej tetrionem lub matriksem
ułożonej krótszym bokiem w poziomie. Tetrion ma wymiary 20 wierszy na 10 kolumn. W trakcie
gry, pośrodku górnej krawędzi planszy, pojawiają się pojedynczo klocki złożone z czterech małych
kwadratów nazywanych też blokami. Klocki te (określane mianem tetramino) przemieszczają się
(spadają) w kierunku dolnej krawędzi w miarę możliwości. Kiedy jedno tetramino opadnie na samo
dno, zostaje unieruchomione a następne ukazuje się u góry planszy nowy element. Gra trwa aż do
momentu w którym klocek nie będzie mógł pojawić się na planszy. Zadaniem gracza jest układanie
– wykorzystując rotacje i przesuwając klocek w poziomie – tetramino na planszy tak, aby kwadraty
składające się na nie utworzyły wiersz na całej szerokości prostokąta. W takiej sytuacji wiersz ten
zostaje usunięty, a pozostałe klocki opadają w kierunku dna tworząc więcej przestrzeni dla
następnych elementów.Możliwe jest jednoczesne usunięcie maksymalnie 4 wierszy – umożliwia to
tetramino "I". Sytuacja taka nosi nazwę identyczną jak gra, czyli "tetris".
●
2. Proponowany sposób realizacji:
1. W grze dostępnych jest 7 odmian klocków
(przedstawione obok), przy czym każdy z nich
można obrócić, co tworzy 19 różnych figur.
2. W naszej realizacji będą trzymane w pamięci mapy
pełnych 28 możliwości – 7 klocków x 4 obroty.
3. Plansza posiada standardowy rozmiar tj: 10x20.
4. Mapa statycznej części planszy (bez aktualnie
opadającego klocka) przechowywana będzie w
pamięci RAM.
5. Dane na temat aktualnie spadającego klocka
(pozycja, rodzaj, obrót) przechowywane są w
odpowiednich rejestrach.
6. W grze zostanie zaimplementowany prosty system
punktacji – 10pkt za ułożenie jednej linii.
7. Każdemu klockowi zostanie przyporządkowany
jeden, ściśle określony kolor.
8. Sterowanie grą odbywa się za pomocą pięciu
przycisków: lewo, prawo, szybki dół, obrót, start/pauza.
9. Przycisk szybki dół powoduje przyspieszenie obniżania się klocka.
10. Gra wyświetlana będzie na monitorze VGA wraz z punktacją i kolejnym klockiem.
3. Opis funkcji poszczególnych elementów i sposób ich
współdziałania:
3.1. Generator nowego klocka
Generator nowego klocka zbudowany jest z licznika i rejestru zatrzaskowego. Licznik
zlicza cykle zegara systemowego, natomiast rejestr jest zatrzaskiwany w chwili, kiedy
zostanie naciśnięty dowolny z przycisków sterujących. Takie podejście do generowania
nowego klocka zapewniło bardzo dużą losowość w tym elemencie. Na wyjściu modułu
zawsze dostępny jest numer wylosowanego klocka.
3.2. Moduł kontrolera klawiatury
Moduł ten odpowiedzialny jest za komunikację z klawiaturą. Moduł zaczyna swoją pracę
w chwili gdy na linii start pojawi się stan wysoki. Sprawdza czy użytkownik wcisnął
jakikolwiek przycisk i realizuje odpowiednią funkcję. Moduł odpowiedzialny jest
również za sprawdzenie czy przy przesuwaniu klocka na boki nie następuje zderzenie ze
ścianami a także czy możliwy jest dany obrót.
Moduł korzysta z pamięci RAM, a także z rejestrów w których przechowywane są dane
aktualnie spadającego klocka (pozycja X,Y; rodzaj klocka; obrót). Może również
modyfikować te dane, zgodnie z wejściem z klawiatury.
Po zakończeniu pracy, moduł wystawia sygnał stop.
3.3. Moduł kontrolera gry
Moduł kontrolera gry odpowiedzialny jest za ogólne kierowanie grą, sprawdzanie, czy
nie nastąpiło osadzenie aktualnego klocka, obliczanie punktów, kasowanie linii i
wykrywanie ewentualnego końca gry. Moduł komunikuje się z pamięcią RAM, gdzie
zaspisywana jest plansza oraz przechowywane są szablony klocków, rejestrami
odpowiedzialnymi za dane o aktualnym klocku. Moduł uruchamiany jest stanem
wysokim na linii start, a zakończenie swojej pracy sygnalizuje za pomocą linii stop.
Poniżej przedstawiono wstępny algorytm pracy modułu:
Wstaw nowy klocek na
poczatek
Losuj kolejny klocek
Nie
Sprawdz czy
mozna opuscic
element
Tak
Nie
Zapisz do planszy
Ostatnia linia
pelna
Tak
Nie
Sprawdz czy
usunac wiersze
Tak
Usun wiersz
Opusc klocek
Koniec Gry
Zwieksz liczbe
punktow
3.4. Bloki pamięciowe
Elementem z których będą korzystać wszystkie bloki i niejako scaleniem wszystkich
tych elementów są moduły pamięciowe, tj. pamięć RAM w której przechowywana jest
mapa planszy bez aktualnie opuszczanego klocka (każde pole reprezentowane jest przez
jedną liczbę 3 bitową - 0 jako brak klocka i odpowiednie liczby jako numer klocka) a
także siatki (4x4 pola) wszystkich klocków wraz z obrotami.
Dodatkowo konieczne jest przechowywanie położenie środka aktualnego klocka, a także
jego rodzaju i obrotu. W tym celu wykorzystano rejestry zatrzaskowe.
3.5. Blok kontrolera VGA
Ze względu na to, że podczas wystawiania sygnałów na linie VGA konieczny jest ciągły
dostęp do pamięci RAM, nie jest możliwe w tym czasie manipulowanie danymi. W
związku z tym to właśnie moduł kontrolera VGA pełni rolę nadrzędną w systemie i to on
wystawia sygnały startu zarówno dla kontrolera klawiatury jak i dla modułu kontrolera
gry. Zapobiega się w ten sposób próbie jednoczesnego dostępu przez kilka modułów do
wspólnych danych i jednocześnie umożliwia synchronizację wszystkich elemntów gry.
Dodatkowo zapewniona jest możliwość sterowania szybkością gry (poprzez różną
częstotliwość generowania sygnałów startu dla poszczególnych modułów).
Kontroler VGA generuje na ekran oprócz głównej planszy programu także punktację
oraz wizualizację kolejnego elementu. Aktualny stan Tetrionu, czyli planszy gry
generowany jest na podstawie zawartości RAMu oraz rejestrów odpowiedzialnych za
przechowywanie informacji o spadającym klocku.
W bloku kontrolera VGA zaimplementowana będzie również funkcjonalność związana z
obsługą nowej gry a także zakończeniem całej gry. Proponowany graf działań wygląda
następująco:
Tetris
Generator
Planszy
Nie
Start
Tak
Wlasciwa Gra
Tak
Zagraj
Ponownie
Nie
Koniec
4. Możliwości rozbudowy
Po usunięciu określonej ilości wierszy prędkość gry wzrasta utrudniając tym samym
precyzyjne sterowanie kolejnymi tetramino.
Punktacja jest obliczana w zależności od ilości linii usuniętych jednocześnie - większa
ilość punktów za jednoczesne usunięcie kilku linii.
5. Bibliografia
5.1. „Projektowanie układów cyfrowych z wykorzystaniem języka VHDL” Zwoliński Mark
5.2. „Układy FPGA” Sterownik monitora VGA s.163 Majewski, Zbysiński
5.3. „Synteza układów cyfrowych” Łuba Tadeusz
5.4. Opis płytki testowej: http://www.zpt.tele.pw.edu.pl/~ptomasze/docs/univ.pdf
5.5. Wikipedia – informacje ogólne