Sadržaj:

Konkurentna igra za mjerenje vremena protiv 2 igrača: 4 koraka
Konkurentna igra za mjerenje vremena protiv 2 igrača: 4 koraka

Video: Konkurentna igra za mjerenje vremena protiv 2 igrača: 4 koraka

Video: Konkurentna igra za mjerenje vremena protiv 2 igrača: 4 koraka
Video: УЛЬТРА ДОРОГИЕ МАШИНЫ vs РАЗРУШЕННОГО МОСТА! РАЗБИЛ ЛАМБО !!! 2024, Srpanj
Anonim
Konkurentna igra za mjerenje vremena za 2 igrača
Konkurentna igra za mjerenje vremena za 2 igrača

Trebat će vam:

1. Digilent Basys 3, FPGA ploča (ili bilo koja druga FPGA,)

2. Relativno ažurirana verzija Vivada ili nekog drugog VHDL okruženja

3. Računalo koje može pokrenuti spomenuti program.

Korak 1: Sama igra

Sama igra
Sama igra

Kako FSM stupa u interakciju s modulima.

Kako igrati

Za početak pritisnite srednji gumb. To će uzrokovati da se "99", koje predstavlja zdravlje igrača dva, prikaže na zaslonu sa sedam segmenata. Zatim će LED diode svijetliti uzastopno zdesna nalijevo. Time se formira power bar. Kad se traka za napajanje napuni, resetira se. Cilj igrača jedan je okrenuti prekidač kad je bar što je moguće više. Što je više LED lampica zasvijetlilo, igrač više štete nanosi igraču dva. Nakon što igrač jedan okrene prekidač, nanesena šteta oduzima se od zdravlja igrača dva. Zatim se prebacuje na red igrača dva. Sada prikazani broj predstavlja zdravlje igrača, a traka za uključivanje puni se slijeva nadesno. Nakon što igrač dva napravi svoj potez, šteta se oduzima, a igrač se ponovno vraća na red. Ovo se ponavlja sve dok jedan igrač ne dosegne 0 zdravlja. Videozapis ovog funkcioniranja nalazi se u privitku.

Korak 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Ova je igra u biti jedan veliki konačni stroj, u kojem se događa neka složena logika koja se temelji na stanju u kojem se nalazi FSM.

Stanje 1: Izbornik Prvo stanje je zaslon izbornika, koji je jedno od jednostavnijih stanja. Uključuje zaslon sa sedam segmenata koji prikazuje riječ “PLAY” i gumb koji uzrokuje početak igre. Gumb, BTN, vodi nas do sljedećeg stanja, a to je red na igrača.

Stanje 2: Na redu je igrač jedan

Na potezu igrača jedan aktivira se signal koji na zaslonu od sedam segmenata prikazuje zdravlje igrača dva. Uključuje se drugi signal za aktiviranje registra pomaka uvezenog iz drugog modula koji smo kreirali (Pone.vhd). Ovaj registar pomaka čini da LED dioda svijetli poput povećanog mjerača snage u drugim igrama, a zatim bi se vratio na 0 kada dosegne najveću količinu LED dioda koja bi se mogla upaliti. Ažurira se uz rastući rub sata dobiven iz barclock.vhd, koji je izmijenjen iz posuđene laboratorijske datoteke. Traka igrača jedan je započela s desne strane i ispunila se s lijeve strane, jer je prekidač igrača jedan također s lijeve strane (za intuitivno korisničko iskustvo). Nakon što se prekidač pomakne, stanje se prebacuje na jedan odbitak igrača, a količina aktivne LED diode sprema se u signal.

Stanje 3: Odbitak igrača jedan Signal s količinom aktivne LED diode određuje količinu zdravlja koja se oduzima. To se postiže postojanjem drugog registra pomaka (deductor1.vhd) koji umjesto da povećava LED diode, smanjuje ih. Ovo smanjenje na rastućem rubu jednog od modula div div koji smo posudili i izmijenili (downcounterclock.vhd). Kako je jedna LED isključena, jedna bodova zdravlja oduzima se od ukupnog zdravlja igrača dva. Ako tijekom ovog procesa igrač dva dosegne 0 zdravlja, zaustavljamo se i odmah prelazimo u stanje “Game over”. U protivnom, kad LED vektor dosegne "0000000000000000", prelazimo na red igrača dva.

Stanje 4: Skretanje drugog igrača Skretanje drugog igrača je potpuno isto kao što je na potezu jedan igrač, osim što registar pomaka za njega (Ptwo.bhd) ide slijeva nadesno, a prekidač je s desne strane ploče. Aktivira se signal za prikaz zdravstvenog stanja igrača 1. Nakon što je prekidač 2 aktivan, ovo se prebacuje na skidanje poteza igrača dva.

Faza 5: Igrač dva oduzima odbitak Baš kao što je na redu drugi igrač, odbitak drugog igrača djeluje slično kao i igrač koji oduzima jedan. Glavna razlika je u tome što registar pomaka koji kontrolira gašenje LED diode ide u suprotnom smjeru, što je laka izmjena koju napravite kad odbitak igrača radi ispravno.

