Innehållsförteckning:

2 -spelare konkurrenskraftigt VS -tidsspel: 4 steg
2 -spelare konkurrenskraftigt VS -tidsspel: 4 steg

Video: 2 -spelare konkurrenskraftigt VS -tidsspel: 4 steg

Video: 2 -spelare konkurrenskraftigt VS -tidsspel: 4 steg
Video: Десятизаходная резьба в два направления. 2024, Juli
Anonim
2 Player Competitive VS Timing Game
2 Player Competitive VS Timing Game

Du kommer behöva:

1. Digilent Basys 3, FPGA Board (eller någon annan FPGA,)

2. En relativt aktuell version av Vivado, eller någon annan VHDL -miljö

3. En dator som kan köra det nämnda programmet.

Steg 1: Spelet själv

Spelet själv
Spelet själv

Hur FSM interagerar med modulerna.

Hur man spelar

För att starta trycker du på mittknappen. Detta kommer att leda till att "99", som representerar spelarens två hälsa, visas på displayen med sju segment. Därefter tänds lysdioderna i följd från höger till vänster. Detta bildar en power bar. När strömmen är full återställs den. Spelarens syfte är att vända omkopplaren när ribban är så hög som möjligt. Ju fler lysdioder som tänds, desto mer skada gör spelaren för spelare två. Efter att spelare en har slagit omkopplaren, dras skadan från spelarens två hälsa. Sedan växlar den till spelare två. Numret som visas representerar spelarens hälsa och strömfältet fylls från vänster till höger. När spelare två gör sitt drag, dras skadan ifrån, och det är tillbaka till spelare ens tur igen. Detta upprepas tills en spelare når 0 hälsa. Video om denna funktion bifogas.

Steg 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Detta spel är i huvudsak en stor ändlig tillståndsmaskin, som en viss komplex logik sker baserat på tillståndet som FSM är i.

Status 1: Meny Det första tillståndet är menyskärmen, som är ett av de enklare tillstånden. Den innehåller den sju segmentiga displayen som visar ordet "PLAY" och knappen som får spelet att starta. Knappen, BTN, leder oss till nästa tillstånd, vilket är spelarens tur.

Stat 2: Spelarens tur

Spelarens tur aktiverar en signal som får sjusegmentdisplayen att visa spelarens två hälsa. En annan signal tänds för att aktivera ett skiftregister som importerats från en annan modul som vi skapade (Pone.vhd). Detta skiftregister gör att lysdioderna tänds som en ökande effektmätare skulle göra i andra spel, och det återställs sedan till 0 när det når den maximala mängden lysdioder som kan tändas. Den uppdateras om klockans stigande kant från barclock.vhd, som är modifierad från en lånad labfil. Vi fick spelarens ena start från höger och fyllning till vänster, eftersom spelarens omkopplare också är till vänster (för intuitiv användarupplevelse). När omkopplaren välts, går tillståndet vidare till spelare ett avdrag och mängden aktiva lysdioder sparas i en signal.

State 3: Player One -avdrag Signalen med mängden LED -lampor är aktiv bestämmer mängden hälsa som får avdrag. Detta görs genom att ha ett annat skiftregister (deductor1.vhd) som snarare än att öka LED: erna, minskar dem. Detta minskar på den stigande kanten av en av klockdiv -modulerna som vi lånat och modifierat (downcounterclock.vhd). Precis när en lysdiod släcks, dras en hälsopunkt från spelarens två hälsa. Om två under denna process når 0 hälsa, stannar vi och går omedelbart vidare till tillståndet "Game over". Annars, när LED -vektorn når "0000000000000000", går vi vidare till spelare två.

State 4: Player Two's turn Player two's turn är exakt som player one's turn, förutom att skiftregistret för det (Ptwo.bhd) går från vänster till höger och omkopplaren är på höger sida av brädet. En signal aktiveras för att ha Player 1: s hälsodisplay. När switch 2 är aktiv går detta vidare till Player Two: s avdragsvridning.

Steg 5: Spelare två -avdrag Precis som spelare tvåas tur, spelar spelare två -avdrag ungefär som spelare ett -avdrag. Huvudskillnaden är att skiftregistret som styr lysdiodernas avstängning går i motsatt riktning, vilket är en enkel modifiering att göra när du har spelarens avdrag fungerar korrekt.

Steg 6: Spel över Om någon av spelarna vid något tillfälle når noll hälsa, växlar spelet till detta tillstånd. Inget fina skärmar. Om BTN en trycks in, återställs hälsan till 99, och staten går tillbaka till menyn och startar faktiskt spelet om.

Steg 3: Moduler

Moduler
Moduler

Black Box Diagram för spelet

Downcounterclock (baserat på clk_div.vhd -modulen av Bryan Mealy):

Detta är klockan som hanterar tidpunkten för avdragarna. Konstanten som heter max_count är 3x mer än barclocks max_count -konstant. Detta gör avdragarna tre gånger långsammare än barens hastighet.

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

Den här klockan hanterar tidtagningen av effektmätarna, som vi snabbt ökade för att göra spelet svårare. Denna tidpunkt kan justeras efter eget tycke, öka hastigheten genom att göra konstanten max_count till ett större antal, eller minska den genom att göra max_count till ett mindre antal. Sseg_dec - (Skriven av Bryan Mealy): Den här modulen tar ett 8 -bitars tal som inmatning, som det avkodar, konverterar numret till dess decimalekvivalent och matar sedan ut till sju segmentvisning. För att den här filen ska fungera måste du se till att dina begränsningar matchar vår.

Pone:

Detta är ett skiftregister som flyttar bitar till vänster och lägger till en het bit för att det ska se ut som att effektmätaren ökar. När alla bitar är heta återställs alla bitar till '0' och cykeln börjar om.

Ptwo:

Detta är en omvänd version av P1 -modulen.

Avdragare 1:

Detta är en kombination av ett skiftregister och en subtraktor. Skiftregistret går i motsatt riktning mot P1: s skiftregister, vilket indikerar ett avdrag. Detta subtraherar också 1 från spelare 2: s hälsa för varje klockcykel, så med kombinationen av dessa två funktioner kommer det att se ut som motståndarens hälsa minskar med 1 för varje led i hälsofältet som går ner.

Deductor2: Detta är en omvänd version av Deductor1 -modulen.

PlayDecoder (lånad och modifierad av ekchen35649 hans 133 instruerbara): Detta används i menyläget för att visa ordet "PLAY" på sju segmentavkodaren.

Steg 4: Testa

Detta spel var ursprungligen inspirerat av ett av minispel från Kirby. Det är ett enkelt spel för två spelare som kan spelas på ett Basys 3 Board eller någon FPGA.

Steg 1: Obligatoriskt material

Du behöver: Digilent Basys 3, FPGA Board (eller någon annan) En relativt uppdaterad version av Vivado, eller någon annan vhdl -miljö En dator som kan köra det nämnda programmet A brain

Steg 2: Spelet själv

Hur man spelar

För att starta trycker du på mittknappen. Detta kommer att leda till att "99", som representerar spelarens två hälsa, visas på displayen med sju segment. Därefter tänds lysdioderna i följd från höger till vänster. Detta bildar en power bar. När strömmen är full återställs den. Spelarens syfte är att vända omkopplaren när ribban är så hög som möjligt. Ju fler lysdioder som tänds, desto mer skada gör spelaren för spelare två. Efter att spelare en har slagit omkopplaren, dras skadan från spelarens två hälsa. Sedan växlar den till spelare två. Numret som visas representerar spelarens hälsa och strömfältet fylls från vänster till höger. När spelare två gör sitt drag, dras skadan ifrån, och det är tillbaka till spelare ens tur igen. Detta upprepas tills en spelare når 0 hälsa. Video om denna funktion bifogas.

För att spela spelet, ladda det på ett grundläggande bräda och tryck på mittknappen. Försök att vända omkopplaren med så många lysdioder som är aktiva och vänta och se hur styrelsen drar bort dessa poäng från din motståndares hälsa. Ge det sedan vidare till din vän och

Steg 3: FSM

Detta spel är i huvudsak en stor ändlig tillståndsmaskin, som en komplex logik sker baserat på tillståndet som FSM är i.

(Statligt diagram)

Stat 1: Meny

Det första tillståndet är menyskärmen, som är ett av de enklare tillstånden. Den innehåller den sju segmentiga displayen som visar ordet "PLAY" och knappen som får spelet att starta. Knappen, BTN, leder oss till nästa tillstånd, vilket är spelarens tur.

Stat 2: Spelarens tur

Spelarens tur aktiverar en signal som får sju segmentvisning att visa spelarens två hälsa. En annan signal tänds för att aktivera ett skiftregister som importerats från en annan modul som vi skapade (Pone.vhd). Detta skiftregister gör att lysdioderna tänds som en ökande effektmätare skulle göra i andra spel, och det återställs sedan till 0 när det når den maximala mängden lysdioder som kan tändas. Den uppdateras om klockans stigande kant från barclock.vhd, som är modifierad från en lånad labfil. Vi fick spelarens ena start från höger och fyllning till vänster, eftersom spelarens omkopplare också är till vänster (för intuitiv användarupplevelse). När omkopplaren välts, går tillståndet vidare till spelare ett avdrag, och mängden lysdioder som är aktiva sparas i en signal.

State 3: Player One -avdrag

Signalen med mängden lysdioder aktiv avgör mängden hälsa som dras av. Detta görs genom att ha ett annat skiftregister (deductor1.vhd) som snarare än att öka LED: erna, minskar dem. Detta minskar på den stigande kanten av en av klockdiv -modulerna som vi lånat och modifierat (downcounterclock.vhd). Precis när en lysdiod släcks, dras en hälsopunkt från spelarens två hälsa. Om två under denna process når 0 hälsa, stannar vi och går omedelbart vidare till tillståndet "Game over". Annars, när LED -vektorn når "0000000000000000", går vi vidare till spelare två.

Stat 4: Spelare två

Spelarens två tur är precis som spelarens en, förutom att skiftregistret för den (Ptwo.bhd) går från vänster till höger och omkopplaren är på höger sida av brädet. En signal aktiveras för att ha Player 1: s hälsodisplay. När switch 2 är aktiv går detta vidare till Player Two: s avdragsvridning.

Steg 5: Player Two -avdrag

Precis som spelare tvåas tur, spelar spelare två -avdrag ungefär som spelare ett -avdrag. Huvudskillnaden är att skiftregistret som styr lysdiodernas avstängning går i motsatt riktning, vilket är en enkel modifiering att göra när du har spelarens avdrag fungerar korrekt.

Steg 6: Spel över Om någon av spelarna vid något tillfälle når noll hälsa, växlar spelet till detta tillstånd. Inget fina skärmar. Om BTN en trycks in, återställs hälsan till 99, och staten går tillbaka till menyn och startar faktiskt spelet om.

Svart låda

Steg 4: Moduler

Downcounterclock (baserat på clk_div.vhd -modulen av Bryan Mealy):

Detta är klockan som hanterar tidpunkten för avdragarna. Konstanten som heter max_count är 3x mer än barclocks max_count -konstant. Detta gör avdragarna tre gånger långsammare än barens hastighet.

Barclock - (baserat på clk_div.vhd -modulen av Bryan Mealy): Den här klockan hanterar tidtagningen av effektmätarna, som vi snabbt ökade för att öka svårigheten i spelet. Denna tidpunkt kan justeras efter eget tycke, öka hastigheten genom att göra konstanten max_count till ett större antal, eller minska den genom att göra max_count till ett mindre antal. Sseg_dec - (Skriven av Bryan Mealy): Den här modulen tar ett 8 -bitars tal som inmatning, som det avkodar, konverterar numret till dess decimalekvivalent och matar sedan ut till sju segmentvisning. För att den här filen ska fungera måste du se till att dina begränsningar matchar vår.

Pone: Detta är ett skiftregister som flyttar bitar till vänster och lägger till en het bit för att det ska se ut som att effektmätaren ökar. När alla bitar är heta återställs alla bitar till '0' och cykeln börjar om.

Ptwo: Detta är en omvänd version av P1 -modulen.

Deductor1: Detta är en kombination av ett skiftregister och en subtraktor. Skiftregistret går i motsatt riktning mot P1: s skiftregister, vilket indikerar ett avdrag. Detta subtraherar också 1 från spelare 2: s hälsa för varje klockcykel, så med kombinationen av dessa två funktioner kommer det att se ut som motståndarens hälsa minskar med 1 för varje led i hälsofältet som går ner.

Deductor2: Detta är en omvänd version av Deductor1 -modulen.

PlayDecoder (lånad och något modifierad från ekchen35649 hans 133 instruerbara):

Detta används i menyläget för att visa ordet "PLAY" på sju segmentavkodaren.

Att göra: bilder, video

Rekommenderad: