1 Nazwa implementacji: Zróbmy grę - uciekanie przed piłką
Transkrypt
1 Nazwa implementacji: Zróbmy grę - uciekanie przed piłką
Nazwa implementacji: Zróbmy grę - uciekanie przed piłką Autor: Łukasz Ciężki Opis implementacji: Implementacja zawiera sposób na stworzenie gry obsługiwanej przez Arduino, w której gracz musi uciekać przed stale rosnącą piłką. Stwórzmy grę, w której gracz steruje przyciskami góra/dół/lewo/prawo do uciekania okręgiem przed piłką, która wraz ze wzrostem czasu rośnie. Gracz ma mieć również do dyspozycji przycisk wstrzymania gry (pauzy). Schemat połączeniowy przycisków (przyciski jako pull-up, czyli z podciąganiem do napięcia): Kod: #include <TVout.h> #include <fontALL.h> TVout TV; //rozmieszczenie przycisków (piny) #define gora 2 #define dol 3 #define lewo 4 #define prawo 5 #define funkcjonalny 6 int szerokosc = 120; int wysokosc = 96; void setup() { TV.begin(PAL,szerokosc,wysokosc); //przyciski na zasadzie PULLUP (z podciąganiem do napięcia) pinMode(gora, INPUT_PULLUP); pinMode(dol, INPUT_PULLUP); pinMode(lewo, INPUT_PULLUP); pinMode(prawo, INPUT_PULLUP); pinMode(funkcjonalny, INPUT_PULLUP); 1 Projekt “Strategia Wolnych i Otwartych Implementacji jako innowacyjny model zainteresowania kierunkami informatyczno-technicznymi oraz wspierania uczniów i uczennic w kształtowaniu kompetencji kluczowych” współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. TV.select_font(font6x8); TV.println("Gra na uciekanie"); TV.select_font(font4x6); TV.println("Gra rozpocznie sie za"); TV.println("5 sekund"); TV.delay(5000); TV.clear_screen(); TV.select_font(font8x8); TV.println("START!"); TV.draw_circle(0.5 * szerokosc,0.5*wysokosc,2,1); //rysuj okrąg (gracza) na środku ekranu TV.delay(500); TV.select_font(font4x6); } unsigned int pozycjax = 0.5 * szerokosc; //ustaw pozycję x gracza na środek ekranu unsigned int pozycjay = 0.5 * wysokosc; //ustaw pozycję y gracza na środek ekranu boolean pauza = false; //czy pauza jest włączona unsigned int wielkosc = 1; //wielkość wroga (piłki) unsigned int licznik = 1; //licznik czasu gry (punkty) unsigned int wrogx = 5; //startowa pozycja x wroga unsigned int wrogy = 5; //startowa pozycja y wroga unsigned int kierunekx = 2; //kierunek (szybkość) x wroga unsigned int kieruneky = 2; //kierunek (szybkość) y wroga void loop() { if(!digitalRead(gora)) pozycjay = pozycjay - 2; //jeśli wciśnięto górę, zmień pozycję y if(!digitalRead(dol)) pozycjay = pozycjay + 2; //jeśli wciśnięto dół, zmień pozycję y if(!digitalRead(lewo)) pozycjax = pozycjax - 2; //jeśli wciśnięto lewo, zmień pozycję x if(!digitalRead(prawo)) pozycjax = pozycjax + 2; //jeśli wciśnięto prawo, zmień pozycję x if(!digitalRead(funkcjonalny)) { //jeśli wciśnięto przycisk dodatkowy, pauza = true; //załącz pauzę TV.set_cursor(0.1 * szerokosc, 0.5 * wysokosc); //ustaw kursor TV.println("PAUZA"); //wyświetl napis TV.invert(); //odwróć kolor ekranu TV.delay(500); //czekaj 0,5s } while(pauza){ //jeśli pauza jest włączona if(!digitalRead(funkcjonalny)){ //jeśli przycisk dodatkowy został wciśnięty, pauza = false; //wyłącz pauzę TV.delay(500); //czekaj 0,5s } } TV.clear_screen(); //czyść ekran TV.print("Punkty: "); //wyświetl napis TV.println(licznik); //wyświetl zmienną wielkosc = 1 + (licznik / 100); //ustaw wielkość wroga na podstawie czasu gry TV.draw_circle(pozycjax,pozycjay,2,1); //rysuj okrąg (gracza) TV.draw_circle(wrogx,wrogy,wielkosc,1,1); //rysuj wroga if((wrogx <= pozycjax + (wielkosc + 2) && wrogx >= pozycjax - (wielkosc + 2)) && (wrogy <= pozycjay + (2 + wielkosc) && wrogy >= pozycjay - (2 + wielkosc))){ // TV.set_cursor(0.1*szerokosc,0.5*wysokosc); //ustaw kursor TV.println("KONIEC GRY"); //wyświetl napis TV.println("Gra rozpocznie sie za"); //wyświetl napis 2 Projekt “Strategia Wolnych i Otwartych Implementacji jako innowacyjny model zainteresowania kierunkami informatyczno-technicznymi oraz wspierania uczniów i uczennic w kształtowaniu kompetencji kluczowych” współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. TV.println("5 sekund"); //wyświetl napis TV.delay(5000); //czekaj 5s wrogx = 5; //ustaw startową pozycję x wroga wrogy = 5; //ustaw startową pozycję y wroga licznik = 1; //ustaw licznik na 1 wielkosc = 1; //ustaw wielkosc na 1 pozycjax = 0.5 * szerokosc; //ustaw pozycję startową x gracza pozycjay = 0.5 * wysokosc; //ustaw pozycję startową y gracza TV.select_font(font8x8); TV.println("START!"); TV.delay(500); TV.select_font(font4x6); } if(wrogx <= (4 + wielkosc)){ //jeśli wróg zderzył się z lewą ścianką wrogx = (5 + wielkosc); //ustaw wroga przed ścianką kierunekx = 2; //zmień kierunek x poruszania się wroga } if(wrogx >= szerokosc - (4 + wielkosc)){ //jeśli wróg zderzył się z prawą ścianką wrogx = szerokosc - (5 + wielkosc); //ustaw wroga przed ścianką kierunekx = -2; //zmień kierunek x poruszania się wroga } if(wrogy <= (4 + wielkosc)){ //jeśli wróg zderzył się z górną ścianką wrogy = (5 + wielkosc); //ustaw wroga przed ścianką kieruneky = 2; //zmień kierunek y poruszania się wroga } if(wrogy >= wysokosc - (4 + wielkosc)){ //jeśli wróg zderzył się z dolną ścianką wrogy = wysokosc - (5 + wielkosc); //ustaw wroga przed ścianką kieruneky = -2; //zmień kierunek y poruszania się wroga } TV.delay(50); //czekaj 50ms licznik++; //zwiększ licznik wrogx += kierunekx; //zmień pozycję x wroga wrogy += kieruneky; //zmień pozycję y wroga } 3 Projekt “Strategia Wolnych i Otwartych Implementacji jako innowacyjny model zainteresowania kierunkami informatyczno-technicznymi oraz wspierania uczniów i uczennic w kształtowaniu kompetencji kluczowych” współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego.