Indholdsfortegnelse:

Arduino Space Rocks Game: 3 trin
Arduino Space Rocks Game: 3 trin

Video: Arduino Space Rocks Game: 3 trin

Video: Arduino Space Rocks Game: 3 trin
Video: Arduino Star Wars Game - how to make 2024, November
Anonim
Arduino Space Rocks spil
Arduino Space Rocks spil

Uanset om de spilles på en computer, på en telefon, på en spillekonsol eller på en selvstændig boks, indeholder mange videospil et element af forhindring af forhindringer. Nok kan der blive givet point for at indsamle tokens eller finde vej gennem en labyrint, men vær sikker på at der sandsynligvis er noget i spillet, hvis eneste formål er at forhindre dig i at gøre det. Det første videospil var Pong, men efter det var de mest populære spil ting som "Asteroids" eller "Pac-Man". En nyere variant ville være det enkle, men vanedannende spil "Flappy Birds".

For nylig så jeg, at nogen havde lavet en simpel to-niveau version af "Flappy Bird", der blev afspillet på en fælles 1602 LCD. Jeg tænkte, at det ville være noget, børnebørnene kunne lide, så jeg besluttede at lave min egen variation fra bunden. 1602 -versionen har kun to niveauer, så jeg besluttede at bruge en 2004 LCD (20x4) i stedet for at øge sværhedsgraden lidt. Jeg valgte også at gøre det mere som "Asteroider" ved at få spilleren til at guide et "skib" gennem en labyrint af "rumsten". Selvom du ikke er interesseret i at bygge spillet, kan der være nogle elementer i softwaren, som du kan bruge i et af dine egne projekter.

Trin 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Hardwaren kan være baseret på stort set enhver Arduino -version. Jeg lavede prototypen ved hjælp af en Nano og brændte derefter koden til en ATMega328 -chip. Det er den samme chip, der bruges i Nano, men ved at bruge den i sig selv giver mulighed for en mere kompakt konstruktion og mindre strømforbrug. Som du kan se, byggede jeg kredsløbet på et lille brødbræt, der piggybacks på LCD -modulet. Det andet aspekt, der er anderledes, er, at Nano kører ved 16-MHz ved hjælp af en ekstern krystal, men jeg valgte at bruge den indbyggede 8-MHz-oscillator til ATMega328-chippen. Det sparer dele og strøm.

2004 LCD -grænseflader til Arduino på samme måde som en 1602 LCD. En interessant forskel er i adresseringen af displayplaceringerne. Der er naturligvis en forskel, fordi der er fire linjer i stedet for to, men i 2004 er den tredje linje en forlængelse af den første linje og den fjerde linje er en forlængelse af den anden linje. Med andre ord, hvis du havde et testprogram, der lige sendte en række tegn til LCD'et, ville det 21. tegn dukke op i starten af den tredje linje, og det 41. tegn ombrydes tilbage til starten af den første linje. Jeg bruger den egenskab i softwaren til effektivt at fordoble labyrintens længde.

Jeg besluttede at få min version batteri drevet, så jeg brugte et almindeligt 18650 Li-ion, 3,6-volts batteri. Det krævede, at jeg tilføjede et lille kort til USB -genopladning og et andet lille kort til at øge batterispændingen til 5 volt for LCD'en og ATMega -chippen. Billederne viser de moduler, jeg brugte, men der er også alt-i-et-moduler, der udfører begge funktioner.

Trin 2: Software

Softwaren er den samme for både Nano- og ATMega328 -chippen. Den eneste forskel er i programmeringsmetoden. Jeg bruger min egen barebones -version af 1602 LCD -software, og LCD -softwaren i dette projekt er baseret på det. Jeg var nødt til at tilføje muligheder for at løse de ekstra linjer i 2004 -displayet og tilføjede også rutiner til skift af displayet. Displayskiftet giver bevægelsen af "stenene" forbi "skibet".

Som tidligere nævnt danner linje 1 og 3 en cirkulær kø, og linje 2 og 4 gør det også. Det betyder, at efter 20 skift skiftes linje 1 og 3, og linje 2 og 4 byttes. Efter 40 skift er linjerne tilbage i deres oprindelige position. På grund af denne adfærd bliver den originale labyrint på 20 tegn helt anderledes, når linjerne bytter. Det gjorde livet interessant, da jeg forsøgte at danne en labyrint. Jeg har endelig lige åbnet et Excel -regneark, så jeg kunne kortlægge stien uden konstant at skulle ændre softwaren. Softwaren, der leveres her, har to versioner af labyrinten (den ene kommenteres), så du kan vælge, hvilken du vil have, eller lave din egen.

Jeg ønskede oprindeligt, at dette var simpelt nok til, at de unge børnebørn kunne spille det, men jeg ville også have, at det havde en ekstra udfordring, hvis de (eller en anden) blev for gode til det. Spillet starter med skifthastigheden sat til 1 sekund. Den interne tic -rate er 50 ms, så det betyder, at der er 20 intervaller, hvorunder op/ned -knapperne kan trykkes. I virkeligheden bruger en trykket knap 2 tics, fordi et 50 ms interval bruges til at registrere pressen, og et andet 50 ms interval bruges til at vente på udgivelsen. Med standard labyrinten er det maksimale antal tryk, der kræves før det næste skift, tre. Den enkle måde at øge sværhedsgraden på spillet er at forkorte tiden mellem skift, så et par linjer kode gør netop det, når scoren stiger. Skiftfrekvensen er indstillet til at fremskynde med 50 ms hvert 20. skift, med minimumshastigheden begrænset til 500 ms. Det er let at ændre disse parametre.

Bortset fra at ændre skifthastigheden er den primære logik i softwaren at flytte "skibet" og at afgøre, om "skibet" er kollideret med en "sten". Disse funktioner drager fordel af det definerede "rock/space" -array og også det array, der definerer hukommelsesplaceringerne på displayet. Skifteantallet svarer til linjelængden på LCD'et (0-19) og bruges som et indeks til disse arrays. Logikken er noget kompliceret af, at linjerne bytter hvert 20. skift tæller. Lignende logik bruges til at bestemme positionen af "skibet", som kan være på en af de fire linjer.

Scoren for hvert spil er simpelthen optællingen af antallet af skift, der fandt sted, og den høje score gemmes i mikrokontrollerens interne EEROM. EEPROM -biblioteket bruges til at læse og skrive til denne hukommelse. De tilgængelige rutiner tillader enkel byte læsning/skrivning og læsning/skrivning af flydende punktværdier. En værdi på 0xA5 gemmes på det første EEROM -sted for at indikere, at en høj score er gemt. Hvis denne værdi er til stede ved opstart, læses og vises flydende værdi for den høje score. Hvis værdien 0xA5 ikke er til stede, kaldes en rutine til at initialisere den høje score til en værdi på 1. Den samme rutine kaldes, hvis en nulstilling af den høje score ønskes. Den høje score sættes tilbage til værdien 1 ved at holde en af op/ned -knapperne nede og derefter trykke kort på reset -knappen.

Trin 3: Spil spillet

At spille spillet
At spille spillet
At spille spillet
At spille spillet

Når der bruges strøm, vises den aktuelle høje score. Efter at den høje score vises, vises labyrinten af "klipper" og "skib", hvorefter spillet begynder et par sekunder senere. Når "skibet" rammer en "sten", blinker meddelelsen "CRASH AND BURN" et par gange, før scoren for spillet vises. Hvis der laves en ny høj score, vises den meddelelse også. Et nyt spil startes ved at trykke på reset -knappen.

Anbefalede: