Innholdsfortegnelse:

Arduino Space Rocks Game: 3 trinn
Arduino Space Rocks Game: 3 trinn

Video: Arduino Space Rocks Game: 3 trinn

Video: Arduino Space Rocks Game: 3 trinn
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Juli
Anonim
Arduino Space Rocks Game
Arduino Space Rocks Game

Enten de spilles på en datamaskin, på en telefon, på en spillkonsoll eller på en frittstående boks, inneholder mange videospill et element for hindring av hindringer. Visst, det kan bli poeng tildelt for å samle tokens eller finne veien gjennom en labyrint, men vær trygg på at det sannsynligvis er noe i spillet hvis eneste formål er å hindre deg i å gjøre det. Det første videospillet var Pong, men etter det var de mest populære spillene ting som "Asteroids" eller "Pac-Man". En nyere variant vil være det enkle, men vanedannende spillet "Flappy Birds".

Nylig så jeg at noen hadde laget en enkel to-nivå versjon av “Flappy Bird” som ble spilt på en vanlig 1602 LCD. Jeg trodde det ville være noe barnebarna kunne like, så jeg bestemte meg for å lage min egen variant fra bunnen av. 1602 -versjonen har bare to nivåer, så jeg bestemte meg for å bruke en 2004 LCD (20x4) i stedet for å øke vanskeligheten med å spille litt. Jeg valgte også å gjøre det mer som "Asteroider" ved å la spilleren lede et "skip" gjennom en labyrint av "romsteiner". Selv om du ikke er interessert i å bygge spillet, kan det være noen elementer i programvaren du kan bruke i et av dine egne prosjekter.

Trinn 1: Maskinvare

Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare
Maskinvare

Maskinvaren kan være basert på stort sett alle Arduino -versjoner. Jeg gjorde prototypingen ved hjelp av en Nano og brente deretter koden til en ATMega328 -brikke. Det er den samme brikken som ble brukt i Nano, men bruk av den i seg selv gir en mer kompakt konstruksjon og mindre strømforbruk. Som du kan se, bygde jeg kretsen på et lite brødbrett som piggybacks på LCD -modulen. Det andre aspektet som er annerledes er at Nano kjører på 16-MHz ved hjelp av en ekstern krystall, men jeg valgte å bruke den innebygde 8-MHz-oscillatoren for ATMega328-brikken. Det sparer deler og strøm.

2004 LCD -grensesnittet til Arduino på samme måte som en 1602 LCD. En interessant forskjell er adresseringen av visningsstedene. Det er åpenbart en forskjell fordi det er fire linjer i stedet for to, men i 2004 er den tredje linjen en forlengelse av den første linjen og den fjerde linjen er en forlengelse av den andre linjen. Med andre ord, hvis du hadde et testprogram som nettopp sendte ut en rekke tegn til LCD -skjermen, ville det 21. tegnet dukke opp i begynnelsen av den tredje linjen og det 41. tegnet brytes tilbake til begynnelsen av den første linjen. Jeg bruker den egenskapen i programvaren for effektivt å doble labyrintens lengde.

Jeg bestemte meg for å gjøre min versjon batteri drevet, så jeg brukte en vanlig 18650 Li-ion, 3,6-volts batteri. Det krevde at jeg la til et lite kort for å tillate USB -lading og et annet lite kort for å øke batterispenningen til 5 volt for LCD -en og ATMega -brikken. Bildene viser modulene jeg brukte, men det er også alt-i-ett-moduler som utfører begge funksjonene.

Trinn 2: Programvare

Programvaren er den samme for både Nano- og ATMega328 -brikken. Den eneste forskjellen er i programmeringsmetoden. Jeg bruker min egen barebones -versjon av 1602 LCD -programvare og LCD -programvaren i dette prosjektet er basert på det. Jeg trengte å legge til evner for å løse de ekstra linjene i 2004 -skjermen, og jeg la også til rutiner for å skifte displayet. Displayskiftet gir bevegelseseffekten av "steinene" forbi "skipet".

Som nevnt tidligere danner linje 1 og 3 en sirkulær kø og linje 2 og 4 gjør det også. Det betyr at etter 20 skift byttes linje 1 og 3 og linje 2 og 4 byttes. Etter 40 skift er linjene tilbake i sin opprinnelige posisjon. På grunn av denne oppførselen blir den opprinnelige labyrinten på 20 tegn helt annerledes når linjene bytter. Det gjorde livet interessant da jeg prøvde å danne en labyrint. Jeg åpnet endelig et Excel -regneark, slik at jeg kunne kartlegge banen uten å måtte endre programvaren hele tiden. Programvaren som tilbys her har to versjoner av labyrinten (den ene kommenteres), så du kan velge hvilken du vil ha eller lage din egen.

Jeg ønsket opprinnelig at dette skulle være enkelt nok til at de unge barnebarna kunne spille det, men jeg ville også at det skulle ha en ekstra utfordring hvis de (eller noen andre) ble for gode på det. Spillet starter med skifthastigheten satt til 1 sekund. Den interne ticfrekvensen er 50 ms, så det betyr at det er 20 intervaller der du kan trykke opp/ned -knappene. I virkeligheten bruker en presset knapp 2 tics fordi et 50 ms intervall brukes til å oppdage pressen og et nytt 50 ms intervall brukes til å vente på utgivelsen. Med standard labyrinten er det maksimale antallet trykk som kreves før neste skift tre. Den enkle måten å øke spillets vanskeligheter er å forkorte tiden mellom skift, så et par koderader gjør nettopp det når poengsummen øker. Skiftfrekvensen er satt til å øke hastigheten med 50 ms hvert 20. skift, med minimumshastigheten begrenset til 500 ms. Det er enkelt å endre disse parameterne.

Annet enn å endre skifthastigheten, er hovedlogikken i programvaren å flytte "skipet" og å avgjøre om "skipet" har kollidert med en "stein". Disse funksjonene drar fordel av det definerte "rock/space" -arrayet og også arrayet som definerer minnestedene i displayet. Skiftetallet tilsvarer linjelengden på LCD-skjermen (0-19) og brukes som en indeks for disse matrisene. Logikken er noe komplisert av det faktum at linjene bytter hvert 20. skift. Lignende logikk brukes for å bestemme posisjonen til "skipet" som kan være på en av de fire linjene.

Poengsummen for hvert spill er ganske enkelt tellingen av antall skift som skjedde, og den høye poengsummen lagres i mikrokontrollerens interne EEROM. EEPROM -biblioteket brukes til å lese og skrive til dette minnet. Rutinene som er tilgjengelige, tillater lesing/skriving av enkeltbyte og lesing/skriving av flytende punktverdier. En verdi på 0xA5 lagres på det første EEROM -stedet for å indikere at en høy score er lagret. Hvis denne verdien er tilstede ved oppstart, leses og vises flytende verdi for høy score. Hvis 0xA5 -verdien ikke er tilstede, kalles en rutine for å initialisere høy score til en verdi på 1. Den samme rutinen kalles hvis en tilbakestilling av høy score er ønsket. Den høye poengsummen settes tilbake til verdien 1 ved å holde inne en av opp/ned -knappene og deretter trykke kort på tilbakestillingsknappen.

Trinn 3: Spill spillet

Spiller spillet
Spiller spillet
Spiller spillet
Spiller spillet

Når strøm tilføres, vises gjeldende høy score. Etter at den høye poengsummen er vist, blir labyrinten av "steiner" og "skipet" vist, og deretter begynner spillet noen sekunder senere. Når "skipet" treffer en "stein", blinker meldingen "CRASH AND BURN" noen ganger før poengsummen for spillet vises. Hvis det oppnås en ny høy score, vises den meldingen også. Et nytt spill startes ved å trykke på tilbakestillingsknappen.

Anbefalt: