Talaan ng mga Nilalaman:

2 Paligsahan ng Player ng VS Timing Game: 4 na Hakbang
2 Paligsahan ng Player ng VS Timing Game: 4 na Hakbang

Video: 2 Paligsahan ng Player ng VS Timing Game: 4 na Hakbang

Video: 2 Paligsahan ng Player ng VS Timing Game: 4 na Hakbang
Video: Biglang Ginanahan si Rhenz Abando, Nginitian at Tinitigan ng mga Koreana! 2024, Hulyo
Anonim
2 Paligsahan ng Player ng VS Timing Game
2 Paligsahan ng Player ng VS Timing Game

Kakailanganin mong:

1. Mapagbantay na Basys 3, FPGA Board (o anumang iba pang FPGA,)

2. Isang medyo napapanahong bersyon ng Vivado, o ilang iba pang kapaligiran ng VHDL

3. Isang computer na maaaring magpatakbo ng nabanggit na programa.

Hakbang 1: Ang Laro Mismo

Ang Laro Mismo
Ang Laro Mismo

Paano nakikipag-ugnay ang FSM sa mga modyul.

Paano laruin

Upang magsimula, pindutin mo ang gitnang pindutan. Magiging sanhi ito ng "99", na kumakatawan sa kalusugan ng player ng dalawa, na ipakita sa pitong segment na pagpapakita. Pagkatapos, ang mga LED ay sindihan nang sunud-sunod mula sa kanan hanggang kaliwa. Bumubuo ito ng isang power bar. Kapag puno na ang power bar, nag-i-reset ito. Ang object ng player ng isa ay upang i-flip ang kanilang switch kapag ang bar ay kasing taas hangga't maaari. Ang mas maraming LEDs naiilawan, mas maraming pinsala player ang ginagawa sa player ng dalawa. Matapos i-flip ng isang player ang kanilang switch, ibabawas ang pinsala na nakitungo sa kalusugan ng manlalaro. Pagkatapos, lilipat ito sa turn ng player na dalawa. Ngayon, ang ipinakitang numero ay kumakatawan sa kalusugan ng manlalaro, at ang power bar ay pumupuno mula kaliwa hanggang kanan. Kapag lumipat na ang player ng dalawa, nabawasan ang pinsala, at bumalik ulit ito sa player. Umuulit ito hanggang sa ang isang manlalaro ay umabot sa 0 kalusugan. Nakalakip ang video ng paggana na ito.

Hakbang 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Ang larong ito ay mahalagang isang malaking hangganan ng makina ng estado, na kung saan ang ilang mga kumplikadong lohika ay nangyayari batay sa estado na ang FSM ay nasa.

Estado 1: Menu Ang unang estado ay ang screen ng menu, na kung saan ay isa sa mga mas simpleng estado. Kabilang dito ang pitong segment na pagpapakita ng pagpapakita ng salitang "PLAY", at ang pindutan na sanhi ng pagsisimula ng laro. Ang pindutan, BTN, ay hahantong sa amin sa susunod na estado, na turn ng player.

Estado 2: Ang turn ng Player One

Ang turn ng player one ay nagpapagana ng isang senyas na sanhi ng display ng pitong segment upang ipakita ang kalusugan ng Player two. Ang isa pang senyas ay nakabukas upang maisaaktibo ang isang rehistro ng shift na na-import mula sa ibang module na nilikha namin (Pone.vhd). Ang rehistro ng paglilipat na ito ay nagpapasindi ng ilaw ng LED tulad ng isang pagtaas ng sukat ng kuryente sa iba pang mga laro, at pagkatapos ay i-reset ito sa 0 kapag naabot nito ang maximum na halaga ng mga LED na maaaring naiilawan. Ina-update ito sa tumataas na gilid ng orasan na nakuha mula sa barclock.vhd, na binago mula sa isang hiniram na file ng lab. Kami ay nagsimula sa bar ng player mula sa kanan, at punan hanggang sa kaliwa, dahil ang switch ng player ay nasa kaliwa din (para sa madaling maunawaan na karanasan ng gumagamit). Kapag na-flip ang switch, ang estado ay lumilipat sa player ng isang ibawas, at ang dami ng aktibo ng LED ay nai-save sa isang senyas.

State 3: Player One bawas Ang signal na may dami ng aktibo ng LED ay tumutukoy sa dami ng kalusugan na nakakakuha ng ibawas. Ginagawa ito sa pamamagitan ng pagkakaroon ng isa pang rehistro ng paglilipat (deductor1.vhd) na sa halip na nadagdagan ang mga LED, binabawasan ang mga ito. Ang mga pagbawas na ito sa tumataas na gilid ng isa sa mga module ng orasan na hiniram at binago (downcounterclock.vhd). Kanan bilang isang LED ay naka-patay, isang punto ng kalusugan ay nabawasan mula sa kabuuang kalusugan ng manlalaro. Kung sa proseso ng prosesong ito ang dalawa ay umabot sa 0 kalusugan, humihinto kami at agad na lumipat sa estado na "Game over". Kung hindi man, sa sandaling maabot ng LED vector ang "0000000000000000", lumipat tayo sa turn ng player na dalawa.

State 4: Ang turn ng Player Two ay ang turn ng Player two ay eksaktong katulad ng turn ng player one, maliban sa shift register para dito (Ptwo.bhd) mula kaliwa hanggang kanan, at ang switch ay nasa kanang bahagi ng board. Ang isang senyas ay nagpapagana upang ipakita ang kalusugan ng Player 1. Sa sandaling aktibo ang switch 2, lumilipat ito sa pagbawas sa pagbawas ng Player Two.

Yugto 5: Dalawang Manlalaro ng Duha Tulad ng pagliko ng manlalaro, ang manlalaro ng dalawang pagbawas ay kumikilos tulad ng isang bawas sa manlalaro. Ang pangunahing pagkakaiba ay ang rehistro ng paglilipat na kumokontrol sa pag-patay ng LED ay papunta sa kabaligtaran na direksyon, na isang madaling pagbabago na magagawa kapag mayroon kang nabawas na maayos na paggana ng manlalaro.

Stage 6: Game Over Kung sa anumang punto ang alinman sa manlalaro ay umabot sa zero kalusugan, ang laro ay lilipat sa estadong ito. Walang magarbong ipinapakita. Kung ang BTN isa ay pinindot, pagkatapos ang kalusugan ay na-reset sa 99, at ang estado ay bumalik sa menu, na epektibo ang pagsisimula ng laro.

Hakbang 3: Mga Modyul

Mga Modyul
Mga Modyul

Black Box Diagram para sa Laro

Downcounterclock (batay sa clk_div.vhd module ni Bryan Mealy):

Ito ang orasan na humahawak sa oras ng mga deductor. Ang pare-parehong pinangalanang max_count ay 3x higit pa sa pare-pareho ng max_count ng orasan. Gagawin nitong mas mabagal ang mga nagbabawas sa 3x kaysa sa bilis ng bar.

Barclock - (batay sa module ng clk_div.vhd ni Bryan Mealy):

Hawak ng orasan na ito ang tiyempo ng mga pagsukat ng kuryente, na ginawa naming mabilis na pagtaas upang magdagdag ng kahirapan sa laro. Ang oras na ito ay maaaring ayusin ayon sa gusto mo, pagdaragdag ng bilis sa pamamagitan ng paggawa ng pare-parehong max_count ng isang mas malaking bilang, o pagbaba nito sa pamamagitan ng paggawa ng max_count ng isang mas maliit na bilang. Sseg_dec - (Isinulat ni Bryan Mealy): Ang module na ito ay tumatagal ng isang 8 bit na bilang bilang input, na kung saan ito decode, convert ang numero sa kanyang katumbas na decimal, at pagkatapos ay output sa pitong segment na display. Upang gumana ang file na ito, kailangan mong tiyakin na ang iyong mga hadlang ay tumutugma sa amin.

Pone:

Ito ay isang paglilipat ng rehistro na nagbabago ng mga piraso sa kaliwa, pagdaragdag ng isang mainit na piraso upang magmukhang tumataas ang sukat ng kuryente. Kapag ang lahat ng mga piraso ay mainit, ang lahat ng mga piraso ay nai-reset sa '0', at ang ikot ay nagsisimula muli.

Ptwo:

Ito ay isang flip na bersyon ng module na P1.

Bawas1:

Ito ay isang kumbinasyon ng isang rehistro ng paglilipat at isang nagbabawas. Ang shift register ay papunta sa kabaligtaran ng direksyon ng shift register ng P1, na nagpapahiwatig ng isang pagbawas. Ibinawas din nito ang 1 mula sa kalusugan ng Player 2 para sa bawat ikot ng orasan, kaya sa pagsasama ng dalawang pagpapaandar na ito, mukhang ang kalusugan ng kalaban ay bumababa ng 1 para sa bawat humantong sa health bar na bumababa.

Deductor2: Ito ay isang flip na bersyon ng module na Deductor1.

PlayDecoder (hiniram at slgihtly binago mula sa ekchen35649 kanyang 133 na itinuturo): Ginagamit ito sa menu ng menu upang ipakita ang salitang "MAGLARO" sa pitong segment na decoder.

Hakbang 4: Pagsubok

Ang larong ito ay orihinal na inspirasyon ng isa sa mga minigame mula sa Kirby. Ito ay isang simpleng laro ng dalawang manlalaro na maaaring i-play sa isang Basys 3 Board, o anumang FPGA.

Hakbang 1: Mga Kinakailangan na Materyales

Kakailanganin mo: Digilent Basys 3, FPGA Board (o anumang iba pa) Isang medyo napapanahong bersyon ng Vivado, o ilang iba pang kapaligiran na vhdl Isang computer na maaaring magpatakbo ng nabanggit na programa Isang utak

Hakbang 2: Ang Laro Mismo

Paano laruin

Upang magsimula, pindutin mo ang gitnang pindutan. Magiging sanhi ito ng "99", na kumakatawan sa kalusugan ng player ng dalawa, na ipakita sa pitong segment na pagpapakita. Pagkatapos, ang mga LED ay sindihan nang sunud-sunod mula sa kanan hanggang kaliwa. Bumubuo ito ng isang power bar. Kapag puno na ang power bar, nag-i-reset ito. Ang object ng player ng isa ay upang i-flip ang kanilang switch kapag ang bar ay kasing taas hangga't maaari. Ang mas maraming LEDs naiilawan, mas maraming pinsala player ang ginagawa sa player ng dalawa. Matapos i-flip ng isang player ang kanilang switch, ibabawas ang pinsala na nakitungo sa kalusugan ng manlalaro. Pagkatapos, lilipat ito sa turn ng player na dalawa. Ngayon, ang ipinakitang numero ay kumakatawan sa kalusugan ng manlalaro, at ang power bar ay pumupuno mula kaliwa hanggang kanan. Kapag lumipat na ang player ng dalawa, nabawasan ang pinsala, at bumalik ulit ito sa player. Umuulit ito hanggang sa ang isang manlalaro ay umabot sa 0 kalusugan. Nakalakip ang video ng paggana na ito.

Upang i-play ang laro, i-load ito sa isang basys board, at pindutin ang gitnang pindutan. Subukang i-flip ang switch gamit ang maraming aktibo ng LED hangga't maaari, at pagkatapos ay maghintay at manuod habang binabawas ng board ang mga puntong iyon mula sa kalusugan ng iyong kalaban. Pagkatapos, ipasa ito sa iyong kaibigan, at

Hakbang 3: FSM

Ang larong ito ay mahalagang isang malaking hangganan ng makina ng estado, na kung saan ang ilang mga kumplikadong lohika ay nangyayari batay sa estado na ang FSM ay nasa.

(Diagram ng Estado)

Estado 1: Menu

Ang unang estado ay ang screen ng menu, na kung saan ay isa sa mga mas simpleng estado. Kabilang dito ang pitong segment na pagpapakita ng pagpapakita ng salitang "MAGLARO", at ang pindutan na sanhi ng pagsisimula ng laro. Ang pindutan, BTN, ay hahantong sa amin sa susunod na estado, na turn ng player.

Estado 2: Ang turn ng Player One

Ang turn ng player one ay nagpapagana ng isang senyas na sanhi ng display ng pitong segment upang ipakita ang kalusugan ng Player two. Ang isa pang senyas ay nakabukas upang maisaaktibo ang isang rehistro ng shift na na-import mula sa ibang module na nilikha namin (Pone.vhd). Ang rehistro ng paglilipat na ito ay nagpapasindi ng ilaw ng LED tulad ng isang pagtaas ng sukat ng kuryente sa iba pang mga laro, at pagkatapos ay i-reset ito sa 0 kapag naabot nito ang maximum na halaga ng mga LED na maaaring naiilawan. Ina-update ito sa tumataas na gilid ng orasan na nakuha mula sa barclock.vhd, na binago mula sa isang hiniram na file ng lab. Kami ay nagsimula sa bar ng player mula sa kanan, at punan hanggang sa kaliwa, dahil ang switch ng player ay nasa kaliwa din (para sa madaling maunawaan na karanasan ng gumagamit). Kapag na-flip ang switch, ang estado ay lumilipat sa player ng isang ibawas, at ang dami ng aktibo ng LED ay nai-save sa isang senyas.

Estado 3: Binawasan ang Isang Player

Ang signal na may dami ng aktibo ng LED ay tumutukoy sa dami ng kalusugan na nababawas. Ginagawa ito sa pamamagitan ng pagkakaroon ng isa pang rehistro ng paglilipat (deductor1.vhd) na sa halip na nadagdagan ang mga LED, binabawasan ang mga ito. Ang mga pagbawas na ito sa tumataas na gilid ng isa sa mga module ng orasan na hiniram at binago (downcounterclock.vhd). Kanan mismo bilang isang LED ay naka-patay, isang punto ng kalusugan ay nabawasan mula sa kabuuang kalusugan ng manlalaro. Kung sa proseso ng prosesong ito, ang dalawa ay umabot sa 0 kalusugan, humihinto kami at agad na lumipat sa estado na "Game over". Kung hindi man, sa sandaling maabot ng LED vector ang "0000000000000000", lumipat tayo sa turn ng player na dalawa.

Estado 4: Ang turn ng Player Two

Ang turn ng player two ay eksaktong katulad ng turn ng player one, maliban sa shift register para dito (Ptwo.bhd) ay pupunta sa kaliwa hanggang kanan, at ang switch ay nasa kanang bahagi ng board. Ang isang senyas ay nagpapagana upang ipakita ang kalusugan ng Player 1. Sa sandaling aktibo ang switch 2, lumilipat ito sa pagbawas sa pagbawas ng Player Two.

Yugto 5: Dalawang Player Ibawas

Tulad ng pagliko ng manlalaro, ang player na dalawang binabawas ay kumikilos tulad ng binawas ng manlalaro. Ang pangunahing pagkakaiba ay ang rehistro ng paglilipat na kumokontrol sa pag-patay ng LED ay papunta sa kabaligtaran na direksyon, na isang madaling pagbabago na magagawa kapag mayroon kang nabawas na maayos na paggana ng manlalaro.

Stage 6: Game Over Kung sa anumang punto ang alinman sa manlalaro ay umabot sa zero kalusugan, ang laro ay lilipat sa estadong ito. Walang magarbong ipinapakita. Kung ang BTN isa ay pinindot, pagkatapos ang kalusugan ay na-reset sa 99, at ang estado ay bumalik sa menu, na epektibo ang pagsisimula ng laro.

Itim na kahon

Hakbang 4: Mga Modyul

Downcounterclock (batay sa clk_div.vhd module ni Bryan Mealy):

Ito ang orasan na humahawak sa oras ng mga deductor. Ang pare-parehong pinangalanang max_count ay 3x higit pa sa pare-pareho ng max_count ng orasan. Gagawin nitong mas mabagal ang mga nagbabawas sa 3x kaysa sa bilis ng bar.

Barclock - (batay sa module ng clk_div.vhd ni Bryan Mealy): Hawak ng orasan na ito ang tiyempo ng mga pagsukat ng kuryente, na ginawa naming mabilis na pagdaragdag upang magdagdag ng kahirapan sa laro. Ang oras na ito ay maaaring ayusin ayon sa gusto mo, pagdaragdag ng bilis sa pamamagitan ng paggawa ng pare-pareho na max_count ng isang mas malaking numero, o pagbaba nito sa pamamagitan ng paggawa ng max_count ng isang mas maliit na bilang. Sseg_dec - (Isinulat ni Bryan Mealy): Ang module na ito ay tumatagal ng isang 8 bit na bilang input, na kung saan ito decode, convert ang numero sa kanyang katumbas na decimal, at pagkatapos ay output sa pitong segment na display. Upang gumana ang file na ito, kailangan mong tiyakin na ang iyong mga hadlang ay tumutugma sa amin.

Pone: Ito ay isang rehistro ng paglilipat na nagbabago ng mga piraso sa kaliwa, pagdaragdag ng isang mainit na piraso upang magmukhang tumataas ang sukat ng kuryente. Kapag ang lahat ng mga piraso ay mainit, ang lahat ng mga piraso ay nai-reset sa '0', at ang ikot ay nagsisimula muli.

Ptwo: Ito ay isang flip na bersyon ng P1 module.

Deductor1: Ito ay isang kumbinasyon ng isang shift register at isang nagbabawas. Ang shift register ay papunta sa kabaligtaran ng direksyon ng shift register ng P1, na nagpapahiwatig ng isang pagbawas. Ibinawas din nito ang 1 mula sa kalusugan ng Player 2 para sa bawat ikot ng orasan, kaya sa pagsasama ng dalawang pagpapaandar na ito, mukhang ang kalusugan ng kalaban ay bumababa ng 1 para sa bawat humantong sa health bar na bumababa.

Deductor2: Ito ay isang flip na bersyon ng module na Deductor1.

PlayDecoder (hiniram at bahagyang nabago mula sa ekchen35649 kanyang 133 na itinuturo):

Ginagamit ito sa menu ng estado upang ipakita ang salitang "MAGLARO" sa pitong segment na decoder.

Dapat Gawin: mga larawan, video

Inirerekumendang: