Runner spel i VHDL (1 / 10 steg)
Steg 1:
Den första stor bit av VHDL som vi genomfört var spelet logik. I den här modulen inom enheten skapat vi utgångar för de fyra hinder platserna, poängen, liv kvar och spelet över staten. Från det vi lagt i en klocka med önskad frekvens av 8Hz. Konstanterna som vi använde för att skapa det frekvensen är heltal och representerar vår frekvens av spelet logik uppdateringar. Nästa, vi genererat en slumpmässig sekvens för de hinder som ska visas. Med hjälp av en LFSR kunde vi ta itu med en pseudo-slumpmässiga nummergenerator att generera hinder i spelet. Obst_out är produktionen sett och att utdata skickas till modulen pick_a_lane som avgör vilken av de fyra körfält hindret kommer gå också.
Nästa del är att besluta om huruvida spelaren drabbades av ett hinder eller inte. Med hjälp av signaler som vi kunde hålla koll på var de spelare och hinder var hela tiden. Genom detta kunde vi också hålla reda på hur många träffar spelaren har gjort med hindret innan den når spelet över staten. En annan klocka genomfördes specifikt för "spelet logik" av kretsen. Det är mycket långsammare än andra klockan signaler eftersom den avgör hur ofta objekt på skärmen uppdateras och hur snabbt hinder som rör sig över skärmen. När vi hade "spel logik" klockan i, kunde vi skapa en global återställning. Denna återställning signal är kopplad till alla komponenter i "spelet logik" och när signalen är hög, återställer alla delar av spelet. Nästa, vi instansieras fyra SRs för de fyra körfält. Obst_in indata till SRs är kopplade till godtyckligt valda index för den LFSR lagrade 32-bitars binära tal. Resultaten av dessa SRs är kopplade till ourputs av modulen game_mechanics. En gång att fyra SRs var instansieras sätter vi i en LFSR som används för att generera nya hinder i de fyra körfält i en pseudo-slumpmässiga mode. Då en process används för att generera våra önskad "game clock" med en frekvens av 8Hz och signal enable_game_update blir bara hög 16 gånger per sekund. Därefter genom en serie av if/else uttalanden, en process var skapade för att bestämma rörelsen av spelaren. Spelaren är endast tillåtet att flytta upp eller ned mellan körfält. Det körs när en förändring i player input identifieras eftersom det är då man vill flytta sin karaktär. Efter den player_movement processen genomfördes, behövdes en träff identifieringsprocessen. Denna process är ansvarig för att kontrollera för att se om spelaren träffar ett hinder när hindret kommer in zonen"spelare". Tillsammans med denna hit_detection process, en process som kallas scoring_system sattes till handling genom en if/else uttalande som ökas en gång per sekund. Slutligen var en process som kallas check_for_game_over för att slutföra spelet logik. Med if/else-uttryck och utnyttja global_reset processen, har vi kunnat kontrollera om lose_state var hög eller låg. Om lives_left är lika med noll, då "Game Over".