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, Juli
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čunar koji može pokrenuti pomenuti program.

Korak 1: Sama igra

Igra sama
Igra sama

Kako FSM stupa u interakciju s modulima.

Kako igrati

Za početak, pritisnite srednje dugme. Ovo će uzrokovati da se “99”, koje predstavlja zdravlje igrača dva, prikaže na ekranu sa sedam segmenata. Zatim će LED diode svijetliti uzastopno zdesna nalijevo. Time se formira power bar. Nakon što se traka za napajanje napuni, resetira se. Cilj igrača jedan je da okrene prekidač kada 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 prebaci prekidač, nanesena šteta oduzima se od zdravlja igrača dva. Zatim se prelazi na red igrača dva. Sada prikazani broj predstavlja zdravlje igrača, a traka za napajanje se puni slijeva nadesno. Nakon što igrač dva napravi svoj potez, šteta se oduzima, i igrač se ponovo vraća na red. Ovo se ponavlja sve dok jedan igrač ne dosegne 0 zdravlja. Video zapis o ovom funkcioniranju nalazi se u prilogu.

Korak 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Ova igra je u suštini jedna velika mašina konačnog stanja, u kojoj se dešava neka složena logika zasnovana na stanju u kojem se nalazi FSM.

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

Stanje 2: Na redu je igrač jedan

Prvi igrač aktivira signal koji uzrokuje da sedmosegmentni ekran 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 resetirao na 0 kada dosegne najveću količinu LED dioda koja bi se mogla upaliti. Ažurira se uz rastuću ivicu sata dobijenu iz barclock.vhd, koji je modifikovan iz posuđene laboratorijske datoteke. Imali smo šipku jednog igrača koja počinje s desne strane i popunjava se s lijeve strane, jer je prekidač igrača jedan također s lijeve strane (za intuitivno korisničko iskustvo). Kada se prekidač okrene, 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 se smanjuje na rastućoj ivici jednog od modula div div koji smo posudili i izmijenili (downcounterclock.vhd). Dok je jedna LED lampica isključena, jedan bod zdravlja oduzima se od ukupnog zdravlja igrača dva. Ako tokom ovog procesa igrač dva dostigne 0 zdravlja, zaustavljamo se i odmah prelazimo u stanje “Game over”. U suprotnom, kada LED vektor dosegne "0000000000000000", prelazimo na red igrača dva.

Stanje 4: Skretanje igrača dva Na potezu igrača dva je potpuno isto kao i igrač na potezu, osim što registar pomaka za njega (Ptwo.bhd) ide s lijeva na desno, 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 oduzimanje poteza igrača dva.

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

Korak 6: Igra je završena Ako u bilo kojem trenutku bilo koji igrač dostigne nula zdravlja, igra se prebacuje u ovo stanje. Ništa elegantno prikazano. Ako se pritisne 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č (zasnovan na modulu clk_div.vhd od Bryana Mealyja):

Ovo je sat koji upravlja vremenom odbitka. Konstanta imenovana max_count je 3x veća od konstante max_count barclock -a. Ovo ć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 vrijeme se može prilagoditi vašem ukusu, povećavajući brzinu povećavajući konstantu 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 prikaz sa sedam segmenata. Da bi ova datoteka radila, morate biti sigurni da vaša ograničenja odgovaraju našim.

Ponedeljak:

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

Ptwo:

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 smanjuje.

Deductor2: Ovo je okrenuta verzija modula Deductor1.

PlayDecoder (posuđeno i glatko modifikovano iz ekchen35649 njegovih 133 instrukcija): Ovo se koristi u stanju menija za prikaz reči „PLAY“na dekodoru za sedam segmenata.

Korak 4: Testirajte

Ova je igra izvorno inspirirana jednom od Kirbyjevih mini igara. 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 srednje dugme. Ovo će uzrokovati da se “99”, koje predstavlja zdravlje igrača dva, prikaže na ekranu sa sedam segmenata. Zatim će LED diode svijetliti uzastopno zdesna nalijevo. Time se formira power bar. Nakon što se traka za napajanje napuni, resetira se. Cilj igrača jedan je da okrene prekidač kada 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 prebaci prekidač, nanesena šteta oduzima se od zdravlja igrača dva. Zatim se prelazi na red igrača dva. Sada prikazani broj predstavlja zdravlje igrača, a traka za napajanje se puni slijeva nadesno. Nakon što igrač dva napravi svoj potez, šteta se oduzima, i igrač se ponovo vraća na red. Ovo se ponavlja sve dok jedan igrač ne dosegne 0 zdravlja. Video zapis o ovom funkcioniranju nalazi se u prilogu.

Da biste igrali igru, postavite je na basys ploču i pritisnite srednje dugme. Pokušajte okrenuti prekidač sa što je više moguće aktivnih 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 igra je u suštini jedna velika mašina konačnog stanja, u kojoj se dešava neka složena logika zasnovana na stanju u kojem se nalazi FSM.

(Dijagram stanja)

Stanje 1: Meni

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

Stanje 2: Na redu je igrač jedan

Prvi igrač aktivira signal koji uzrokuje da sedmosegmentni ekran 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 maksimalnu količinu LED dioda koja bi mogla biti upaljena. Ažurira se na rastućoj ivici sata dobivenoj sa barclock.vhd, koji je modifikovan iz posuđene laboratorijske datoteke. Imali smo šipku jednog igrača koja počinje s desne strane i popunjava se s lijeve strane, jer je prekidač jednog igrača također s lijeve strane (za intuitivno korisničko iskustvo). Kada se prekidač okrene, stanje se prebacuje na odbitak za igrača, a količina aktivne LED diode sprema se u signal.

Stanje 3: Igraču jedan odbitak

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 se smanjuje na rastućoj ivici jednog od modula satnog div -a koje 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 tokom ovog procesa igrač dva dostigne 0 zdravlja, zaustavljamo se i odmah prelazimo u stanje “Game over”. U suprotnom, kada 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 jednog igrača, osim što registar pomaka za njega (Ptwo.bhd) ide s lijeva na desno, 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 oduzimanje poteza igrača dva.

Faza 5: Odbitak za igrača dva

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 jednostavna izmjena koju napravite kad odbitak igrača radi ispravno.

Korak 6: Igra je završena Ako u bilo kojem trenutku bilo koji igrač dostigne nula zdravlja, igra se prebacuje u ovo stanje. Ništa elegantno prikazano. Ako se pritisne 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č (zasnovan na modulu clk_div.vhd od Bryana Mealyja):

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

Barclock - (zasnovano na 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 vrijeme se može prilagoditi vašem ukusu, povećavajući brzinu povećavajući konstantu 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 decimalni ekvivalent, a zatim izlaz na prikaz sa sedam segmenata. Da bi ova datoteka radila, 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 izgledalo kao da se mjerač snage povećava. Kad su svi bitovi vrući, svi se bitovi vraćaju na '0' i 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 na ljestvici zdravlja koji se smanjuje.

Deductor2: Ovo je okrenuta verzija modula Deductor1.

PlayDecoder (posuđen i malo izmijenjen iz ekchen35649 njegovih 133 instrukcija):

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

Obaveze: slike, video

Preporučuje se: