Innholdsfortegnelse:

2 spillerers konkurransedyktige VS -tidsspill: 4 trinn
2 spillerers konkurransedyktige VS -tidsspill: 4 trinn

Video: 2 spillerers konkurransedyktige VS -tidsspill: 4 trinn

Video: 2 spillerers konkurransedyktige VS -tidsspill: 4 trinn
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, Juli
Anonim
2 spillerers konkurransedyktige VS -tidsspill
2 spillerers konkurransedyktige VS -tidsspill

Du vil trenge:

1. Digilent Basys 3, FPGA Board (eller annen FPGA,)

2. En relativt oppdatert versjon av Vivado, eller et annet VHDL -miljø

3. En datamaskin som kan kjøre det nevnte programmet.

Trinn 1: Selve spillet

Selve spillet
Selve spillet

Hvordan FSM samhandler med modulene.

Hvordan spille

For å starte trykker du på den midtre knappen. Dette vil føre til at "99", som representerer helsen til spiller to, vises på displayet med syv segmenter. Deretter lyser lysdiodene i rekkefølge fra høyre til venstre. Dette danner en strømlinje. Når strømlinjen er full, tilbakestilles den. Formålet med spiller en er å snu bryteren når stangen er så høy som mulig. Jo flere lysdioder lyser, jo mer skade spiller gjør spilleren to. Etter at spiller en vender bryteren, blir skaden som blir trukket trukket fra spillerens to helse. Deretter bytter den til spiller to sin tur. Nå viser tallet som vises spillerens helse, og strømlinjen fylles opp fra venstre til høyre. Når spiller to gjør sitt trekk, blir skaden trukket, og det er tilbake til spiller en sin tur igjen. Dette gjentas til en spiller når 0 helse. Video av denne funksjonen er vedlagt.

Trinn 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Dette spillet er i hovedsak en stor endelig tilstandsmaskin, som noen komplekse logikker skjer basert på tilstanden som FSM er i.

Stat 1: Meny Den første tilstanden er menyskjermen, som er en av de enklere tilstandene. Den inkluderer displayet med syv segmenter som viser ordet "PLAY", og knappen som får spillet til å starte. Knappen, BTN, leder oss til neste tilstand, som er spillerens tur.

Stat 2: Spiller en sin tur

Spillerens tur aktiverer et signal som får sju segmenters display til å vise spiller to helse. Et annet signal slås på for å aktivere et skiftregister importert fra en annen modul som vi opprettet (Pone.vhd). Dette skiftregisteret får lysdiodene til å lyse som en økende effektmåler ville gjort i andre spill, og det ville deretter tilbakestilles til 0 når det når maksimal mengde LED -er som kan tennes. Den oppdateres om den stigende kanten på klokken hentet fra barclock.vhd, som er endret fra en lånt labfil. Vi fikk spillerens bar starte fra høyre og fylle opp til venstre, fordi spillerens bryter er også til venstre (for intuitiv brukeropplevelse). Når bryteren er vendt, går staten videre til spilleren ett fradrag, og mengden av LED -er som er lagret i et signal.

Stat 3: Spiller ett fradrag Signalet med mengden LED er aktiv bestemmer mengden helse som blir trukket fra. Dette gjøres ved å ha et annet skiftregister (deductor1.vhd) som i stedet for å øke LED -lampene, reduserer dem. Dette reduseres på den stigende kanten av en av klokke div -modulene som vi lånte og modifiserte (downcounterclock.vhd). Akkurat når én LED er slått av, trekkes ett helsepunkt fra spiller tos totale helse. Hvis spiller i løpet av denne prosessen når 0 helse, stopper vi og går umiddelbart til tilstanden "Game over". Ellers, når LED -vektoren når “0000000000000000”, går vi videre til spiller to sin tur.

Stat 4: Spiller tos tur Spiller tos tur er akkurat som spiller en sin, bortsett fra at skiftregisteret for den (Ptwo.bhd) går fra venstre til høyre, og bryteren er på høyre side av brettet. Et signal aktiveres for å ha spiller 1s helsevisning. Når bryter 2 er aktiv, går dette videre til spiller tos fradragsvending.

Trinn 5: Spiller to -fradrag Akkurat som spiller tos tur, spiller to -fradrag mye som spiller ett trekker. Hovedforskjellen er at skiftregisteret som kontrollerer at LED -lampene slås av går i motsatt retning, noe som er en enkel modifikasjon å gjøre når du har spillerens fradrag som fungerer som det skal.

Fase 6: Spill over Hvis noen av spillerne på et tidspunkt når null helse, bytter spillet til denne tilstanden. Ikke noe fancy skjermer. Hvis du trykker på BTN one, tilbakestilles helsen til 99, og staten går tilbake til menyen og starter effektivt spillet på nytt.

Trinn 3: Moduler

Moduler
Moduler

Black Box Diagram for spillet

Nedklokke (basert på clk_div.vhd -modulen av Bryan Mealy):

Dette er klokken som håndterer timingen til fradragsholderne. Konstanten som heter max_count er 3x mer enn barclocks max_count -konstant. Dette vil gjøre fradragsholderne 3x langsommere enn barens hastighet.

Barclock - (basert på clk_div.vhd -modulen av Bryan Mealy):

Denne klokken håndterer timingen av effektmålere, som vi raskt økte for å gjøre spillet vanskeligere. Denne timingen kan justeres etter din smak, øke hastigheten ved å gjøre den konstante max_count til et større tall, eller redusere den ved å gjøre max_count til et mindre tall. Sseg_dec - (Skrevet av Bryan Mealy): Denne modulen tar et 8 -bits tall som inndata, som det dekoder, konverterer tallet til sitt desimalekvivalent og sender deretter ut til syv segmentvisning. For at denne filen skal fungere, må du sørge for at begrensningene dine stemmer overens med vår.

Pone:

Dette er et skiftregister som skifter biter til venstre, og legger til en varm bit for å få det til å se ut som om effektmåleren øker. Når alle bitene er varme, tilbakestilles alle bitene til ‘0’, og syklusen starter på nytt.

Ptwo:

Dette er en vendt versjon av P1 -modulen.

Deductor1:

Dette er en kombinasjon av et skiftregister og en subtraktor. Skiftregisteret går i motsatt retning av P1s skiftregister, noe som indikerer et fradrag. Dette trekker også 1 fra spiller 2s helse for hver klokkesyklus, så med kombinasjonen av disse to funksjonene vil det se ut som motstanderens helse reduseres med 1 for hver led i helsestangen som går ned.

Deductor2: Dette er en vendt versjon av Deductor1 -modulen.

PlayDecoder (lånt og slett endret fra ekchen35649 hans 133 instruerbare): Dette brukes i menytilstanden for å vise ordet "PLAY" på dekoderen med syv segmenter.

Trinn 4: Test

Dette spillet ble opprinnelig inspirert av et av minispillene fra Kirby. Det er et enkelt to-spillerspill som kan spilles på et Basys 3-brett, eller hvilken som helst FPGA.

Trinn 1: Nødvendig materiale

Du trenger: Digilent Basys 3, FPGA Board (eller andre) En relativt oppdatert versjon av Vivado, eller et annet vhdl -miljø En datamaskin som kan kjøre det nevnte programmet A brain

Trinn 2: Selve spillet

Hvordan spille

For å starte trykker du på den midtre knappen. Dette vil føre til at "99", som representerer helsen til spiller to, vises på displayet med syv segmenter. Deretter lyser lysdiodene i rekkefølge fra høyre til venstre. Dette danner en strømlinje. Når strømlinjen er full, tilbakestilles den. Formålet med spiller en er å snu bryteren når stangen er så høy som mulig. Jo flere lysdioder lyser, jo mer skade spiller gjør spilleren to. Etter at spiller en vender bryteren, blir skadene som blir behandlet trukket fra spiller tos helse. Deretter bytter den til spiller to sin tur. Nå viser tallet som vises spillerens helse, og strømlinjen fylles opp fra venstre til høyre. Når spiller to gjør sitt trekk, blir skaden trukket, og det er tilbake til spiller en sin tur igjen. Dette gjentas til en spiller når 0 helse. Video av denne funksjonen er vedlagt.

For å spille spillet, last det på et grunnleggende brett, og trykk på den midterste knappen. Prøv å snu bryteren med så mange LED -er som mulig, og vent deretter og se hvordan brettet trekker disse punktene fra motstanderens helse. Overfør den deretter til vennen din og

Trinn 3: FSM

Dette spillet er i hovedsak en stor endelig datamaskin, som noen komplekse logikker skjer basert på tilstanden som FSM er i.

(Statens diagram)

Stat 1: Meny

Den første tilstanden er menyskjermen, som er en av de enklere tilstandene. Den inkluderer displayet med syv segmenter som viser ordet "PLAY", og knappen som får spillet til å starte. Knappen, BTN, leder oss til neste tilstand, som er spillerens tur.

Stat 2: Spiller en sin tur

Spillerens tur aktiverer et signal som får sju segmenters display til å vise spiller to helse. Et annet signal slås på for å aktivere et skiftregister importert fra en annen modul som vi opprettet (Pone.vhd). Dette skiftregisteret får lysdiodene til å lyse som en økende effektmåler ville gjort i andre spill, og det ville deretter tilbakestilles til 0 når det når maksimal mengde LED -er som kan tennes. Den oppdateres om den stigende kanten på klokken hentet fra barclock.vhd, som er endret fra en lånt labfil. Vi fikk spillerens bar starte fra høyre og fylle opp til venstre, fordi spillerens bryter er også til venstre (for intuitiv brukeropplevelse). Når bryteren er vendt, går staten videre til spilleren ett fradrag, og mengden LED -er som er aktive, lagres i et signal.

Stat 3: Spiller en trekker fra

Signalet med mengden LED er aktiv bestemmer mengden helse som blir trukket fra. Dette gjøres ved å ha et annet skiftregister (deductor1.vhd) som i stedet for å øke LED -lampene, reduserer dem. Dette reduseres på den stigende kanten av en av klokke div -modulene som vi lånte og modifiserte (downcounterclock.vhd). Akkurat når én LED er slått av, trekkes ett helsepunkt fra spiller tos totale helse. Hvis spiller i løpet av denne prosessen når 0 helse, stopper vi og går umiddelbart til tilstanden "Game over". Ellers, når LED -vektoren når “0000000000000000”, går vi videre til spiller to sin tur.

Stat 4: Spiller to sin tur

Spiller tos tur er akkurat som spiller en sin, bortsett fra at skiftregisteret for den (Ptwo.bhd) går fra venstre til høyre, og bryteren er på høyre side av brettet. Et signal aktiveres for å ha spiller 1s helsevisning. Når bryter 2 er aktiv, går dette videre til spiller tos fradragsvending.

Trinn 5: Spiller to -fradrag

Akkurat som spiller to sin tur, spiller spiller to fradrag mye som spiller ett trekker. Hovedforskjellen er at skiftregisteret som kontrollerer at LED -lampene slås av går i motsatt retning, noe som er en enkel modifikasjon å gjøre når du har spillerens fradrag som fungerer som det skal.

Fase 6: Spill over Hvis noen av spillerne på et tidspunkt når null helse, bytter spillet til denne tilstanden. Ikke noe fancy skjermer. Hvis du trykker på BTN one, tilbakestilles helsen til 99, og staten går tilbake til menyen og starter effektivt spillet på nytt.

Svart boks

Trinn 4: Moduler

Nedklokke (basert på clk_div.vhd -modulen av Bryan Mealy):

Dette er klokken som håndterer timingen til fradragsholderne. Konstanten som heter max_count er 3x mer enn barclocks max_count -konstant. Dette vil gjøre fradragsholderne tre ganger langsommere enn barens hastighet.

Barclock - (basert på clk_div.vhd -modulen av Bryan Mealy): Denne klokken håndterer timingen av effektmålere, som vi raskt økte for å gjøre spillet vanskeligere. Denne timingen kan justeres etter din smak, øke hastigheten ved å gjøre den konstante max_count til et større tall, eller redusere den ved å gjøre max_count til et mindre tall. Sseg_dec - (Skrevet av Bryan Mealy): Denne modulen tar et 8 -bits tall som inndata, som det dekoder, konverterer tallet til sitt desimalekvivalent og sender deretter ut til syv segmentvisning. For at denne filen skal fungere, må du sørge for at begrensningene dine stemmer overens med vår.

Pone: Dette er et skiftregister som flytter biter til venstre, og legger til en varm bit for å få det til å se ut som om effektmåleren øker. Når alle bitene er varme, tilbakestilles alle bitene til ‘0’, og syklusen starter på nytt.

Ptwo: Dette er en vendt versjon av P1 -modulen.

Deductor1: Dette er en kombinasjon av et skiftregister og en subtraktor. Skiftregisteret går i motsatt retning av P1s skiftregister, noe som indikerer et fradrag. Dette trekker også 1 fra spiller 2s helse for hver klokkesyklus, så med kombinasjonen av disse to funksjonene vil det se ut som motstanderens helse reduseres med 1 for hver led i helsestangen som går ned.

Deductor2: Dette er en vendt versjon av Deductor1 -modulen.

PlayDecoder (lånt og litt modifisert fra ekchen35649 hans 133 instruerbare):

Dette brukes i menytilstanden for å vise ordet "PLAY" på dekoderen med syv segmenter.

Å gjøre: bilder, video

Anbefalt: