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.