Inhoudsopgave:

Arduino Space Rocks-spel - Ajarnpa
Arduino Space Rocks-spel - Ajarnpa

Video: Arduino Space Rocks-spel - Ajarnpa

Video: Arduino Space Rocks-spel - Ajarnpa
Video: ChatGPT with Arduino Nano #arduino #chatgpt #technology #openAI #electronic 2024, November
Anonim
Arduino Space Rocks-spel
Arduino Space Rocks-spel

Of ze nu worden gespeeld op een computer, op een telefoon, op een gameconsole of op een stand-alone box, veel videogames bevatten een element van het vermijden van obstakels. Natuurlijk kunnen er punten worden toegekend voor het verzamelen van tokens of het vinden van je weg door een doolhof, maar wees gerust, er is waarschijnlijk iets in het spel waarvan het enige doel is om te voorkomen dat je dat doet. De eerste videogame was Pong, maar daarna waren dingen als "Asteroids" of "Pac-Man" de meest populaire games. Een meer recente variant zou het eenvoudige maar verslavende spel "Flappy Birds" zijn.

Onlangs zag ik dat iemand een eenvoudige versie met twee niveaus van "Flappy Bird" had gemaakt die werd afgespeeld op een gewoon 1602 LCD-scherm. Ik dacht dat dit iets zou zijn dat de kleinkinderen leuk zouden vinden, dus besloot ik om mijn eigen variatie vanaf het begin te maken. De 1602-versie heeft slechts twee niveaus, dus besloot ik om in plaats daarvan een LCD-scherm uit 2004 (20x4) te gebruiken om de moeilijkheidsgraad van het spel iets te verhogen. Ik heb er ook voor gekozen om het meer op "Asteroids" te laten lijken door de speler een "schip" door een doolhof van "ruimterotsen" te laten leiden. Zelfs als je niet geïnteresseerd bent in het bouwen van de game, kunnen er enkele elementen van de software zijn die je in een van je eigen projecten kunt gebruiken.

Stap 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

De hardware kan gebaseerd zijn op vrijwel elke Arduino-versie. Ik deed het prototype met behulp van een Nano en brandde de code vervolgens in een ATMega328-chip. Dat is dezelfde chip die in de Nano wordt gebruikt, maar als hij alleen wordt gebruikt, is hij compacter gebouwd en wordt er minder stroom verbruikt. Zoals je kunt zien, heb ik het circuit gebouwd op een klein breadboard dat op de LCD-module meelift. Het andere aspect dat anders is, is dat de Nano op 16 MHz werkt met een extern kristal, maar ik heb ervoor gekozen om de ingebouwde 8 MHz-oscillator te gebruiken voor de ATMega328-chip. Dat scheelt onderdelen en stroom.

Het 2004 LCD-interface op de Arduino op dezelfde manier als een 1602 LCD. Een interessant verschil zit in de adressering van de weergavelocaties. Er is duidelijk een verschil omdat er vier lijnen zijn in plaats van twee, maar in de 2004 is de derde lijn een verlenging van de eerste lijn en de vierde lijn een verlenging van de tweede lijn. Met andere woorden, als u een testprogramma had dat zojuist een reeks tekens naar het LCD-scherm stuurde, zou het 21e teken verschijnen aan het begin van de derde regel en het 41e teken loopt terug naar het begin van de eerste regel. Ik gebruik die eigenschap in de software om de lengte van het doolhof effectief te verdubbelen.

Ik besloot om mijn versie op batterijen te laten werken, dus gebruikte ik een gewone 18650 Li-ion, 3,6-volt batterij. Daarvoor moest ik een klein bord toevoegen om USB-opladen mogelijk te maken en nog een klein bord om de batterijspanning op te voeren tot 5 volt voor het LCD-scherm en de ATMega-chip. De foto's tonen de modules die ik heb gebruikt, maar er zijn ook alles-in-één modules die beide functies vervullen.

Stap 2: Software

De software is hetzelfde voor zowel de Nano- als de ATMega328-chip. Het enige verschil zit in de programmeermethode. Ik gebruik mijn eigen barebones-versie van 1602 LCD-software en de LCD-software in dit project is daarop gebaseerd. Ik moest wel mogelijkheden toevoegen om de extra regels van het display van 2004 aan te pakken en ook routines toegevoegd voor het verschuiven van het display. De weergaveverschuiving zorgt voor het bewegingseffect van de "rotsen" langs het "schip".

Zoals eerder vermeld, vormen lijn 1 en 3 een cirkelvormige wachtrij en lijnen 2 en 4 ook. Dat betekent dat na 20 shifts lijn 1 en 3 worden verwisseld en lijn 2 en 4 worden verwisseld. Na 40 ploegendiensten staan de lijnen weer op hun oorspronkelijke plaats. Door dit gedrag wordt het originele doolhof van 20 tekens compleet anders wanneer de lijnen verwisselen. Dat maakte het leven interessant toen ik probeerde een doolhof te vormen. Ik heb eindelijk net een Excel-spreadsheet geopend, zodat ik het pad in kaart kon brengen zonder constant de software te hoeven veranderen. De software die hier wordt aangeboden, heeft twee versies van het doolhof (één is becommentarieerd), zodat je kunt kiezen welke je wilt of je eigen versie maken.

Ik wilde oorspronkelijk dat dit zo eenvoudig was dat de jonge kleinkinderen het konden spelen, maar ik wilde ook dat het wat extra uitdaging bood als ze (of iemand anders) er te goed in werden. Het spel begint met de schakelsnelheid ingesteld op 1 seconde. De interne tic-frequentie is 50 ms, wat betekent dat er 20 intervallen zijn waarin de omhoog/omlaag-knoppen kunnen worden ingedrukt. In werkelijkheid verbruikt een ingedrukte knop 2 tics omdat een interval van 50 ms wordt gebruikt om de pers te detecteren en een ander interval van 50 ms wordt gebruikt om te wachten op de release. Met het standaard doolhof is het maximale aantal keren dat nodig is voor de volgende dienst drie. De eenvoudige manier om de moeilijkheidsgraad van het spel te verhogen, is door de tijd tussen de shifts te verkorten, zodat een paar regels code precies dat doen naarmate de score hoger wordt. De schakelsnelheid is ingesteld om elke 20 diensten met 50 ms te versnellen, met een minimale snelheid van 500 ms. Het is gemakkelijk om deze parameters te wijzigen.

Afgezien van het wijzigen van de schakelsnelheid, is de primaire logica in de software om het "schip" te verplaatsen en te bepalen of het "schip" in aanvaring is gekomen met een "steen". Deze functies maken gebruik van de gedefinieerde "rock/space"-array en ook van de array die de geheugenlocaties in het display definieert. Het aantal shifts komt overeen met de lijnlengte van de LCD (0-19) en wordt gebruikt als een index in deze arrays. De logica wordt enigszins gecompliceerd door het feit dat de lijnen elke 20 ploegentellingen verwisselen. Soortgelijke logica wordt gebruikt om de positie van het "schip" te bepalen, dat zich op een van de vier lijnen kan bevinden.

De score voor elk spel is gewoon de telling van het aantal verschuivingen dat heeft plaatsgevonden en de hoogste score wordt opgeslagen in de interne EEROM van de microcontroller. De EEPROM-bibliotheek wordt gebruikt om de lees- en schrijfbewerkingen naar dit geheugen uit te voeren. De beschikbare routines maken lezen/schrijven van één byte en lezen/schrijven van drijvende-kommawaarden mogelijk. Een waarde van 0xA5 wordt opgeslagen in de eerste EEROM-locatie om aan te geven dat een hoge score is opgeslagen. Als die waarde aanwezig is bij het opstarten, wordt de drijvende-kommawaarde voor de hoogste score gelezen en weergegeven. Als de 0xA5-waarde niet aanwezig is, wordt een routine aangeroepen om de hoogste score te initialiseren naar een waarde van 1. Diezelfde routine wordt aangeroepen als een reset van de hoogste score gewenst is. De hoogste score wordt teruggezet naar een waarde van 1 door een van de omhoog/omlaag-knoppen ingedrukt te houden en vervolgens kort op de reset-knop te drukken.

Stap 3: Het spel spelen

Het spel aan het spelen
Het spel aan het spelen
Het spel aan het spelen
Het spel aan het spelen

Wanneer stroom wordt toegepast, wordt de huidige hoogste score weergegeven. Nadat de hoogste score is weergegeven, worden het doolhof van "rotsen" en het "schip" weergegeven, waarna het spel een paar seconden later begint. Wanneer het "schip" een "rots" raakt, knippert het bericht "CRASH AND BURN" een paar keer voordat de score voor het spel wordt weergegeven. Als er een nieuwe highscore wordt behaald, dan wordt die melding ook getoond. Een nieuw spel wordt gestart door op de resetknop te drukken.

Aanbevolen: