Съдържание:

Пресъздаване на най -трудната игра в света на Arduino: 7 стъпки
Пресъздаване на най -трудната игра в света на Arduino: 7 стъпки

Видео: Пресъздаване на най -трудната игра в света на Arduino: 7 стъпки

Видео: Пресъздаване на най -трудната игра в света на Arduino: 7 стъпки
Видео: Nastya and a compilation of new series about friends 2024, Юли
Anonim
Image
Image

Този проект е базиран на компютърна игра, която можете да намерите онлайн. Името му е „Най -трудната игра в света“. Успях да го създам отново на Arduino с помощта на четиримодулна LED матрица. В тази инструкция ще ви науча как да я конструирате сами. Преди да стигнем до твърде много подробности, искам да дам бърз преглед на стъпките, през които преминах, за да създам тази игра.

  1. Събрах всички необходими части.
  2. Свързах частите заедно.
  3. Написах скица, която използва джойстика за преместване на светодиодите на плейърите по всички модули.
  4. Аз проектирах първите препятствия и ги добавих към скицата, така че да подражават на най -трудната игра в света.
  5. След това добавих код за откриване на сблъсък с препятствията, което ще рестартира играта.
  6. И тогава проектирах още две нива на препятствия.

Стъпка 1: Всички части

Всички части
Всички части
Всички части
Всички части

Ето списък на всички части, от които се нуждаете:

  1. Arduino UNO и USB конектор:
  2. Четири модула 8x8: LED матрица
  3. Джойстик:
  4. 10 проводника от мъжки към женски:

Стъпка 2: Как да свържете частите към Arduino

Как да свържете частите към Arduino
Как да свържете частите към Arduino

Как да свържете LED матрицата към Arduino

  1. GND отива към GND
  2. VCC преминава към 5V
  3. DataIn отива към цифров пин 12
  4. CLK отива към цифров пин 11
  5. CS или LOAD отива към цифров пин 10

Как да свържете джойстика

  1. GND отива към GND
  2. 5V преминава към 5V
  3. VRx преминава към аналогов извод A0
  4. VRy отива към аналогов извод A1
  5. SW не се използва

Батерията се свързва към 9v жака, за да даде на Arduino мощност

Стъпка 3: Диаграма на програмата

Блок -схема на програмата
Блок -схема на програмата

Овалът показва началото на програмата.

Първата стъпка е да се дефинират всички препятствия.

Следващите две стъпки показват настройка на променливите и включване на всички модули.

Следващата стъпка е да настроите светодиодите на първо ниво и всякакви други променливи.

След това покажете нивото, на което плейърът е в момента.

Ромбът показва четене на джойстика, за да види в каква посока се натиска.

След това преместете плейъра в каквато и посока да е натиснат джойстика.

Проверете дали играчът се е сблъскал с препятствие.

Ако играчът удари препятствие, върнете се към първото ниво. Ако не, проверете дали играчът е достигнал края на нивото.

Ако плейърът е в края на нивото, настройте го на следващо ниво, след което се върнете към „Показване на текущото ниво“. Ако те не са в края, преместете препятствията и се върнете към „Прочетете джойстика“.

Стъпка 4: Програмиране на джойстика

Разбира се, за да преместите малката точка, която е плейърът, се нуждаем от джойстик. и за да позволим на джойстика действително да премести плейъра, трябва да го кодираме в Arduino IDE. Трябва да включите библиотеката LedControl, която можете да намерите, като отидете в менюто за скициране> Включване на библиотеки> управление на библиотеки и потърсете LedControl. Ето как изглежда кодът за джойстика.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Създава обект за четири модула int delaytime = 50; // скоростта, с която играта работи int joystick_RtLt, joystick_UpDn; int player_x = 0; // хоризонтално положение на играчите от 0 до 31 int players_y = 3; // вертикално положение на играчите от 0 до 7 int ред, колона, модул; void setup () {initialize_modules (); // включваме и задаваме четирите светодиодни модула} void loop () {move_player (); // стартиране на цикъл чрез проверка дали играчът се движи забавяне (забавяне); } void initialize_modules () {lc.shutdown (0, false); // стартира модул 0 lc.setIntensity (0, 1); lc.shutdown (1, невярно); // стартира модул 1 lc.setIntensity (1, 1); lc.shutdown (2, невярно); // стартира модул 2 lc.setIntensity (2, 1); lc.shutdown (3, невярно); // стартира модул 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // изчиства модул 0} void move_player () {module = players_x/8; // определя кой модул е играчът в колона = players_x%8; // дефинира колоната, в която играчът е на ред модул = players_y; lc.setLed (модул, ред, колона, невярно); // изключваме светодиода в текущата позиция на плейъра joystick_RtLt = analogRead (A0)/204 - 2; // четене на X -джойстик и обхват на картата от 2 до -2 if (joystick_RtLt> 0) // когато джойстикът е надясно players_x ++; // отидете надясно иначе if (джойстик_RtLt 0) // ако джойстика е вляво, а не в началото players_x--; // преместване наляво джойстик_UpDn = analogRead (A1)/204 - 2; // четене на Y-джойстик и обхват на картата от 2 до -2 if (joystick_UpDn 0) // ако джойстикът е спуснат и играчът не е най-долу players_y--; // преместване надолу иначе if (джойстик_UpDn> 0 && players_y <7) // ако джойстикът е вдигнат и играчът не е в топ играчи_y ++; // изкачване нагоре модул = players_x/8; // задаване на модул за играчи нова позиция колона = players_x%8; // задаване на колона за играчи нова позиция ред = players_y; // задавам ред на играчите нова позиция lc.setLed (модул, ред, колона, true); // включете светодиода на новата позиция на играча}

Сега, когато сте добавили джойстика, нека да работим по първото препятствие!

Стъпка 5: Първото ниво

Добре, така че сега е време да влезем в основната част на програмата, препятствията! Пречките са това, което наистина прави тази „най -трудната игра в света“. Така че, ако наистина искате да играете играта, трябва да добавите това към кода си:

байтова пречка [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// три нива, 8 сцени, 8 сговора, 8 реда

{{{1, 1, 1, 1, 1, 1, 0, 0}, // първо ниво, първа сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // първо ниво, втора сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // първо ниво, трето сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // първо ниво, четвърта сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // първо ниво, пета сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // първо ниво, шеста сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, // първо ниво, седма сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1, 1}, // първо ниво, осмо сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, void setup () {initialize_modules (); // включваме и задаваме четирите светодиодни модула start_level (0); void loop () {move_player (); // стартиране на цикъл чрез проверка дали играчът се движи if (collision ()) {// проверка за ниво на сблъсък = 0; // ако сблъсъкът е истина, нулирайте ниво start_level (ниво); // рестартирайте играта} else if (delay_count == preprecle_delay) {// ако няма сблъсък преместване на препятствие всяко друго забавяне moveobstacle (); count_count = 0; } else delay_count ++; забавяне (забавяне); // забавяне по скорост на играта}

И това е първото препятствие! Ако ви омръзне това като първо ниво, винаги можете да промените байтовете, само не забравяйте, че трябва да имате осем различни сцени! Нека преминем към следващата стъпка, откриване на сблъсък!

Стъпка 6: Откриване на сблъсък

Тази стъпка е друга важна част от играта, без нея няма да има голямо предизвикателство! можеш просто да си проправиш път през препятствията без никакви последствия! това не би било много забавно нали? така че нека направим играта по -предизвикателна (и много по -забавна!), като добавим този раздел от програмата:

void loop () {

move_player (); // стартиране на цикъл чрез проверка дали играчът се движи if (collision ()) {// проверка за ниво на сблъсък = 0; // ако сблъсъкът е истина, нулирайте ниво start_level (ниво); // рестартирайте играта} else if (delay_count == preprecle_delay) {// ако няма сблъсък преместване на препятствие всяко друго забавяне moveobstacle (); count_count = 0; } else delay_count ++; забавяне (забавяне); // забавяне по скорост на играта} int collision () {// проверява дали играчът е ударил препятствие в модула на сцената = players_x/8; колона = players_x%8; ред = играчи_y; if (модул> 0) if (препятствие [ниво] [сцена] [колона] [ред] == 1) // ако позицията на играча е същата като връщането на препятствие (1); // открит сблъсък return true return (0); // няма връщане на сблъсък false}

И ето го! сега можете да се насладите на играта много повече! Сега ще ви покажа как да програмирате последните две нива на играта! почти сте приключили с тази инструкция и съм сигурен, че сте готови да я изпробвате!

Стъпка 7: Последните две нива

Бяхме в края на инструкциите, последните две нива са всичко, от което се нуждаете, за да завършите тази игра. Тогава можете да го изпробвате сами! ето кода:

байтова пречка [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// второ и трето ниво, 8 сцени, 8 колони, 8 реда

{{{1, 0, 0, 0, 0, 0, 0, 1}, // второ ниво, първа сцена {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // второ ниво, втора сцена {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // второ ниво, трета сцена {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, // четвърта сцена на второ ниво {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, // второ ниво, пет сцена {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // второ ниво, шеста сцена {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, // второ ниво, седма сцена {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, // осма сцена на второ ниво {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // трето ниво, първа сцена {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, // трето ниво, втора сцена {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // трето ниво, трета сцена {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // трето ниво, четвърта сцена {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // трето ниво, пета сцена {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // трето ниво, шеста сцена {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // трето ниво, седма сцена {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // трето ниво, осма сцена { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}}};

И това е! всичко е готово да се опитате да завършите най -трудната игра в света. Пълният код на Arduino е приложен по -долу.

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