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-