Korak 6: Igra je završena Ako u bilo kojem trenutku bilo koji igrač dosegne nula zdravlja, igra se prebacuje u ovo stanje. Ništa elegantnih prikaza. Ako se pritisne tipka BTN, zdravlje se vraća na 99, a stanje se vraća na izbornik, čime se igra započinje iznova.

Korak 3: Moduli

Moduli
Moduli

Dijagram crne kutije za igru

Donji brojač (prema modulu clk_div.vhd autora Bryana Mealyja):

Ovo je sat koji upravlja vremenom odbitka. Konstanta imenovana max_count je 3x veća od konstante max_count barclock -a. To će odbitke učiniti 3x sporijom od brzine šipke.

Barclock - (prema modulu clk_div.vhd od Bryana Mealyja):

Ovaj sat upravlja vremenom mjerenja mjerača energije, što smo brzo povećali kako bismo dodali poteškoće u igri. Ovo se vrijeme može prilagoditi vašim željama, povećavajući brzinu povećanjem konstante max_count većim brojem ili je smanjujući tako da max_count bude manji broj. Sseg_dec - (Napisao Bryan Mealy): Ovaj modul uzima 8 -bitni broj kao ulaz, koji dekodira, pretvarajući broj u njegov decimalni ekvivalent, a zatim izlaz na zaslon sa sedam segmenata. Da bi ova datoteka radila, morate biti sigurni da vaša ograničenja odgovaraju našim.

Proja:

Ovo je registar pomaka koji pomiče bitove ulijevo, dodajući jedan vrući bit kako bi izgledao kao da se mjerač snage povećava. Kad su svi bitovi vrući, svi se bitovi vraćaju na "0", a ciklus počinje iznova.

Dva:

Ovo je okrenuta verzija P1 modula.

Odvodnik1:

Ovo je kombinacija registra pomaka i oduzimača. Registar pomaka ide u suprotnom smjeru od registra pomaka P1, što ukazuje na odbitak. Ovo također oduzima 1 od zdravlja igrača 2 za svaki ciklus takta, pa će kombinacijom ove dvije funkcije izgledati kao da se zdravlje protivnika smanjuje za 1 za svaki led zdravstvene trake koji se spusti.

Deductor2: Ovo je okrenuta verzija modula Deductor1.

PlayDecoder (posuđeno i glatko izmijenjeno iz ekchen35649 njegovih 133 instrukcija): Ovo se koristi u stanju izbornika za prikaz riječi "PLAY" na dekoderu sa sedam segmenata.

Korak 4: Testirajte

Ova je igra izvorno inspirirana jednom od mini igara iz Kirbyja. To je jednostavna igra za dva igrača koja se može igrati na Basys 3 ploči ili bilo kojoj FPGA.

Korak 1: Potrebni materijali

Trebat će vam: Digilent Basys 3, FPGA ploča (ili bilo koja druga) Relativno ažurirana verzija Vivada ili nekog drugog vhdl okruženja Računalo koje može pokrenuti spomenuti program Mozak

Korak 2: Sama igra

Kako igrati

Za početak pritisnite srednji gumb. To će uzrokovati da se "99", koje predstavlja zdravlje igrača dva, prikaže na zaslonu sa sedam segmenata. Zatim će LED diode svijetliti uzastopno zdesna nalijevo. Time se formira power bar. Kad se traka za napajanje napuni, resetira se. Cilj igrača jedan je okrenuti prekidač kad je bar što je moguće više. Što više LED lampica zasvijetli, igrač više štete nanosi igraču dva. Nakon što igrač jedan okrene prekidač, nanesena šteta oduzima se od zdravlja igrača dva. Zatim se prebacuje na red igrača dva. Sada prikazani broj predstavlja zdravlje igrača, a traka za uključivanje puni se slijeva nadesno. Nakon što igrač dva napravi svoj potez, šteta se oduzima i igrač se ponovno vraća na red. Ovo se ponavlja sve dok jedan igrač ne dosegne 0 zdravlja. Videozapis ovog funkcioniranja nalazi se u privitku.

Da biste igrali igru, umetnite je na basys ploču i pritisnite srednji gumb. Pokušajte okrenuti prekidač sa što je više moguće LED dioda, a zatim pričekajte i gledajte dok ploča oduzima te bodove od zdravlja vašeg protivnika. Zatim je proslijedite svom prijatelju i

Korak 3: FSM

Ova je igra u biti jedan veliki konačni stroj, u kojem se događa neka složena logika koja se temelji na stanju u kojem se nalazi FSM.

(Dijagram stanja)

Stanje 1: Izbornik

Prvo stanje je zaslon izbornika, koji je jedno od jednostavnijih stanja. Uključuje zaslon sa sedam segmenata koji prikazuje riječ “PLAY” i gumb koji uzrokuje početak igre. Gumb, BTN, vodi nas do sljedećeg stanja, a to je red na igrača.

Stanje 2: Na redu je igrač jedan

Na potezu igrača jedan aktivira se signal koji na zaslonu od sedam segmenata prikazuje zdravlje igrača dva. Uključuje se drugi signal za aktiviranje registra pomaka uvezenog iz drugog modula koji smo kreirali (Pone.vhd). Ovaj registar pomaka čini da LED dioda svijetli poput povećanog mjerača snage u drugim igrama, a zatim bi se vratio na 0 kada dosegne najveću količinu LED dioda koja bi se mogla upaliti. Ažurira se uz rastući rub sata dobiven iz barclock.vhd, koji je izmijenjen iz posuđene laboratorijske datoteke. Traka igrača jedan je započela s desne strane i ispunila se s lijeve strane, jer je prekidač igrača jedan također s lijeve strane (za intuitivno korisničko iskustvo). Nakon što se prekidač pomakne, stanje se prebacuje na jedan odbitak igrača, a količina aktivne LED diode sprema se u signal.

Stanje 3: Igrač jedan oduzima

Signal s količinom aktivne LED diode određuje količinu zdravlja koja se oduzima. To se postiže postojanjem drugog registra pomaka (deductor1.vhd) koji umjesto da povećava LED diode, smanjuje ih. Ovo smanjenje na rastućem rubu jednog od modula div div koji smo posudili i izmijenili (downcounterclock.vhd). Dok je jedna LED lampica isključena, jedna bodova zdravlja oduzima se od ukupnog zdravlja igrača dva. Ako tijekom ovog procesa igrač dva dosegne 0 zdravlja, zaustavljamo se i odmah prelazimo u stanje “Game over”. U protivnom, kad LED vektor dosegne "0000000000000000", prelazimo na red igrača dva.

Stanje 4: Na redu je igrač dva

Na redu drugog igrača je baš kao na potezu igrača jednog, osim što registar pomaka za njega (Ptwo.bhd) ide slijeva nadesno, a prekidač je s desne strane ploče. Aktivira se signal za prikaz zdravstvenog stanja igrača 1. Nakon što je prekidač 2 aktivan, ovo se prebacuje na skidanje poteza igrača dva.

Faza 5: Odbitak drugog igrača

Baš kao što je na redu drugi igrač, odbitak drugog igrača djeluje slično kao oduzimanje igrača jedan. Glavna razlika je u tome što registar pomaka koji kontrolira gašenje LED diode ide u suprotnom smjeru, što je laka izmjena koju napravite kad odbitak igrača radi ispravno.

Korak 6: Igra je završena Ako u bilo kojem trenutku bilo koji igrač dosegne nula zdravlja, igra se prebacuje u ovo stanje. Ništa elegantnih prikaza. Ako se pritisne tipka BTN, zdravlje se vraća na 99, a stanje se vraća na izbornik, čime se igra započinje iznova.

Crna kutija

Korak 4: Moduli

Donji brojač (prema modulu clk_div.vhd autora Bryana Mealyja):

Ovo je sat koji upravlja vremenom odbitka. Konstanta imenovana max_count je 3x veća od konstante max_count barclock -a. To će odbitke učiniti 3x sporijom od brzine šipke.

Barclock - (prema modulu clk_div.vhd od Bryana Mealyja): Ovaj sat upravlja vremenom mjerenja mjerača energije, što smo brzo povećali kako bismo igri dodali poteškoće. Ovo se vrijeme može prilagoditi vašem ukusu, povećavajući brzinu povećanjem konstante max_count većim brojem ili je smanjujući tako da max_count bude manji broj. Sseg_dec - (Napisao Bryan Mealy): Ovaj modul uzima 8 -bitni broj kao ulaz, koji dekodira, pretvarajući broj u njegov decimalni ekvivalent, a zatim izlaz na zaslon sa sedam segmenata. Da bi ova datoteka funkcionirala, morate biti sigurni da vaša ograničenja odgovaraju našim.

Pone: Ovo je registar pomaka koji pomiče bitove ulijevo, dodajući jedan vrući bit kako bi izgledao kao da se mjerač snage povećava. Kad su svi bitovi vrući, svi se bitovi vraćaju na "0", a ciklus počinje iznova.

Ptwo: Ovo je okrenuta verzija P1 modula.

Deductor1: Ovo je kombinacija registra pomaka i oduzimača. Registar pomaka ide u suprotnom smjeru od registra pomaka P1, što ukazuje na odbitak. Ovo također oduzima 1 od zdravlja igrača 2 za svaki ciklus takta, pa će kombinacijom ove dvije funkcije izgledati kao da se zdravlje protivnika smanjuje za 1 za svaki led zdravstvene trake koji se spusti.

Deductor2: Ovo je okrenuta verzija modula Deductor1.

PlayDecoder (posuđeno i malo izmijenjeno iz ekchen35649 njegovih 133 instrukcija):

Ovo se koristi u stanju izbornika za prikaz riječi “PLAY” na dekodoru sa sedam segmenata.

Za napraviti: slike, video

Preporučeni: