Съдържание:

Игра Arduino Space Rocks: 3 стъпки
Игра Arduino Space Rocks: 3 стъпки

Видео: Игра Arduino Space Rocks: 3 стъпки

Видео: Игра Arduino Space Rocks: 3 стъпки
Видео: Свидание в 16 vs 26 лет 😨😳 2024, Юли
Anonim
Игра Arduino Space Rocks
Игра Arduino Space Rocks

Независимо дали се играят на компютър, на телефон, на игрална конзола или на самостоятелна кутия, много видео игри включват елемент за избягване на препятствия. Разбира се, може да има наградени точки за събиране на жетони или намиране на път през лабиринт, но бъдете сигурни, че вероятно има нещо в играта, чиято единствена цел е да ви попречи да направите това. Първата видео игра беше Pong, но след това най-популярните игри бяха неща като „Asteroids“или „Pac-Man“. По -нова вариация би била простата, но пристрастяваща игра на „Flappy Birds“.

Наскоро видях, че някой е направил обикновена двустепенна версия на „Flappy Bird“, която се играе на обикновен 1602 LCD. Мислех, че това ще бъде нещо, което внуците биха харесали, затова реших да направя своя собствена вариация от нулата. Версията 1602 има само две нива, затова реших вместо това да използвам LCD дисплей от 2004 г. (20x4), за да увелича леко трудността на игра. Аз също избрах да го направя по -скоро като „Астероиди“, като накара играча да води „кораб“през лабиринт от „космически скали“. Дори и да не се интересувате от изграждането на играта, може да има някои елементи от софтуера, които можете да използвате в някой от вашите собствени проекти.

Стъпка 1: Хардуер

Хардуер
Хардуер
Хардуер
Хардуер
Хардуер
Хардуер

Хардуерът може да се основава на почти всяка версия на Arduino. Направих прототипирането с помощта на Nano и след това записах кода в чип ATMega328. Това е същият чип, използван в Nano, но използването му само по себе си позволява по -компактно изграждане и по -ниска консумация на енергия. Както можете да видите, изградих веригата на малка дъска, която се връща към LCD модула. Другият аспект, който е различен, е, че Nano работи на 16-MHz с помощта на външен кристал, но аз избрах да използвам вградения 8-MHz осцилатор за чипа ATMega328. Това спестява части и енергия.

LCD дисплеят от 2004 г. се свързва с Arduino по същия начин, както 1602 LCD. Интересна разлика е в адресирането на местата за показване. Очевидно има разлика, защото има четири реда вместо два, но през 2004 г. третият ред е продължение на първия ред, а четвъртият ред е разширение на втория ред. С други думи, ако имате тестова програма, която току -що изпрати низ от знаци на LCD дисплея, 21 -вият знак ще се появи в началото на третия ред, а 41 -ият символ ще се върне обратно в началото на първия ред. Използвам тази характеристика в софтуера, за да удвоя ефективно дължината на лабиринта.

Реших да направя моята версия на батерията, така че използвах обикновена 18650 литиево-йонна, 3,6-волтова батерия. Това изискваше да добавя малка платка, която да позволява зареждане чрез USB, и друга малка платка, за да повиша напрежението на батерията до 5 волта за LCD и ATMega чипа. Снимките показват модулите, които използвах, но има и модули „всичко в едно“, които изпълняват и двете функции.

Стъпка 2: Софтуер

Софтуерът е един и същ както за чипа Nano, така и за ATMega328. Единствената разлика е в метода на програмиране. Използвам моя собствена версия barebones на 1602 LCD софтуер и софтуерът LCD в този проект се основава на това. Трябваше да добавя възможности за адресиране на допълнителните редове на дисплея от 2004 г., както и да добавя процедури за преместване на дисплея. Промяната на дисплея осигурява ефекта на движение на „скалите“покрай „кораба“.

Както бе споменато по -рано, редове 1 и 3 образуват кръгова опашка, а линии 2 и 4 също. Това означава, че след 20 смени, линии 1 и 3 се сменят, а редове 2 и 4 се сменят. След 40 смени линиите се връщат в първоначалните си позиции. Поради това поведение оригиналният лабиринт от 20 знака става напълно различен, когато линиите се разменят. Това направи живота интересен, когато се опитах да оформя лабиринт. Най -накрая току -що отворих електронна таблица на Excel, за да мога да очертая пътя, без да се налага постоянно да променям софтуера. Софтуерът, предоставен тук, има две версии на лабиринта (едната е коментирана), така че можете да изберете коя искате или да създадете своя собствена.

Първоначално исках това да е достатъчно просто, за да могат младите внуци да го изиграят, но също така исках да има допълнително предизвикателство, ако те (или някой друг) се справят твърде добре. Играта започва със скорост на смяна, зададена на 1 секунда. Вътрешната тарифа е 50 ms, което означава, че има 20 интервала, през които бутоните нагоре/надолу могат да се натискат. В действителност натиснат бутон консумира 2 тика, тъй като се използва интервал от 50 ms за откриване на натискане и още 50ms интервал се използва за изчакване на освобождаването. При лабиринта по подразбиране максималният брой натискания, необходими преди следващата смяна, е три. Простият начин да увеличите трудността на играта е да съкратите времето между смените, така че няколко реда код да направят точно това с увеличаването на резултата. Скоростта на смяна е настроена да се ускорява с 50 мс на всеки 20 смени, като минималната скорост е ограничена до 500 мс. Лесно е да промените тези параметри.

Освен промяна на скоростта на смяна, основната логика в софтуера е да премести „кораба“и да определи дали „корабът“се е сблъскал с „скала“. Тези функции се възползват от дефинирания масив „скала/пространство“, а също и масива, който определя местата на паметта на дисплея. Броят на изместванията съответства на дължината на линията на LCD (0-19) и се използва като индекс в тези масиви. Логиката е донякъде сложна от факта, че размените на редове на всеки 20 смени се броят. Подобна логика се използва за определяне на позицията на „кораба“, която може да бъде на някоя от четирите линии.

Резултатът за всяка пиеса е просто броят на настъпилите смени и високият резултат се записва във вътрешния EEROM на микроконтролера. Библиотеката EEPROM се използва за четене и запис в тази памет. Наличните процедури позволяват еднобайтово четене/запис и четене/запис на стойности с плаваща запетая. Стойност 0xA5 се съхранява в първото местоположение на EEROM, което показва, че е записан висок резултат. Ако тази стойност присъства при включване, тогава стойността с плаваща запетая за високия резултат се чете и показва. Ако стойността 0xA5 не присъства, тогава се извиква рутина за инициализиране на високия резултат до стойност 1. Същата рутина се извиква, ако се желае нулиране на високия резултат. Високата оценка се връща на стойност 1, като задържите един от бутоните нагоре/надолу и след това за кратко натиснете бутона за нулиране.

Стъпка 3: Игра на играта

Игра на играта
Игра на играта
Игра на играта
Игра на играта

Когато се подаде захранване, се показва текущият висок резултат. След като се покаже високият резултат, се показват лабиринтът от „скали“и „кораб“, след което играта започва няколко секунди по -късно. Когато „корабът“удари „камък“, съобщението „CRASH AND BURN“мига няколко пъти, преди да покаже резултата за играта. Ако се направи нов висок резултат, това съобщение също се показва. Нова игра се стартира чрез натискане на бутона за нулиране.

Препоръчано: