Spisu treści:

Odtworzenie najtrudniejszej gry na świecie na Arduino: 7 kroków
Odtworzenie najtrudniejszej gry na świecie na Arduino: 7 kroków

Wideo: Odtworzenie najtrudniejszej gry na świecie na Arduino: 7 kroków

Wideo: Odtworzenie najtrudniejszej gry na świecie na Arduino: 7 kroków
Wideo: Ups. 2024, Lipiec
Anonim
Image
Image

Ten projekt jest oparty na grze komputerowej, którą można znaleźć w Internecie. Nazywa się „Najtrudniejsza gra świata”. Udało mi się odtworzyć go na Arduino za pomocą czteromodułowej matrycy LED. W tej instrukcji nauczę Cię, jak samodzielnie ją skonstruować. Zanim przejdziemy do zbyt wielu szczegółów, chcę krótko omówić kroki, przez które przeszedłem, aby stworzyć tę grę.

  1. Zebrałem wszystkie potrzebne części.
  2. Połączyłem części razem.
  3. Napisałem szkic, który używał joysticka do przesuwania diody LED graczy na wszystkich modułach.
  4. Zaprojektowałem pierwsze przeszkody i dodałem je do szkicu, aby naśladowały Najtrudniejszą Grę Świata.
  5. Następnie dodałem kod wykrywający kolizję z przeszkodami, który zrestartuje grę.
  6. A potem zaprojektowałem jeszcze dwa poziomy przeszkód.

Krok 1: Wszystkie części

Wszystkie części
Wszystkie części
Wszystkie części
Wszystkie części

Oto lista wszystkich potrzebnych części:

  1. Złącze Arduino UNO i USB:
  2. Cztery moduły 8x8: Matryca LED
  3. Joystick:
  4. 10 przewodów męskich na żeńskie:

Krok 2: Jak podłączyć części do Arduino?

Jak podłączyć części do Arduino?
Jak podłączyć części do Arduino?

Jak podłączyć matrycę LED do Arduino?

  1. GND idzie do GND
  2. VCC przechodzi do 5V
  3. DataIn idzie do cyfrowego pinu 12
  4. CLK przechodzi do cyfrowego pinu 11
  5. CS lub LOAD przechodzi do cyfrowego pinu 10

Jak podłączyć joystick

  1. GND idzie do GND
  2. 5V przechodzi do 5V
  3. VRx idzie do analogowego pinu A0
  4. VRy idzie do analogowego pinu A1
  5. SW nie jest używane

Bateria łączy się z gniazdem 9 v, aby zapewnić moc Arduino;

Krok 3: Schemat blokowy programu

Schemat blokowy programu
Schemat blokowy programu

Owal wskazuje początek programu.

Pierwszym krokiem jest zdefiniowanie wszystkich przeszkód.

Kolejne dwa kroki wskazują na ustawienie zmiennych i włączenie wszystkich modułów.

Następnym krokiem jest ustawienie diod LED na pierwszym poziomie i wszelkich innych zmiennych.

Następnie wyświetl poziom, na którym aktualnie znajduje się gracz.

Romb wskazuje, że odczytuje Joystick, aby zobaczyć, w jakim kierunku jest pchany.

Następnie przesuń gracza w dowolnym kierunku, w którym został przesunięty joystick.

Sprawdź i zobacz, czy gracz zderzył się z przeszkodą.

Jeśli gracz natrafi na przeszkodę, wróć na pierwszy poziom. Jeśli nie, sprawdź, czy gracz osiągnął koniec poziomu.

Jeśli gracz jest na końcu poziomu, przejdź do następnego poziomu, a następnie wróć do „Wyświetl aktualny poziom”. Jeśli nie są na końcu, przesuń przeszkody i wróć do „Read Joystick”.

Krok 4: Programowanie joysticka

Oczywiście, aby przesunąć małą kropkę, którą jest gracz, potrzebujemy joysticka. a żeby joystick mógł faktycznie poruszać odtwarzaczem, musimy go zakodować w Arduino IDE. Musisz dołączyć bibliotekę LedControl, którą możesz znaleźć, przechodząc do menu szkicu> Dołącz biblioteki> zarządzaj bibliotekami i wyszukaj LedControl. Oto jak wygląda kod joysticka.

#include "LedControl.h"

intWejścieDane = 12; wewn CLK = 11; wewn. DIN = 10; LedControl lc=LedControl (Wejście danych, CLK, DIN, 4); //Tworzy obiekt dla czterech modułów int delaytime = 50; //szybkość działania gry int joystick_RtLt, joystick_UpDn; int graczy_x = 0; //players pozioma pozycja od 0 do 31 int player_y = 3; //pionowa pozycja graczy od 0 do 7 int wiersz, kolumna, moduł; void setup() { initialize_modules(); //włącz i ustaw wszystkie cztery moduły led } void loop() { move_player(); //rozpocznij pętlę sprawdzając, czy gracz się porusza delay(delaytime); } void initialize_modules(){ lc.shutdown(0, false); // uruchamia moduł 0 lc.setIntensity(0, 1); lc.shutdown(1, fałsz); // uruchamia moduł 1 lc.setIntensity(1, 1); lc.shutdown(2, fałsz); // uruchamia moduł 2 lc.setIntensity(2, 1); lc.shutdown(3, fałsz); // uruchamia moduł 3 lc.setIntensity(3, 1); lc.clearWyświetlacz(0); // czyści moduł 0 } void move_player(){ module = player_x/8; //określa, w którym module znajduje się gracz column = player_x%8; //definiuje kolumnę, w której znajduje się gracz w wierszu modułu = player_y; lc.setLed(moduł, wiersz, kolumna, fałsz); //wyłącz diodę led na aktualnej pozycji gracza joystick_RtLt = analogRead(A0)/204 - 2; //odczytaj X-joystick i zakres mapy od 2 do -2 if(joystick_RtLt > 0) //kiedy joystick jest po prawej player_x++; //idź w prawo inaczej if(joystick_RtLt 0) //jeśli joystick jest w lewo, a nie na początku player_x--; //przesuń w lewo joystick_UpDn = analogRead(A1)/204 - 2; //odczytaj Y-joystick i zakres mapy od 2 do -2 if(joystick_UpDn 0) //jeśli joystick jest na dole i gracz nie jest na dole player_y--; //przesuń się w dół inny if(joystick_UpDn > 0 && player_y < 7) //jeśli joystick jest w górze a gracz nie jest na górze player_y++; //idź w górę moduł = player_x/8; //ustaw moduł na nową kolumnę pozycji graczy = player_x%8; //ustaw kolumnę na graczy nowa pozycja wiersz = player_y; //ustaw wiersz na nową pozycję graczy lc.setLed(moduł, wiersz, kolumna, prawda); //włącz led na nowej pozycji gracza }

Teraz, gdy dodałeś joystick, popracujmy nad pierwszą przeszkodą!

Krok 5: Pierwszy poziom

W porządku, teraz czas przejść do głównej części programu, czyli przeszkód! Przeszkody sprawiają, że jest to „Najtrudniejsza gra na świecie”. Więc jeśli chcesz faktycznie zagrać w tę grę, musisz dodać to do swojego kodu:

przeszkoda bajtowa [POZIOMY][SCENY][KOLUMNY][WIERSZE] = { //trzy poziomy, 8 scen, 8 kolumn, 8 wierszy

{{{1, 1, 1, 1, 1, 1, 0, 0}, //pierwszy poziom, pierwsza scena {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, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //pierwszy poziom, druga scena {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}, //pierwszy poziom, trzeci scena {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}, //pierwszy poziom, czwarta scena {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}, //pierwszy poziom, piąta scena {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}, //pierwszy poziom, szósta scena {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}, //pierwszy poziom, siódma scena {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}, //pierwszy poziom, ósmy scena {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(); //włącz i ustaw wszystkie cztery moduły led start_level(0); void loop() { move_player(); //rozpocznij pętlę, sprawdzając, czy gracz się porusza if (collision()){ //sprawdź poziom kolizji = 0; //jeśli kolizja jest prawdziwa, zresetuj poziom start_level(level); //zrestartuj grę }else if(delay_count == barrier_delay){ //jeśli nie ma kolizji przesuń przeszkodę co inne opóźnienie moveobstacle(); liczba_opóźnień = 0; }else delay_count++; opóźnienie (czas opóźnienia); //opóźnienie przez szybkość gry }

I to jest pierwsza przeszkoda! Jeśli znudzi Ci się to jako pierwszy poziom, zawsze możesz zmienić bajty, pamiętaj tylko, że musisz mieć osiem różnych scen! Przejdźmy do następnego kroku, wykrywania kolizji!

Krok 6: Wykrywanie kolizji

Ten krok to kolejna ważna część gry, bez niego nie byłoby dużego wyzwania! możesz po prostu przedzierać się przez przeszkody bez żadnych konsekwencji! to nie byłoby zabawne, prawda? więc uczyńmy grę bardziej wymagającą (i o wiele bardziej zabawną!), dodając tę sekcję programu:

pusta pętla () {

Przenieść gracza(); //rozpocznij pętlę, sprawdzając, czy gracz się porusza if (collision()){ //sprawdź poziom kolizji = 0; //jeśli kolizja jest prawdziwa, zresetuj poziom start_level(level); //zrestartuj grę }else if(delay_count == barrier_delay){ //jeśli nie ma kolizji przesuń przeszkodę co inne opóźnienie moveobstacle(); liczba_opóźnień = 0; }else delay_count++; opóźnienie (czas opóźnienia); //opóźnienie w zależności od szybkości gry } int kolizja(){ //sprawdź, czy gracz natrafił na przeszkodę w module sceny = player_x/8; kolumna = gracze_x%8; wiersz = gracze_y; if(moduł > 0) if(przeszkoda[poziom][scena][kolumna][rząd] == 1) //jeśli pozycja gracza jest taka sama jak powrót przeszkody(1); //wykryto kolizję return true return(0); //brak kolizji zwraca false }

I proszę bardzo! teraz możesz cieszyć się grą o wiele więcej! Teraz pokażę Ci, jak zaprogramować dwa ostatnie poziomy gry! prawie skończyłeś z tym instruktażem i jestem pewien, że jesteś gotowy, aby to wypróbować!

Krok 7: Ostatnie dwa poziomy

Zbliżał się koniec instrukcji, te dwa ostatnie poziomy to wszystko, czego potrzebujesz, aby ukończyć tę grę. Wtedy możesz sam to wypróbować! oto kod:

bajtowa przeszkoda [POZIOMY][SCENY][KOLUMNY][WIERSZE] = { //drugi i trzeci poziom, 8 scen, 8 kolumn, 8 wierszy

{{{1, 0, 0, 0, 0, 0, 0, 1}, //drugi poziom, pierwsza scena {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}, //drugi poziom, druga scena {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}, //drugi poziom, trzecia scena {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}, //drugi poziom czwarta scena {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}, //drugi poziom, fif scena {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}, // drugi poziom, szósta scena {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}, //drugi poziom, siódma scena {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}, //drugi poziom ósma scena {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, 1, 0, 0, 0, 0, 0, 1}, //trzeci poziom, pierwsza scena {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}, //trzeci poziom, druga scena {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}, //trzeci poziom, trzecia scena {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}, //trzeci poziom, czwarta scena {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}, //trzeci poziom, piąta scena {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}, //trzeci poziom, szósta scena {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}, //trzeci poziom, siódma scena {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}, //trzeci poziom, ósma scena { 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}}} };

I to wszystko! jesteście gotowi do ukończenia najtrudniejszej gry na świecie. Również pełny kod Arduino znajduje się poniżej.

Zalecana: