Taula de continguts:

Arduino Space Rocks Joc: 3 passos
Arduino Space Rocks Joc: 3 passos

Vídeo: Arduino Space Rocks Joc: 3 passos

Vídeo: Arduino Space Rocks Joc: 3 passos
Vídeo: CNC Mill for under $100 2024, Desembre
Anonim
Joc Arduino Space Rocks
Joc Arduino Space Rocks

Tant si es reprodueixen en un ordinador, en un telèfon, en una consola de jocs o en una caixa autònoma, molts videojocs inclouen un element per evitar obstacles. Per descomptat, hi pot haver punts atorgats per recollir fitxes o trobar-se a través d’un laberint, però tingueu la seguretat que probablement hi ha alguna cosa al joc que té com a únic propòsit evitar-ho. El primer videojoc va ser Pong, però després els jocs més populars van ser coses com "Asteroids" o "Pac-Man". Una variant més recent seria el joc senzill però addictiu de "Flappy Birds".

Fa poc vaig veure que algú havia fet una versió senzilla de dos nivells de "Flappy Bird" que es reproduïa en una pantalla LCD de 1602 comuna. Vaig pensar que això podia agradar als néts, així que vaig decidir fer la meva pròpia variació des de zero. La versió 1602 només té dos nivells, de manera que vaig decidir utilitzar una pantalla LCD de 2004 (20x4) per augmentar lleugerament la dificultat de joc. També vaig optar per fer-ho més com "Asteroides" fent que el jugador guies una "nau" a través d'un laberint de "roques espacials". Fins i tot si no us interessa crear el joc, és possible que hi hagi alguns elements del programari que pugueu utilitzar en un dels vostres propis projectes.

Pas 1: maquinari

Maquinari
Maquinari
Maquinari
Maquinari
Maquinari
Maquinari

El maquinari es pot basar pràcticament en qualsevol versió d'Arduino. Vaig fer el prototipat amb un Nano i després vaig gravar el codi en un xip ATMega328. Aquest és el mateix xip que s’utilitza al Nano, però utilitzar-lo per si mateix permet una construcció més compacta i menys consum d’energia. Com podeu veure, he construït el circuit en una petita tauleta de suport que es troba al mòdul LCD. L'altre aspecte que és diferent és que el Nano funciona a 16 MHz mitjançant un cristall extern, però vaig optar per utilitzar l'oscil·lador integrat de 8 MHz per al xip ATMega328. Això estalvia peces i potència.

La pantalla LCD del 2004 s’interface amb l’Arduino de la mateixa manera que una pantalla LCD de 1602. Una diferència interessant es troba en l’adreça de les ubicacions de visualització. Viouslybviament hi ha una diferència perquè hi ha quatre línies en lloc de dues, però, el 2004, la tercera línia és una extensió de la primera línia i la quarta línia és una extensió de la segona línia. Dit d’una altra manera, si tinguéssiu un programa de prova que acabés d’enviar una cadena de caràcters a la pantalla LCD, el 21è caràcter apareixeria al principi de la tercera línia i el 41è caràcter es tornaria al començament de la primera línia. Utilitzo aquesta característica al programari per duplicar efectivament la longitud del laberint.

Vaig decidir que la meva versió fos alimentada per bateria, de manera que vaig utilitzar una bateria comuna de 18650 Li-ion de 3,6 volts. Això requeria que afegir una petita placa per permetre la recàrrega USB i una altra petita per augmentar el voltatge de la bateria a 5 volts per a la pantalla LCD i el xip ATMega. Les imatges mostren els mòduls que he utilitzat, però també hi ha mòduls tot en un que fan les dues funcions.

Pas 2: programari

El programari és el mateix tant per al xip Nano com per al xip ATMega328. L’única diferència està en el mètode de programació. Utilitzo la meva pròpia versió barebones del programari LCD 1602 i el programari LCD d’aquest projecte es basa en això. Vaig haver d'afegir funcions per abordar les línies addicionals de la pantalla del 2004 i també vaig afegir rutines per canviar la pantalla. El desplaçament de la pantalla proporciona l'efecte de moviment de les "roques" més enllà de la "nau".

Com s’ha esmentat anteriorment, les línies 1 i 3 formen una cua circular i les línies 2 i 4 també. Això vol dir que, després de 20 torns, es canvien les línies 1 i 3 i es canvien les línies 2 i 4. Després de 40 torns, les línies tornen a les seves posicions originals. A causa d’aquest comportament, el laberint original de 20 caràcters esdevé completament diferent quan s’intercanvien les línies. Això va fer que la vida fos interessant quan vaig intentar formar un laberint. Finalment, acabo d'obrir un full de càlcul d'Excel per poder traçar el camí sense haver de canviar constantment el programari. El programari que es proporciona aquí té dues versions del laberint (es comenta una) perquè pugueu triar quina voleu o composar la vostra.

Originalment volia que això fos prou senzill perquè els nets joves poguessin jugar-lo, però també volia que tingués algun repte addicional si ells (o algú altre) s’hi posaven massa bé. El joc comença amb la taxa de desplaçament establerta en 1 segon. La velocitat de tic intern és de 50 ms, de manera que significa que hi ha 20 intervals durant els quals es poden prémer els botons amunt / avall. En realitat, un botó premut consumeix 2 tics perquè s’utilitza un interval de 50 ms per detectar la premsa i s’utilitza un altre interval de 50 ms per esperar la publicació. Amb el laberint predeterminat, el nombre màxim de premudes necessàries abans del següent torn és de tres. La manera més senzilla d’augmentar la dificultat del joc és escurçar el temps entre torns de manera que un parell de línies de codi ho facin a mesura que augmenta la puntuació. La velocitat de desplaçament està configurada per accelerar 50 ms cada 20 torns, amb una velocitat mínima limitada a 500 ms. És fàcil canviar aquests paràmetres.

A part d'alterar la velocitat de desplaçament, la lògica principal del programari és moure la "nau" i determinar si la "nau" ha xocat amb una "roca". Aquestes funcions aprofiten la matriu definida "roca / espai" i també la matriu que defineix les ubicacions de memòria a la pantalla. El recompte de desplaçament correspon a la longitud de la línia de la pantalla LCD (0-19) i s’utilitza com a índex d’aquestes matrius. La lògica és una mica complicada pel fet que les línies intercanvien cada 20 desplaçaments. Es fa servir una lògica similar per determinar la posició del "vaixell" que pot estar en qualsevol de les quatre línies.

La puntuació de cada jugada és simplement el recompte del nombre de torns que es van produir i la puntuació més alta es guarda a l'EEROM intern del microcontrolador. La biblioteca EEPROM s’utilitza per fer les lectures i escriptures en aquesta memòria. Les rutines disponibles permeten llegir / escriure i escriure de byte d’un sol valor de punt flotant. S'emmagatzema un valor de 0xA5 a la primera ubicació EEROM per indicar que s'ha desat una puntuació més alta. Si aquest valor està present en engegar-se, es llegeix i es visualitza el valor en coma flotant de la puntuació més alta. Si el valor 0xA5 no està present, es crida a una rutina per inicialitzar la puntuació més alta a un valor 1. La mateixa rutina es diu si es vol restablir la puntuació més alta. La puntuació més alta es torna a un valor d’1 mantenint premut un dels botons amunt / avall i, a continuació, prement el botó de reinicialització.

Pas 3: jugar al joc

Jugant al joc
Jugant al joc
Jugant al joc
Jugant al joc

Quan s'aplica la potència, es mostra la puntuació més alta actual. Després de mostrar la puntuació més alta, es mostra el laberint de "roques" i el "vaixell" i el joc comença uns segons més tard. Quan el "vaixell" toca una "roca", el missatge "CRASH AND BURN" parpelleja unes quantes vegades abans de mostrar la puntuació del joc. Si es fa una nova puntuació més alta, també es mostrarà aquest missatge. Es comença un joc nou prement el botó de reinicialització.

Recomanat: