Stap 3: Spel mechanica
Dit spel zou zuigen als u kon niet interactief mee werken. Als je kon niet sterven, als het was te gemakkelijk, of als het repetitieve zou u snel vervelen en het dumpen. Ik noem spel elementen in orde dat ik hen uitgevoerd.
Procedurele niveau Rendering:
Spel zal het genereren van het terrein op de vlieg. Aangezien dit een groot deel, verdient het zijn eigen stap.
Knop
Detecting knop Klik is eenvoudig. Wachten op knooppers, wachten op knop release, doorgaan met de code. Maar hoe zit het als u animeren dingen wilt terwijl het wachten op de release knop? Een beetje moeilijker maar niet een probleem.
bool buttonReady = 1; //buttonif (buttonReady){ if (!digitalRead(buttonPin)){ y=!y; buttonReady = 0; lcd.setCursor(x,y); lcd.write(ship); lcd.setCursor(x,!y); lcd.write(' '); } //lcd.clear(); } else{ if (digitalRead(buttonPin)){ buttonReady = 1; } }
Zoals u in de bovenstaande code zien kunt, deed ik dat door het toevoegen van een buttonReady-variabele. Naamgeving wellicht niet de beste maar functionaliteit blijft hetzelfde. Terwijl buttonReady is 1 (waar), wacht programma op knooppers. Nadat het ontdekt knooppers, buttonReady knevels staat op 0 (ONWAAR) en programma begint wachten op knop release. Op knop release ruimteschip beweegt en de knop klaar is terug ingesteld op 1. Dit spel kunt uitvoeren terwijl de knop wordt ingedrukt.
Botsing:
Als u controleren wilt als je iets, moet u controleren als elk object op dezelfde plaats is, zoals je bent. Hetzelfde geldt voor dit. Zie code hieronder om te zien hoe dit werkt.
//collision detectionif(y){ //bottom rowif ((b>>15-x)%2){ goto boom; } } else{ //top rowif ((a>>15-x)%2){ goto boom; } }
Zoals u zien dat dit wordt gedaan met behulp van bitshift en modulo operator. Dit is onderdeel van mijn "optimaliseren van de code" minigame ik speelde via programmering dit gehele ding. Wat bitshift doet is verschuift bits van de variabele links of rechts door vast bedrag. Dit maakt het gemakkelijk om te zien of er een 1 op bepaalde positie of niet. Na bitshifting modulo (& 2) geeft als resultaat de rest van de divisie en als die gelijk is aan 1, er een 1 in ingestelde positie was was er anders 0.
Als je niet bitshift exploitant (maak je geen zorgen je krijgt het een dag), kunt u gebruiken matrixfuncties (uw gegevens variabelen moeten matrices en zul je een functie voor het verschuiven van gegevens).
Scoren
Spel is niet een spel als het niet je score u bereikt. Maar hoe te scoren zo'n spel? Door hoeveelheid hindernissen ontweken! Maar betekent dat een pint moet worden toegevoegd telkens wanneer u klikt op een knop en niet sterven? Dat zou gemakkelijker niveaus met veel obstakels in verschillende doorgangen in vroege spel oneerlijk en gebruiker kan bedriegen door te klikken op meerdere tijden wanneer het spel begint en er zich geen obstakels... Het toevoegen van een punt voor elk blok reisde zonder te raken om het even wat is een betere manier te scoren spelers. Ik zou eigenlijk noemen het "afgelegde afstand" maar "score" klinkt beter.
Omdat ruimteschip op positie 4 en terrein begint is het alle lege spelbegin, speler begint met negatieve 12 punten. Op deze manier zal hij hebben 0 score als hij hits het eerste obstakel.
Schalen van moeilijkheid
Maar zelfs scoren can't make you stick met het spel als het is te gemakkelijk. Je vervelen en ophouden speel het. Standaard screen Spelupdates elke 0.7 seconden (stepTime variabele). Dat is prima om mee te beginnen, maar wordt vrij snel saai. Uiteraard moet er schalen moeite ten uitvoer gelegd. Ik heb besloten om dat te doen door het versnellen van het spel - door het verlagen van de stepTime-variabele. Op elke stap wordt het verminderd met moeite. Ik vond dit probleem tussen 1 en 3 het beste werken. Als u het hogere, game wordt zeer snel te hard. Wilt u een grotere uitdaging, beveel ik stepTime variabele lager instellen en moeilijkheid lage verlaten. Die krijgt u leuke snelle spel.
We hoeven niet te vrezen voor beperking van stepTime moet altijd groter zijn dan 0 als speler kunt niet mogelijk gaan ver wanneer hij beslissingen nemen in tiende van een seconde moet als zelfs knooppers langer duurt.