Spisu treści:

Konkurencyjna gra na czas VS dla 2 graczy: 4 kroki
Konkurencyjna gra na czas VS dla 2 graczy: 4 kroki

Wideo: Konkurencyjna gra na czas VS dla 2 graczy: 4 kroki

Wideo: Konkurencyjna gra na czas VS dla 2 graczy: 4 kroki
Wideo: RAM: 2 VS 4 MODUŁY | Lipton radzi: więcej kości to większa wydajność? 2024, Lipiec
Anonim
Konkurencyjna gra na czas dla 2 graczy VS
Konkurencyjna gra na czas dla 2 graczy VS

Będziesz potrzebować:

1. Digilent Basys 3, płyta FPGA (lub dowolny inny FPGA)

2. Stosunkowo aktualna wersja Vivado lub innego środowiska VHDL

3. Komputer, na którym można uruchomić wspomniany program.

Krok 1: Sama gra

Sama gra
Sama gra

Jak FSM współdziała z modułami.

Jak grać

Aby rozpocząć, naciśnij środkowy przycisk. Spowoduje to wyświetlenie „99”, reprezentującego zdrowie drugiego gracza, na siedmiosegmentowym wyświetlaczu. Następnie diody LED zaświecą się kolejno od prawej do lewej. To tworzy pasek mocy. Gdy pasek zasilania jest pełny, resetuje się. Celem pierwszego gracza jest przestawienie przełącznika, gdy poprzeczka jest jak najwyżej. Im więcej diod LED się zapali, tym więcej obrażeń gracz jeden zada graczowi drugiemu. Po tym, jak gracz pierwszy przełączy przełącznik, zadane obrażenia są odejmowane od zdrowia drugiego gracza. Następnie przechodzi do tury drugiego gracza. Teraz wyświetlana liczba reprezentuje zdrowie gracza, a pasek mocy wypełnia się od lewej do prawej. Gdy gracz drugi wykona swój ruch, obrażenia są odejmowane i wracają do tury gracza pierwszego. To się powtarza, dopóki jeden gracz nie osiągnie 0 zdrowia. Film przedstawiający to działanie w załączeniu.

Krok 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Ta gra jest zasadniczo jedną wielką maszyną skończonych stanów, w której zachodzi pewna złożona logika oparta na stanie, w którym znajduje się FSM.

Stan 1: Menu Pierwszym stanem jest ekran menu, który jest jednym z prostszych stanów. Zawiera siedmiosegmentowy wyświetlacz wyświetlający słowo „PLAY” oraz przycisk uruchamiający grę. Przycisk, BTN, prowadzi nas do następnego stanu, którym jest kolejka gracza.

Stan 2: tura pierwszego gracza

Tura gracza pierwszego aktywuje sygnał, który powoduje, że siedmiosegmentowy wyświetlacz pokazuje zdrowie gracza drugiego. Włącza się kolejny sygnał, aby aktywować rejestr przesuwny zaimportowany z innego modułu, który stworzyliśmy (Pone.vhd). Ten rejestr przesuwny sprawia, że diody LED zapalają się jak rosnący wskaźnik mocy w innych grach, a następnie resetują się do 0, gdy osiągają maksymalną liczbę diod LED, które mogą się świecić. Aktualizuje się na narastającym zboczu zegara uzyskanym z barclock.vhd, który jest modyfikowany z pożyczonego pliku laboratoryjnego. Nasz pasek gracza zaczynał się od prawej strony i wypełniał do lewej, ponieważ przełącznik gracza jest również po lewej stronie (dla intuicyjnej obsługi). Po przełączeniu przełącznika stan przechodzi na gracza o jedną dedukcję, a ilość aktywnych diod LED jest zapisywana w sygnale.

Stan 3: Gracz 1 odliczenie Sygnał z ilością aktywnych diod LED określa ilość zdrowia, która zostanie odliczona. Odbywa się to poprzez posiadanie innego rejestru przesuwnego (deductor1.vhd), który zamiast zwiększać diody LED, zmniejsza je. To zmniejsza się na zboczu narastającym jednego z modułów div zegara, które pożyczyliśmy i zmodyfikowaliśmy (downcounterclock.vhd). Gdy tylko jedna dioda LED jest wyłączona, jeden punkt zdrowia jest odejmowany od całkowitego zdrowia drugiego gracza. Jeśli podczas tego procesu gracz 2 osiągnie 0 zdrowia, zatrzymujemy się i natychmiast przechodzimy do stanu „Koniec gry”. W przeciwnym razie, gdy wektor LED osiągnie „0000000000000000”, przechodzimy do tury drugiego gracza.

Stan 4: Tura gracza drugiego Tura gracza drugiego jest dokładnie taka sama, jak tura gracza pierwszego, z wyjątkiem tego, że rejestr przesuwny dla niego (Ptwo.bhd) przebiega od lewej do prawej, a przełącznik znajduje się po prawej stronie planszy. Aktywuje się sygnał, aby wyświetlić stan zdrowia Gracza 1. Gdy przełącznik 2 jest aktywny, przechodzi do tury odejmowania drugiego gracza.

Etap 5: Odliczenie gracza drugiego Podobnie jak w turze gracza drugiego, odliczenie gracza drugiego działa podobnie jak odliczenie gracza pierwszego. Główną różnicą jest to, że rejestr przesuwny, który kontroluje wyłączanie diody LED, idzie w przeciwnym kierunku, co jest łatwą modyfikacją do wykonania, gdy odliczenie gracza działa poprawnie.

Etap 6: Koniec gry Jeśli w dowolnym momencie któryś z graczy osiągnie zero zdrowia, gra przełącza się w ten stan. Nic wyszukanego. Jeśli naciśniesz BTN jeden, zdrowie zostanie zresetowane do 99, a stan wraca do menu, skutecznie rozpoczynając grę od nowa.

Krok 3: Moduły

Moduły
Moduły

Schemat czarnej skrzynki do gry

Downcounterclock (na podstawie modułu clk_div.vhd autorstwa Bryana Mealy):

To jest zegar, który obsługuje odliczanie czasu. Stała o nazwie max_count jest 3 razy większa niż stała max_count w barclock. To sprawi, że deduktory będą 3x wolniejsze niż prędkość paska.

Barclock - (na podstawie modułu clk_div.vhd autorstwa Bryana Mealy):

Ten zegar obsługuje synchronizację wskaźników mocy, które szybko zwiększaliśmy, aby zwiększyć trudność gry. Ten czas można dostosować do własnych upodobań, zwiększając prędkość, zmieniając stałą max_count na większą liczbę lub zmniejszając ją, zmniejszając wartość max_count na mniejszą. Sseg_dec - (napisany przez Bryana Mealy'ego): Ten moduł pobiera 8-bitową liczbę jako dane wejściowe, które dekoduje, konwertując liczbę na jej dziesiętny odpowiednik, a następnie wyświetla na wyświetlaczu siedmiosegmentowym. Aby ten plik działał, musisz upewnić się, że ograniczenia są zgodne z naszymi.

Placek kukurydziany:

Jest to rejestr przesuwny, który przesuwa bity w lewo, dodając jeden gorący bit, aby wyglądało na to, że wskaźnik mocy rośnie. Gdy wszystkie bity są gorące, wszystkie bity są resetowane do „0” i cykl zaczyna się od nowa.

Pdwa:

To jest odwrócona wersja modułu P1.

Odliczacz1:

Jest to połączenie rejestru przesuwnego i odejmowania. Rejestr przesuwny idzie w przeciwnym kierunku niż rejestr przesuwny P1, co wskazuje na dedukcję. Odejmuje to również 1 od zdrowia Gracza 2 za każdy cykl zegara, więc połączenie tych dwóch funkcji będzie wyglądało na to, że zdrowie przeciwnika zmniejsza się o 1 za każdą diodę na pasku zdrowia, która spada.

Deductor2: To jest odwrócona wersja modułu Deductor1.

PlayDecoder (pożyczony i nieznacznie zmodyfikowany z ekchen35649 jego 133 instrukcji): Jest używany w stanie menu do wyświetlania słowa „PLAY” w siedmiosegmentowym dekoderze.

Krok 4: Test

Ta gra została pierwotnie zainspirowana jedną z minigier Kirby. Jest to prosta gra dla dwóch graczy, w którą można grać na płycie Basys 3 lub dowolnym FPGA.

Krok 1: Wymagane materiały

Potrzebne będą: Digilent Basys 3, płytka FPGA (lub jakakolwiek inna) Stosunkowo aktualna wersja Vivado lub jakieś inne środowisko vhdl Komputer, na którym można uruchomić wspomniany program Mózg

Krok 2: Sama gra

Jak grać

Aby rozpocząć, naciśnij środkowy przycisk. Spowoduje to wyświetlenie „99”, reprezentującego zdrowie drugiego gracza, na siedmiosegmentowym wyświetlaczu. Następnie diody LED zaświecą się kolejno od prawej do lewej. To tworzy pasek mocy. Gdy pasek zasilania jest pełny, resetuje się. Celem pierwszego gracza jest przestawienie przełącznika, gdy poprzeczka jest jak najwyżej. Im więcej diod LED się zapali, tym więcej obrażeń gracz jeden zada graczowi drugiemu. Po przełączeniu przełącznika pierwszego gracza, zadane obrażenia są odejmowane od zdrowia drugiego gracza. Następnie przechodzi do tury drugiego gracza. Teraz wyświetlana liczba reprezentuje zdrowie gracza, a pasek mocy wypełnia się od lewej do prawej. Gdy gracz drugi wykona swój ruch, obrażenia są odejmowane i wracają do tury gracza pierwszego. To się powtarza, dopóki jeden gracz nie osiągnie 0 zdrowia. Film przedstawiający to działanie w załączeniu.

Aby zagrać w grę, załaduj ją na planszę bazową i naciśnij środkowy przycisk. Spróbuj przełączyć przełącznik przy jak największej liczbie aktywnych diod LED, a następnie poczekaj i obserwuj, jak tablica odejmuje te punkty od zdrowia przeciwnika. Następnie przekaż go swojemu przyjacielowi i

Krok 3: FSM

Ta gra jest zasadniczo jedną wielką maszyną skończonych stanów, w której zachodzi pewna złożona logika oparta na stanie, w którym znajduje się FSM.

(Diagram stanu)

Stan 1: Menu

Pierwszym stanem jest ekran menu, który jest jednym z prostszych stanów. Zawiera siedmiosegmentowy wyświetlacz wyświetlający słowo „PLAY” oraz przycisk uruchamiający grę. Przycisk, BTN, prowadzi nas do następnego stanu, którym jest kolejka gracza.

Stan 2: tura pierwszego gracza

Tura gracza pierwszego aktywuje sygnał, który powoduje, że siedmiosegmentowy wyświetlacz pokazuje zdrowie gracza drugiego. Włącza się kolejny sygnał, aby aktywować rejestr przesuwny zaimportowany z innego modułu, który stworzyliśmy (Pone.vhd). Ten rejestr przesuwny sprawia, że diody LED zapalają się jak rosnący wskaźnik mocy w innych grach, a następnie resetują się do 0, gdy osiągają maksymalną liczbę diod LED, które mogą się świecić. Aktualizuje się na narastającym zboczu zegara uzyskanym z barclock.vhd, który jest modyfikowany z pożyczonego pliku laboratoryjnego. Nasz pasek gracza zaczynał się od prawej strony i wypełniał do lewej, ponieważ przełącznik gracza jest również po lewej stronie (dla intuicyjnej obsługi). Po przełączeniu przełącznika stan przechodzi na gracza o jedną dedukcję, a ilość aktywnych diod LED jest zapisywana w sygnale.

Stan 3: Odliczenie gracza pierwszego

Sygnał z ilością aktywnych diod LED określa ilość zdrowia, która zostanie odliczona. Odbywa się to poprzez posiadanie innego rejestru przesuwnego (deductor1.vhd), który zamiast zwiększać diody LED, zmniejsza je. To zmniejsza się na zboczu narastającym jednego z modułów div zegara, które pożyczyliśmy i zmodyfikowaliśmy (downcounterclock.vhd). Gdy tylko jedna dioda LED jest wyłączona, jeden punkt zdrowia jest odejmowany od całkowitego zdrowia drugiego gracza. Jeśli podczas tego procesu gracz 2 osiągnie 0 zdrowia, zatrzymujemy się i natychmiast przechodzimy do stanu „Koniec gry”. W przeciwnym razie, gdy wektor LED osiągnie „0000000000000000”, przechodzimy do tury drugiego gracza.

Stan 4: Kolejka gracza drugiego

Tura gracza drugiego jest dokładnie taka sama, jak tura gracza pierwszego, z wyjątkiem tego, że dla niego rejestr przesuwny (Ptwo.bhd) przebiega od lewej do prawej, a przełącznik znajduje się po prawej stronie planszy. Aktywuje się sygnał, aby wyświetlić stan zdrowia Gracza 1. Gdy przełącznik 2 jest aktywny, przechodzi do tury odejmowania drugiego gracza.

Etap 5: Odliczenie gracza drugiego

Podobnie jak w turze gracza drugiego, odliczenie gracza drugiego działa podobnie jak odliczenie gracza pierwszego. Główną różnicą jest to, że rejestr przesuwny, który kontroluje wyłączanie diody LED, idzie w przeciwnym kierunku, co jest łatwą modyfikacją do wykonania po prawidłowym działaniu dedukcji gracza.

Etap 6: Koniec gry Jeśli w dowolnym momencie któryś z graczy osiągnie zero zdrowia, gra przełącza się w ten stan. Nic wyszukanego. Jeśli naciśniesz BTN jeden, zdrowie zostanie zresetowane do 99, a stan wraca do menu, skutecznie rozpoczynając grę od nowa.

Czarna skrzynka

Krok 4: Moduły

Downcounterclock (na podstawie modułu clk_div.vhd autorstwa Bryana Mealy):

To jest zegar, który obsługuje odliczanie czasu. Stała o nazwie max_count jest 3 razy większa niż stała max_count w barclock. To sprawi, że deduktory będą 3x wolniejsze niż prędkość paska.

Barclock - (oparty na module clk_div.vhd autorstwa Bryana Mealy'ego): Ten zegar obsługuje synchronizację wskaźników mocy, które szybko się zwiększały, aby zwiększyć poziom trudności w grze. Ten czas można dostosować do własnych upodobań, zwiększając prędkość, zmieniając stałą max_count na większą liczbę lub zmniejszając ją, zmniejszając wartość max_count na mniejszą. Sseg_dec - (napisany przez Bryana Mealy'ego): Ten moduł pobiera 8-bitową liczbę jako dane wejściowe, które dekoduje, konwertując liczbę na jej dziesiętny odpowiednik, a następnie wyświetla na wyświetlaczu siedmiosegmentowym. Aby ten plik działał, musisz upewnić się, że ograniczenia są zgodne z naszymi.

Pone: Jest to rejestr przesuwny, który przesuwa bity w lewo, dodając jeden gorący bit, aby wyglądało na to, że wskaźnik mocy rośnie. Gdy wszystkie bity są gorące, wszystkie bity są resetowane do „0” i cykl zaczyna się od nowa.

Ptwo: To jest odwrócona wersja modułu P1.

Deductor1: Jest to kombinacja rejestru przesuwnego i odejmowania. Rejestr przesuwny idzie w przeciwnym kierunku niż rejestr przesuwny P1, co wskazuje na dedukcję. Odejmuje to również 1 od zdrowia Gracza 2 za każdy cykl zegara, więc połączenie tych dwóch funkcji będzie wyglądało na to, że zdrowie przeciwnika zmniejsza się o 1 za każdą diodę na pasku zdrowia, która spada.

Deductor2: To jest odwrócona wersja modułu Deductor1.

PlayDecoder (pożyczony i nieco zmodyfikowany z ekchen35649 jego 133 instrukcji):

Jest on używany w stanie menu do wyświetlania słowa „PLAY” w siedmiosegmentowym dekoderze.

Do zrobienia: zdjęcia, wideo

Zalecana: