Nauka pisania kodu może być długą podróżą. Nie tylko musisz znaleźć zasoby, które pomogą ci się uczyć, ale także znaleźć ekscytujące pomysły na projekty, które utrzymają twoją edukację na torze.
Gry wideo to świetna okazja, aby zaprogramować coś, z czego możesz czerpać przyjemność. Mogą również nauczyć Cię podstaw, których potrzebujesz, aby być dobrym programistą. W tym artykule omówiono projekt DIY podręcznej gry wideo Arduino, który pomoże Ci zacząć.
Co robimy i dlaczego?
Zanim zagłębimy się w przewodnikową część tego artykułu, warto zbadać, co robimy i dlaczego wybraliśmy to do tego projektu. Tworzenie gier na urządzenia takie jak Arduino wiąże się z kilkoma wyzwaniami.
- Przestrzeń do przechowywania: Większość Płytki Arduino mają bardzo mało pamięci RAM lub pamięci flash. To nie tylko ogranicza ilość kodu, który mogą uruchomić, ale także stwarza wyzwania, jeśli chodzi o pracę ze zmiennymi.
- Moc obliczeniowa: Arduino, którego używaliśmy, ma procesor o niskim poborze mocy, więc niemożliwe jest tworzenie dla niego zasobożernych aplikacji.
- Ograniczone komponenty: Arduino ma wiele dostępnych pinów, ale wiele komponentów wymaga więcej niż jednego. To ogranicza nas, jeśli chodzi o sterowanie i wyświetlanie.
Mając na uwadze te wyzwania, postanowiliśmy stworzyć urządzenie przenośne, które uruchamia bardzo prostą grę opartą na reakcji. Możesz z łatwością tworzyć inne gry na sprzęt, na którym pracujemy, i zachęcamy Cię do kreatywności.
Sama gra jest bardzo prosta. Na ekranie pojawiają się trzy bloki, dwa zarysowane i jeden wypełniony, każdy z odpowiadającym fizycznym przyciskiem poniżej. Gracz musi nacisnąć odpowiedni przycisk w każdej rundzie, aby kontynuować grę, a jeśli naciśnie niewłaściwy przycisk lub zabraknie czasu, gra się kończy. Każde udane naciśnięcie przycisku zapewnia punkty. Gra powoli podnosi poziom trudności, skracając dostępny czas reakcji.
Okablowanie wyświetlacza OLED, Arduino i przycisków
Okablowanie przenośnej gry to pierwszy krok w tym procesie. Jak widać na powyższym schemacie obwodu, nie trzeba wykonywać wielu połączeń, aby rozpocząć, a do tego projektu można nawet użyć płytki prototypowej.
Opublikowaliśmy już przewodnik, który pomoże Ci przewodowe przyciski do Arduino. Nasz Projekt Arduino Aquarium Monitor pokazuje, jak używać wyświetlacza OLED z takim mikrokontrolerem. W związku z tym przez resztę artykułu skupimy się na kodzie tego projektu.
Przenośny kod gry Arduino
Właściwe formatowanie i uporządkowane struktury plików są bardzo ważne zarówno dla początkujących, jak i doświadczonych programistów. Podziękujesz sobie za poświęcenie czasu na staranne uporządkowanie kodu, jeśli kiedykolwiek będziesz musiał do niego wrócić.
Kod wykorzystuje główny plik INO do stworzenia podstawy naszego projektu. Jest też plik C++ do sterowania naszym wyświetlaczem, plik C++ do uruchamiania głównego kodu gry oraz plik biblioteki Arduino, który łączy to wszystko razem.
Zagłębimy się w ten kod poniżej, ale zachęcamy do zapoznania się z komentowanym kodem w naszym Projekt Arduino Handheld Game na GitHub. Pomoże ci odnieść się do tego obok tego artykułu.
Plik biblioteki (library.h)
Nasz plik biblioteki pełni kluczową rolę, łącząc ze sobą nasze inne pliki projektów, dzięki czemu mogą działać jako pojedyncza aplikacja. Ten plik zawiera deklaracje włączenia biblioteki Arduino.h i wszystkich funkcji w naszym kodzie gry, które muszą działać między naszymi plikami. Bez tego nasz kod po prostu nie działałby.
Główny plik INO (main.ino)
Podobnie jak wiele projektów Arduino, ten rozpoczął się od domyślnego szablonu dostarczanego przez Arduino IDE. Ten szablon to daje organizować coś oraz pętla funkcje, których używamy do wywoływania funkcji w naszych innych plikach. Ten plik zawiera również deklarację włączenia pliku library.h.
Funkcja konfiguracji jest idealna do inicjowania naszego wyświetlacza i przycisków, ponieważ działa tylko raz, gdy Arduino jest resetowane lub włączone. W tym celu wywołujemy funkcję disSetup() w naszym pliku wyświetlania oraz funkcję butSetup() w naszym pliku gry.
Nasza funkcja loop() jest jeszcze prostsza niż funkcja setup(), z tylko jednym wywołaniem funkcji gameState() znalezionej w naszym pliku gry. Omówimy to bardziej szczegółowo w dalszej części artykułu.
Plik kodu wyświetlania (display.cpp)
W tym projekcie używamy wyświetlacza OLED SSD1306, chociaż możesz użyć innego typu wyświetlacza, jeśli odpowiednio zmodyfikujesz kod. Ten plik zaczyna się od włączenia pliku biblioteki, biblioteka.h. Następnie zawiera deklaracje dla bibliotek SPI, Wire, Adafruit_GX i Adafruit_SSD1306. Następnie definiuje pewne stałe w celu zapewnienia ustawień wyświetlacza.
Pierwsza funkcja, disSetup, inicjuje wyświetlacz i wyświetla ekran powitalny z logo. Następnie wyczyści wyświetlacz po odczekaniu około 2 sekund. Nasz główny plik, main.ino, wywołuje disSetup w swoim organizować coś funkcjonować.
Pozostałe funkcje w tym pliku, z wyjątkiem timerBar(), tworzą różne ekrany widoczne w trakcie gry. plik gry, gra.cpp, wywołuje każdą z tych funkcji.
- startGame(): Ta funkcja kontroluje pierwszy ekran, który widzi gracz. Po prostu pyta, czy są gotowi, dzwoniąc do switchInstance funkcja znaleziona w pliku gry.
- beginGame(): Gdy gracz rozpocznie grę, ten ekran pokazuje krótkie odliczanie. Następnie zmienia stan gry, aby pasował.
- inGame(): To najbardziej złożona z naszych funkcji wyświetlania, wykorzystująca trzy zmienne do ładowania każdej rundy gry. Rozpoczyna się od instrukcji if, która określa, którą z trzech płytek należy wypełnić, a następnie wyświetla płytki oraz poziom i wynik gracza.
- timerBar(): Ta funkcja używa zmiennej do wyświetlania paska czasu u dołu ekranu. Pokazuje graczowi, ile czasu ma na każdą rundę.
- successScreen(): Jest to prosta funkcja, która wyświetla komunikat za każdym razem, gdy gracz pomyślnie zakończy rundę.
- endGame(): Ta końcowa funkcja wyświetla ekran po zakończeniu gry z wynikiem gracza i opcją ponownego rozpoczęcia gry.
Plik z kodem gry (game.cpp)
Wreszcie, jako ostatni plik do zbadania, czas przyjrzeć się kodowi gry. Ten plik, podobnie jak inne, zaczyna się od włączenia pliku library.h. Zawiera również długą listę różnych zmiennych całkowitych, których używamy podczas gry.
Funkcję butSetup() znajdziesz przed wszystkim innym. Funkcja setup() w naszym głównym pliku wywołuje butSetup. Ta funkcja używa zmiennych do ustawienia naszych przycisków jako danych wejściowych, które możemy później odczytać.
- switchInstance(): Ta funkcja przełącza między instancjami gry, od ekranu startowego do ekranów gry i gry. Otrzymuje zmienną, która mówi mu, na który stan gry ma się przełączyć. Instrukcja if czeka na naciśnięcie przycisku, aby rozpocząć grę ze stanu startGame(). Kolejna instrukcja if uruchamia grę ponownie ze stanu endGame().
- gameState(): Ta funkcja ustawia poziom trudności gry na podstawie wyniku gracza i wywołuje odpowiednią funkcję w zależności od stanu gry. Rozpoczyna się serią instrukcji if, które ustawiają zmienne na podstawie wyniku gracza, po których następują kolejne instrukcje if w celu sprawdzenia bieżącego wystąpienia.
- tileSelector(): Ta funkcja generuje losową liczbę z zakresu od 0 do 2, która informuje grę, którą z trzech płytek należy wypełnić w danym momencie.
- theGame(): Ta funkcja jest prawdopodobnie najważniejsza ze wszystkich. Nazywa selektor płytek oraz w grze funkcji, wybierając nowy kafelek i wyświetlając go na ekranie. Następnie znajdziesz pętlę for, która działa jak licznik czasu dla każdej rundy. Zawiera zestaw instrukcji if, które wykrywają naciśnięcia przycisków i określają, czy są poprawne.
Budowanie własnej podręcznej gry Arduino
Ten artykuł jest uzupełnieniem kodu projektu znalezionego w serwisie GitHub. Więcej informacji na temat konkretnych wierszy kodu, których użyliśmy, można znaleźć w komentarzach w tych plikach. Ale możesz też po prostu załadować go na Arduino i cieszyć się zabawą.
Kreatywność jest kluczowa w świecie tworzenia gier i zachęcamy Cię do pracy nad własnymi pomysłami na gry obok tego.
10 najlepszych projektów radiowych Arduino
Czytaj dalej
Powiązane tematy
- Programowanie
- majsterkowanie
- Pomysły na projekty DIY
- Samouczki dotyczące projektów DIY
- Arduino
- Programowanie
O autorze
Samuel jest pisarzem technologicznym z Wielkiej Brytanii z pasją do wszystkiego, co DIY. Rozpoczynając działalność w dziedzinie tworzenia stron internetowych i druku 3D, a także pracując przez wiele lat jako pisarz, Samuel oferuje wyjątkowy wgląd w świat technologii. Koncentrując się głównie na projektach DIY technologicznych, uwielbia dzielić się zabawnymi i ekscytującymi pomysłami, które możesz wypróbować w domu. Poza pracą Samuela można zwykle spotkać na rowerze, grając w gry komputerowe lub desperacko próbując komunikować się ze swoim krabem.
Zapisz się do naszego newslettera
Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Kliknij tutaj, aby zasubskrybować