Stap 6: Hindernis Update Array
Wat maakt dit project een spel is dat je vermijden van de hindernissen die moet omlaag in de 3 mogelijk standpunten (links, Midden of rechts komen kunnen). Dit betekent dat we moeten houden van onze obstakels en nieuwe verzenden als een bepaalde periode is verstreken.
Dit betekent dat we zullen het volgende nodig:
1) een reg matrix voor het opslaan van de obstakels.
2) een teller voor het bijhouden van al dan niet voldoende tijd verstreken om te weten als we moeten Stuur een nieuw obstakel.
3) een manier voor het genereren van nieuwe obstakels. (we zullen gebruik onze generator van het random)
4) een manier om deze "belemmeringen" bewegen. We moet kunnen om zich te ontdoen van de onderste rij die "" onze positie vector passeert, en ook onze nieuwe obstakel in de bovenkant van de belemmering array invoegen.
1) om de belemmeringen bij te houden, gebruiken we een reg genaamd "TotalArray". De indexen van 0 aan de index 3 van het einde voor de hinderpalen, en die laatste 3 TotalArray gebruikt voor wat wij noemen onze "positie". Bijvoorbeeld: In ons project gebruiken we een TotalArray met indexen van [0:20], dus alles uit 0:17 zal onze obstakels, en alles van het 18:20 zullen onze huidige positie.
Het is belangrijk om te weten 2 specifieke dingen aan onze uitvoering.
a) u moet weten dat er belemmeringen worden geïnterpreteerd in groepjes van drie. Dus als we schrijven naar het scherm of controleren om te zien als een belemmering heeft botste met ons standpunt, moeten we denken aan de obstakels 3 indexen tegelijk.
Dus de eerste 3 hindernissen TotalArray zijn [0:2], de volgende drie zou TotalArray [3:5], enzovoort.
b) belemmeringen maken nooit het naar de achterlijn waar de positie indexen zijn. Dit betekent dat de positie 18:20 indexeert zal alleen ooit hebben een beetje een 1 worden.
2) deze teller telt omhoog op de posedge van de Raad van bestuur van gebouwd in klok die is ontleend aan PIN Y2. De exemplaren van een parameter moet ook worden gemaakt om te verklaren wat de waarde van de teller moet zijn om te weten dat de tijd verstreken signalering voor een nieuwe hindernis worden gegenereerd en zet dan in het gedeelte van de belemmeringen van de matrix. Hoe groter de waarde van deze parameter, zal des te langer de tijd tussen nieuwe belemmeringen worden gegenereerd, en des te gemakkelijker het spel spelen.
3) onze random number generator moet "terugkeer" 3 bits binaire waarde. We voeren dit door het geven van de generator van willekeurige module een reg te openen en wijzigen wanneer het genereert een nieuwe waarde. We nemen deze reg te gebruiken voor onze updateObstacleArray module. Deze 3 bits waarde komt overeen met het nieuwe obstakel dat in de 0 verschijnen zal: 2 indexen. Één ding om te overwegen hier is dat we niet de nieuwe hindernis worden het geval: 3' b111 omdat dat betekenen dat zou de gebruiker geen manier zou hebben om het obstakel te vermijden en dat is niet leuk! (We zijn aardige mensen!) Om te zorgen voor dit in de willekeurige module wordt gegenereerd.
Er is een ander geval hebben we niet kunnen gebeuren en dat is het geval wanneer een 3' b110 obstakel wordt gevolgd door een 3' b011 obstakel omdat hierdoor ook een auto verlies scenario. In plaats van controleren voor deze zaak, creëren wij in plaats daarvan een lijn van 3' b000 tussen elke hindernis zodat de gebruiker altijd een weg door de obstakels vindt.
4) als de tijd verstrijkt de vooraf gedefinieerde periode constante parameter (vanaf 2), moeten we onze hindernissen bewegen. Ervan uitgaande dat er geen botsing tussen obstakel en een postion waarde is, dan zal worden bijgewerkt de array om te reflecteren dit verloop van de tijd met een nieuwe hindernis. (We zullen terugkomen op deze botsing controle.)
We moeten een nieuwe hindernis worden weergegeven in de bovenste rij van de TotalArray, ontdoen van de onderste rij van de obstakels en alles uit het bovenste gedeelte van de hinderpalen worden één rij naar beneden duwen.
Dit wordt gedaan met behulp van een tempArray.
...
...
Ervan uitgaande dat de tijd verstrijkt zodat een belemmering moet worden gegenereerd.
reg TotalAr [0:20]
reg tempArray [0:17]
invoer randSig [0:2];
Als (obsAr [0:2] == 3' b000)
beginnen
Als eerste/bovenkant van array is leeg gen nieuwe obs en duw oorspronkelijke obsAr "down"
betekent dat elk obstakel is gescheiden door een lege horizontale lijn tussen obstakels
Als (randSig! = 3' b111)
beginnen
tempArray [3:17] < = TotalAr [0:14]; opslaan van de top 15 elementen
tempArray [0:2] = randSig; Creëren van het nieuwe obstakel van de randomsignal
TotalAr [0:17] = tempArray [0:17]; brengen de nieuwe hindernis array terug in de TotalArray
einde
anders
beginnen
tempArray [3:17] < = TotalAr [0:14];
tempArray [0:2] = 3' b000; Controleer de nieuwe hindernis een lege rij als er een obstakel in de bovenste rij om te beginnen.
TotalAr [0:17] = tempArray [0:17];
einde
einde
...
...
Deze code is wat zou worden gebruikt om het leggen van de nieuwe hindernis boven evenals de oude obstakels één regel naar beneden verplaatsen.