Tartalomjegyzék:

Két játékos versenyképes időmérő játéka: 4 lépés
Két játékos versenyképes időmérő játéka: 4 lépés

Videó: Két játékos versenyképes időmérő játéka: 4 lépés

Videó: Két játékos versenyképes időmérő játéka: 4 lépés
Videó: Forma 1 - 2005. Ausztrál nagydíj, Melbourne, Albert Park - időmérő edzés 2024, November
Anonim
2 játékos versenyképes vs időzítő játék
2 játékos versenyképes vs időzítő játék

Szükséged lesz:

1. Digilent Basys 3, FPGA kártya (vagy bármely más FPGA,)

2. A Vivado vagy más VHDL környezet viszonylag naprakész változata

3. Az említett programot futtató számítógép.

1. lépés: A játék maga

A játék maga
A játék maga

Hogyan működik az MSZK a modulokkal.

Hogyan kell játszani

A kezdéshez nyomja meg a középső gombot. Ez azt eredményezi, hogy a „99”, amely a második játékos egészségi állapotát jelzi, megjelenik a hét szegmenses kijelzőn. Ezután a LED -ek egymás után felvillannak jobbról balra. Ez egy teljesítménysávot képez. Miután megtelt a tápellátás, visszaáll. Az első játékos célja, hogy elfordítsa a kapcsolót, amikor a léc a lehető legmagasabb. Minél több LED világít, annál nagyobb kárt okoz az egyik játékos a második játékosnak. Miután az első játékos elfordította a kapcsolót, az okozott sebzést levonják a második játékos egészségéből. Ezután a második játékos sorára kapcsol. Most a megjelenített szám a játékos egészségét jelzi, és a tápellátás balról jobbra telik. Amint a második játékos megmozdul, a kárt levonják, és ismét visszatér az első játékosra. Ez addig ismétlődik, amíg az egyik játékos eléri a 0 életerőt. A működésről készült videó csatolva van.

2. lépés: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Ez a játék lényegében egy nagy véges állapotú gép, amelynek összetett logikája az FSM állapotának megfelelően történik.

1. állapot: menü Az első állapot a menü képernyő, amely az egyik egyszerűbb állapot. Ez magában foglalja a hét szegmenses kijelzőt, amelyen megjelenik a „PLAY” szó, és a gombot, amely a játék elindítását eredményezi. A gomb, a BTN a következő állapotba vezet minket, ami a játékos köre.

2. állapot: Az első játékos köre

Az első játékos köre aktivál egy jelet, amely miatt a hét szegmenses kijelzőn megjelenik a második játékos egészsége. Egy másik jel bekapcsol, hogy aktiválja a másik általunk létrehozott modulból (Pone.vhd) importált váltásregisztert. Ez a váltásregiszter felgyújtja a LED -ek fényét, mint a növekvő teljesítménymérő más játékokban, majd visszaáll nullára, amikor eléri a meggyújtható LED -ek maximális mennyiségét. Frissül az óra emelkedő szélén, amelyet a barclock.vhd -ből szerzett, amelyet egy kölcsönzött laboratóriumi fájlból módosítanak. Volt, hogy az első játékos üteme jobbról indul, és balra töltődik fel, mert a játékos kapcsolója is a bal oldalon található (az intuitív felhasználói élmény érdekében). A kapcsoló megfordítása után az állapot a játékos egy levonására lép, és az aktív LED -ek menti a jelet.

3. állapot: az egyik játékos levonása Az aktív LED -ek jelzése határozza meg az egészség levonásának mértékét. Ez úgy történik, hogy van egy másik műszakregiszter (dedukt1.vhd), amely ahelyett, hogy növelné a LED -eket, csökkenti azokat. Ez csökken az egyik kölcsönzött és módosított óra div modul emelkedő szélén (downcounterclock.vhd). Amint egy LED kialszik, egy egészségi pont levonásra kerül a második játékos egészségi állapotából. Ha a folyamat során a kettes játékos eléri a 0 életerőt, akkor leállunk, és azonnal a „Game over” állapotba lépünk. Ellenkező esetben, amint a LED -vektor eléri a „0000000000000000” értéket, továbblépünk a második játékos sorára.

4. állapot: A második játékos köre A második játékos köre pontosan olyan, mint az első játékosé, kivéve, hogy a műszakregiszter (Ptwo.bhd) balról jobbra halad, és a kapcsoló a tábla jobb oldalán található. Egy jel aktiválódik, hogy megjelenjen az 1. játékos egészségi állapota. Amint a 2. kapcsoló aktív, ez a második játékos levonási körére lép.

5. szakasz: A második játékos levonása Akárcsak a második játékos köre, a második játékos levonása is hasonlít az első játékos levonásához. A fő különbség az, hogy a LED kikapcsolását szabályozó váltásregiszter az ellenkező irányba megy, amelyet könnyű módosítani, ha a játékos levonása megfelelően működik.

6. szakasz: A játék vége Ha a játékos bármely pontján eléri a nulla életerőt, a játék ebbe az állapotba kapcsol. Semmi divatos kijelző nem jelenik meg. Ha megnyomja a BTN egyet, akkor az állapot 99 -re áll vissza, és az állapot visszatér a menübe, és gyakorlatilag elölről kezdi a játékot.

3. lépés: Modulok

Modulok
Modulok

Fekete doboz diagram a játékhoz

Downcounterclock (Bryan Mealy clk_div.vhd modulja alapján):

Ez az óra kezeli a levonók időzítését. A max_count nevű konstans 3 -szor több, mint a barclock max_count állandója. Így a levonók 3x lassabbak lesznek, mint a rúd sebessége.

Barclock - (Bryan Mealy clk_div.vhd modulja alapján):

Ez az óra kezeli a teljesítménymérők időzítését, amelyet gyorsan növeltünk, hogy megnehezítsük a játékot. Ez az időzítés tetszés szerint beállítható, növelve a sebességet azáltal, hogy a max_count konstansot nagyobb számmal növeljük, vagy csökkentjük a max_count kisebb számmal. Sseg_dec - (Írta: Bryan Mealy): Ez a modul egy 8 bites számot vesz bemenetként, amelyet dekódol, átalakítja a számot tizedes megfelelőjévé, majd kimenetet ad a hét szegmenses kijelzőnek. Ahhoz, hogy ez a fájl működjön, meg kell győződnie arról, hogy korlátai megfelelnek a miénknek.

Játékos:

Ez egy műszakregiszter, amely balra tolja a biteket, és hozzáad egy forró bitet, hogy úgy tűnjön, mintha a teljesítménymérő nőne. Amikor az összes bit forró, minden bit visszaáll 0 -ra, és a ciklus elölről kezdődik.

Ptwo:

Ez a P1 modul fordított változata.

Deduktor 1:

Ez egy műszakregiszter és egy kivonó kombinációja. A műszakregiszter a P1 műszakregiszterével ellentétes irányba megy, levonást jelezve. Ez is kivon 1 -et a 2. játékos egészségi állapotából minden órajel ciklusban, tehát e két funkció kombinációjával úgy fog kinézni, hogy az ellenfél egészsége 1 -gyel csökken minden lecsökkenő állapotjelző minden ledje után.

Deductor2: Ez a Deductor1 modul fordított változata.

PlayDecoder (kölcsönözve és röviden módosítva az ekchen35649 -ből, 133 utasításból): Ez a menüállapotban a „PLAY” szó megjelenítésére szolgál a hét szegmenses dekódolón.

4. lépés: Teszt

Ezt a játékot eredetileg a Kirby egyik minijáték ihlette. Ez egy egyszerű kétjátékos játék, amelyet Basys 3 táblán vagy bármely FPGA-n lehet játszani.

1. lépés: Szükséges anyagok

Szüksége lesz rá: Digilent Basys 3, FPGA Board (vagy bármely más) A Vivado viszonylag naprakész változata, vagy más vhdl környezet. Számítógép, amely képes futtatni az említett programot A agy

2. lépés: A játék maga

Hogyan kell játszani

A kezdéshez nyomja meg a középső gombot. Ez azt eredményezi, hogy a „99”, amely a második játékos egészségi állapotát jelzi, megjelenik a hét szegmenses kijelzőn. Ezután a LED -ek egymás után felvillannak jobbról balra. Ez egy teljesítménysávot képez. Miután megtelt a tápellátás, visszaáll. Az első játékos célja, hogy elfordítsa a kapcsolót, amikor a léc a lehető legmagasabb. Minél több LED világít, annál nagyobb kárt okoz az egyik játékos a második játékosnak. Miután az első játékos elfordította a kapcsolót, az okozott sebzést levonják a második játékos egészségéből. Ezután a második játékos sorára kapcsol. Most a megjelenített szám a játékos egészségét jelzi, és a tápellátás balról jobbra telik. Amint a második játékos megmozdul, a kárt levonják, és ismét visszatér az első játékosra. Ez addig ismétlődik, amíg az egyik játékos eléri a 0 életerőt. A működésről készült videó csatolva van.

A játék lejátszásához töltse fel egy alaplapra, és nyomja meg a középső gombot. Próbálja meg fordítani a kapcsolót a lehető legtöbb aktív LED -el, majd várjon, és nézze, ahogy a tábla levonja ezeket a pontokat az ellenfél egészségi állapotából. Ezután adja át barátjának, és

3. lépés: FSM

Ez a játék lényegében egy nagy véges állapotú gép, amelynek összetett logikája az FSM állapotának megfelelően történik.

(Állami diagram)

1. állapot: menü

Az első állapot a menü képernyő, amely az egyik egyszerűbb állapot. Ez magában foglalja a hét szegmenses kijelzőt, amelyen megjelenik a „PLAY” szó, és a gombot, amely a játék elindítását eredményezi. A gomb, a BTN a következő állapotba vezet minket, ami a játékos köre.

2. állapot: Az első játékos köre

Az első játékos köre aktivál egy jelet, amely miatt a hét szegmenses kijelzőn megjelenik a második játékos egészsége. Egy másik jel bekapcsol, hogy aktiválja a másik általunk létrehozott modulból (Pone.vhd) importált váltásregisztert. Ez a váltásregiszter felgyújtja a LED -ek fényét, mint a növekvő teljesítménymérő más játékokban, majd visszaáll nullára, amikor eléri a meggyújtható LED -ek maximális mennyiségét. Frissül a barclock.vhd -ből beszerzett óra emelkedő szélén, amelyet egy kölcsönkért laboratóriumi fájlból módosítanak. Volt, hogy az első játékos üteme jobbról indul, és balra töltődik fel, mert a játékos kapcsolója is a bal oldalon található (az intuitív felhasználói élmény érdekében). A kapcsoló megfordítása után az állapot a játékos egy levonására lép, és az aktív LED -ek menti a jelet.

3. állapot: Az egyik játékos levonása

Az aktív LED -ek jelzése határozza meg a levonandó egészség mennyiségét. Ez úgy történik, hogy van egy másik műszakregiszter (dedukt1.vhd), amely ahelyett, hogy növelné a LED -eket, csökkenti azokat. Ez csökken az egyik kölcsönzött és módosított óra div modul emelkedő szélén (downcounterclock.vhd). Amint egy LED kialszik, egy egészségi pont levonásra kerül a második játékos egészségi állapotából. Ha a folyamat során a kettes játékos eléri a 0 életerőt, akkor leállunk, és azonnal a „Game over” állapotba lépünk. Ellenkező esetben, amint a LED -vektor eléri a „0000000000000000” értéket, továbblépünk a második játékos sorára.

4. állapot: A második játékos köre

A második játékos köre pontosan olyan, mint az első játékosé, kivéve, hogy a műszakregiszter (Ptwo.bhd) balról jobbra halad, és a kapcsoló a tábla jobb oldalán található. Egy jel aktiválódik, hogy megjelenjen az 1. játékos egészségi állapota. Amint a 2. kapcsoló aktív, ez a második játékos levonási körére lép.

5. szakasz: A második játékos levonása

Akárcsak a második játékos köre, a második játékos levonása is hasonlóan jár az első játékos levonásához. A fő különbség az, hogy a LED kikapcsolását szabályozó váltásregiszter az ellenkező irányba megy, amelyet könnyű módosítani, miután a játékos levonása megfelelően működik.

6. szakasz: A játék vége Ha a játékos bármely pontján eléri a nulla életerőt, akkor a játék ebbe az állapotba kapcsol. Semmi divatos kijelző nem jelenik meg. Ha megnyomja a BTN egyet, akkor az állapot 99 -re áll vissza, és az állapot visszatér a menübe, és gyakorlatilag újrakezdi a játékot.

Fekete doboz

4. lépés: Modulok

Downcounterclock (Bryan Mealy clk_div.vhd modulja alapján):

Ez az óra kezeli a levonók időzítését. A max_count nevű konstans háromszor több, mint a barclock max_count állandója. Így a levonók 3x lassabbak lesznek, mint a rúd sebessége.

Barclock - (Bryan Mealy clk_div.vhd modulja alapján): Ez az óra kezeli a teljesítménymérők időzítését, amelyet gyorsan növeltünk, hogy megnehezítsük a játékot. Ez az időzítés tetszés szerint beállítható, növelve a sebességet azáltal, hogy a max_count konstansot nagyobb számmal növeljük, vagy csökkentjük a max_count kisebb számmal. Sseg_dec - (Írta: Bryan Mealy): Ez a modul egy 8 bites számot vesz bemenetként, amelyet dekódol, átalakítja a számot tizedes megfelelőjévé, majd kimenetet ad a hét szegmenses kijelzőnek. Ahhoz, hogy ez a fájl működjön, meg kell győződnie arról, hogy korlátai megfelelnek a miénknek.

Pone: Ez egy műszakregiszter, amely balra tolja a biteket, és hozzáad egy forró bitet, hogy úgy tűnjön, mintha a teljesítménymérő nőne. Amikor az összes bit forró, minden bit visszaáll 0 -ra, és a ciklus elölről kezdődik.

Ptwo: Ez a P1 modul fordított változata.

Deductor1: Ez egy műszakregiszter és egy kivonó kombinációja. A műszakregiszter a P1 műszakregiszterével ellentétes irányba megy, levonást jelezve. Ez is kivon 1 -et a 2. játékos egészségi állapotából minden órajel ciklusban, tehát e két funkció kombinációjával úgy fog kinézni, hogy az ellenfél egészsége 1 -gyel csökken minden lecsökkenő állapotjelző minden ledje után.

Deductor2: Ez a Deductor1 modul fordított változata.

PlayDecoder (kölcsönözve és kissé módosítva az ekchen35649 -ből, a 133 utasításból):

Ez a menüállapotban a „PLAY” szó megjelenítésére szolgál a hét szegmenses dekódolón.

Teendők: képek, videó

Ajánlott: