UCYF Dokumentacja końcowa

Transkrypt

UCYF Dokumentacja końcowa
18.01.10
Tomasz Piekarczyk
Igor Rutkowski
UCYF
Dokumentacja końcowa
1.Temat
Tematem projektu jest realizacja popularnej w latach 80-tych gry Pac-Man. Gracz steruje
dużą żółtą kulką za pomocą joysticka do gry. Kulka porusza się wewnątrz planszy
obrysowanej niebieskimi liniami. Zadaniem gracza jest wyczyszczenie planszy z kropek i
jednocześnie unikać kontaktu z duchami, taki kontakt powoduje utratę życia. Gdy liczba żyć
dojdzie do zera, gra się kończy. Gdy gracz zje dużą kropkę duchy zmieniają kolor na
niebieski. Gdy nastąpi kontakt z duchem, kiedy jest niebieski, duch znika i pojawia się w
miejscu startowym w centrum ekranu.
2.Realizacja sprzętowa - UP2 (Altera)
Zestaw uruchomieniowy firmy Altera
z układami z rodziny Flex i MAX.
Dzięki
złączom
rozszerzeń
i
dostępnym modułom dodatkowym
realizować
projekty
można
wymagające
komunikacji
z
komputerem przez USP czy RS232,
komunikacji radiowej, itp.
•
•
•
•
•
•
Wykorzystane układy
programowalne:
o EPF10K70
o EPM7128S
Złącza:
o VGA
o PS/2
Konfiguracja JTAG
Oscylator kwarcowy (25,175 MHz)
Złącza rozszerzeń:
o 3 złącza, każde posiada 42 piny I/O i 7 ogólnych pinów dla układu FLEX 10K
Dodatkowe elementy interfejsu użytkownika:
o 2 dwucyfrowe siedmiosegmentowe wyświetlacze (po 2 dla układu EPM7128S
i dla układu FLEX 10K)
o 4 przyciski (po 2 dla układu EPM7128S i dla układu FLEX 10K)
o 16 diod LEDs (po 8 dla układu EPM7128S i dla układu FLEX 10K)
3.Algorytm rozwiązania
3.1.Plansza gry
Plansza zorganizowana jest w postaci logicznych bloków o wielkości 16x16 pikseli. Wyjście
VGA wysterowane będzie rozdzielczością 640x480 z czego właściwa plansza będzie miała
wymiar 26x30 bloków logicznych (416x480 pikseli). Obszar ten opisany jest grubą linią na
rysunku.
Obiekty nieruchome umieszczone są w siatce tworzonej przez bloki. Obiekty ruchome: kulka
gracza i duchy mają pozycję opisaną z dokładnością do 1 piksela, co oznacza że mogą
jednocześnie znajdować się maksymalnie na dwóch blokach.
3.2.Organizacja pamięci
Pamięć została podzielona na dwa niezależne moduły.
W pierwszym module, znajdują się obiekty planszy takie jak np. duch, pacman, ściana. Każdy
z obiektów jest opisany macierzą 16x16 pikseli, przedstawia to poniższy rysunek. Na wejściu
tego modułu znajduje się multiplekser który w zależności od kodu wystawia piksel
odpowiedniego obiektu na wyjście.
Wejście modułu pierwszego jest sterowane za pomocą wyjścia modułu drugiego. Moduł drugi
zawiera pamięć planszy w postaci macierzy 26x30 komórek. Każda z komórek zawiera kod
obiektu.
Na każdy obiekt (każdą komórkę planszy) potrzeba 9 bitów. Najmłodszych 5 bitów to kod
obiektu. W ramach najmłodszych 5 bitów 3 pierwsze reprezentują kod obiektów ruchomych i
ścian, natomiast na dwóch starszych bitach jest informacja o kropkach. Takie podejście było
konieczne ponieważ duchy mogą współistnieć z kropkami (duchy nie zjadają kropek). 4
najstarsze bity to przesunięcie obiektu w ramach komórki (potrzebne do animacji). Całość
przedstawia poniższa ilustracja.
Sposób kodowania offsetu przedstawia rysunek poniżej. Czerwony prostokąt to obiekt,
natomiast czarna ramka to obrys komórki logicznej.
4.Diagramy postępowania
Za logikę gry odpowiadają 3 różne automaty i jednostka arytmetyczno-logiczna do wyliczania
pozycji.
4.1 Główny automat sterujący
Zadaniem głównego automatu sterującego jest uruchamianie poszczególnych elementów
systemu w odpowiedniej kolejności tak, aby nie dochodziło do konfliktów w dostępie do
najważniejszego zasobu jakim jest pamięć planszy. Po zsynchronizowaniu się z modułem
wyświetlającym obraz na monitorze zwiększany jest licznik lcnt i sprawdzana jest jego
wartość. W ten sposób ruchy obiektów na planszy występują co określoną ilość klatek
wyświetlanych na ekranie - w ten sposób regulowane jest tempo gry. Gdy licznik osiągnie
założoną wartość sekwencyjnie są uruchamianie automaty generujące ruch pacman i 4
duchów, dodatkowo inkrementowany jest licznik gcnt. Służy on do wyzwalania generatorów
ruchu - nowy kierunek może być podany dopiero po 4 przesunięciach, tak aby obiekty
przemieszczały się wzdłuż kwadratowych pól na jakie podzielono planszę gry.
Automat ten powinien również odbierać od detektorów kolizji flagi mówiące o kolizjach i
reagować na nie, np. resetując położenie obiektów po najściu Pac Mana na ducha.
4.2 Automaty kolizji
Detektor kolizji pacmana
Detektor kolizji ducha
Powyższe rysunki przedstawiają 2 nieznacznie różniące się od siebie automaty odpowiadające
za ruch i detekcje kolizji, odpowiednio pacmana i ducha.
Z każdym obiektem ruchomym związany jest jeden detektor, który wysterowuje alu, usuwa
obiekt ze starej pozycji, wstawia go na nową, gdy nastąpi kolizja ze ścianą automat przywraca
ostatnią pozycję. W razie kolizji wywołujących nietypowe zdarzenia (np. zjedzenie przez
pacmana dużej kropki) wystawiane są odpowiednie flagi.
5 Realizacja
Zrealizowano
-wyświetlanie planszy
-ruch pacmana, duchów
-duchy nie zjadają kropek
-sterowanie klawiaturą PS/2
-kolizje ze ścianami
-kolizje duchów z pacmanem
-wychodzenie przez tunel w planszy
-wyświetlanie żyć na wyświetlaczu
segmentowym na płytce
Nie zrealizowano
-tryb zjadania duchów (po zjedzeniu dużej
kropki)
-przeładowanie planszy po zjedzeniu
wszystkich kropek
-pełnej płynności animacji
7-