Spisu treści:
- Krok 1: Wszystkie części
- Krok 2: Jak podłączyć części do Arduino?
- Krok 3: Schemat blokowy programu
- Krok 4: Programowanie joysticka
- Krok 5: Pierwszy poziom
- Krok 6: Wykrywanie kolizji
- Krok 7: Ostatnie dwa poziomy
Wideo: Odtworzenie najtrudniejszej gry na świecie na Arduino: 7 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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ę.
- Zebrałem wszystkie potrzebne części.
- Połączyłem części razem.
- Napisałem szkic, który używał joysticka do przesuwania diody LED graczy na wszystkich modułach.
- Zaprojektowałem pierwsze przeszkody i dodałem je do szkicu, aby naśladowały Najtrudniejszą Grę Świata.
- Następnie dodałem kod wykrywający kolizję z przeszkodami, który zrestartuje grę.
- A potem zaprojektowałem jeszcze dwa poziomy przeszkód.
Krok 1: Wszystkie części
Oto lista wszystkich potrzebnych części:
- Złącze Arduino UNO i USB:
- Cztery moduły 8x8: Matryca LED
- Joystick:
- 10 przewodów męskich na żeńskie:
Krok 2: Jak podłączyć części do Arduino?
Jak podłączyć matrycę LED do Arduino?
- GND idzie do GND
- VCC przechodzi do 5V
- DataIn idzie do cyfrowego pinu 12
- CLK przechodzi do cyfrowego pinu 11
- CS lub LOAD przechodzi do cyfrowego pinu 10
Jak podłączyć joystick
- GND idzie do GND
- 5V przechodzi do 5V
- VRx idzie do analogowego pinu A0
- VRy idzie do analogowego pinu A1
- SW nie jest używane
Bateria łączy się z gniazdem 9 v, aby zapewnić moc Arduino;
Krok 3: 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:
Pierwszy na świecie zegar ze świecą światłowodową: 14 kroków (ze zdjęciami)
Pierwszy na świecie zegar ze świecą światłowodową: Postanowiłem zrobić prezent dla mojej żony i chciałem wpaść na oryginalny pomysł. Podobał mi się pomysł ruchomej rzeźby i po długich namysłach wpadłem na pomysł mechanicznego zegara, który migotał i błyskał kryształami, świecami i
Najmniejszy na świecie głośnik Bluetooth ze starych części: 8 kroków (ze zdjęciami)
Najmniejszy na świecie głośnik Bluetooth ze starych części: Jeśli podobał Ci się ten projekt, rozważ zagłosowanie na niego, aby wygrać konkurs Trash to Treasure tutaj - https://www.instructables.com/contest/trashytreasure2020/ W tym Instructable dowiesz się, jak zrobić ultra mały domowy głośnik bluetooth, który pac
Witaj świecie - Java: 5 kroków
Hello World - Java: W tym programie nauczymy się drukować na konsoli w Javie
Bezpieczny dostęp do swojego Pi z dowolnego miejsca na świecie: 7 kroków
Bezpieczny dostęp do swojego Pi z dowolnego miejsca na świecie: mam kilka aplikacji działających przez całą dobę na Pi. Za każdym razem, gdy wychodziłem z domu, bardzo trudno było sprawdzić stan i stan zdrowia Pi. Następnie pokonałem drobną przeszkodę za pomocą ngrok. Dostęp do urządzenia z zewnątrz daje
Symulator gry na smartfony - Graj w gry Windows za pomocą IMU sterowania gestami, akcelerometru, żyroskopu, magnetometru: 5 kroków
Symulator gry na smartfony - graj w gry Windows za pomocą IMU sterowania gestami, akcelerometru, żyroskopu, magnetometru: wesprzyj ten projekt: https://www.paypal.me/vslcreations, przekazując darowizny na kody open-source i amp; wsparcie dalszego rozwoju