Czas trwania – 3 GODZINY
Poziom trudności – TRUDNY
Wstęp
Dzisiaj przed nami duży projekt! Zbudujemy od podstaw popularną grę Flappy Bird!
Przygotowanie
Co wcześniej trzeba przygotować:
Przeglądarkę Google Chrome z rozszerzeniem LOFI Robot ScratchX
(https://www.lofirobot.com/edubox/konfiguracja/)
Przebieg
Budowa środowiska gry
Gra będzie polegała na odpowiednim manewrowaniu wróbelkiem, tak by przelatywał przez szczeliny pojawiające się na losowych wysokościach mapy. Budowę gry możemy zacząć od rysowania planszy w wybranym kolorze i wróbla, którym będziemy fruwali.
Najpierw plansza:
Teraz ptak. Jako, że wróbelek będzie na stałe znajdował się na współrzędnej X=50, a tylko jego wysokość będzie zmienna, to możemy użyć bloku Obróć – ułatwi nam to projektowanie. Na razie “przymocujemy” go na stałe do X=50; Y=50 i narysujemy kulkę, która będzie stanowiła ciało wróbla.
Czas na głowę…
A także oczy i dziób!
No i pozostało nam do wykonania skrzydło:
Nasz wróbelek jest gotowy. Teraz czas na zaprojektowanie przeszkód. Przeszkody będą się poruszały w osi X, a także będą miały różną wysokość więc w obu osiach będzie musiała znajdować się zmienna nadająca współrzędne. Ja te współrzędne nazwę MurX i MurY. Najpierw wykonajmy dwa mury, które utworzą szczelinę.
Teraz wykonajmy ruch murów w osi X. Zasada jest prosta: gdy mur wyleci poza planszę, czyli znajdzie się w pozycji X=-10, należy ustawić jego pozycję na X=110. Będziemy mieli wrażenie, że cały czas lecimy przed siebie.
Na horyzoncie powoli zaczyna pojawiać się pełna koncepcja gry. Nieźle nam idzie. Zaprogramujmy teraz występowanie szczelin na losowych wysokościach. Do zmiennej MurY zostanie przypisana losowa wartość w momencie, gdy mur wyleci poza planszę.
Okej, mamy losowe wartości wysokości, ale musimy je również uwzględnić w murze.
Jak widzisz, na razie pozbyłem się dolnego muru ponieważ musimy zastanowić się jak na nowo go wygenerować tak, żeby sięgał dolnej krawędzi planszy. Obecnie generujemy mur górny o wysokości od 10 do 80. Mur dolny powinien zaczynać się na wysokości o szczelinę większej od końca pierwszego muru. Jeżeli wysokość pierwszego muru to 40, a szczelina ma być o wielkości 30 to znaczy, że drugi mur zacznie się na wysokości 70 (ponieważ 40+30=70).
Super, mamy gotową pozycję dla drugiego muru, teraz trzeba znaleźć rozwiązanie dla jego długości. Skoro znamy wysokość pierwszego muru, która jest zapisana w zmiennej MurY, znamy wysokość szczeliny, a także całkowitą wysokość planszy (100) to możemy z łatwością wyliczyć jaka powinna być długość dolnego muru.
100-(MurY+30)
Działa! Mamy gotowe środowisko gry! Czas na ruch wróbla.
Prędkość i przyspieszenie wróbla
Na wróbelka działa grawitacja. Grawitacja to przyspieszenie, a więc do prędkości wróbla w osi Y dodawana jest stała wartość. Ruch skrzydeł wywołany naciśnięciem jakiegoś klawisza spowoduje zmianę prędkości na przeciwny kierunek o stałej wartości. To tyle z teorii, a teraz praktyka! Będziemy potrzebowali zmiennych odpowiedzialnych za prędkość (Predkosc) oraz przyspieszenie (Przyspieszenie). Musimy również określić na jakiej wysokości obecnie znajduje się wróbel – użyjemy do tego zmiennej PozY.
W używanym przez nas bloku Obróć, ustawmy parametr Y na PozY.
Zaprogramujmy teraz ruch!
Niestety wróbelek ucieka nam poza dolną krawędź. Naprawmy to przy pomocy bloku Jeżeli.
Gdy zmienna PozY będzie większa niż 100, to ptak pojawi się na środku planszy z zerową prędkością początkową. Spróbuj pozbyć się bloku resetującego prędkość i zobacz co się stanie. W późniejszym etapie, gdy dodamy do naszej gry punkty spadnięcie będzie oznaczało przegraną.
Ptaki znane są z tego, że latają, a nie spadają. Musimy koniecznie dorzucić możliwość wzbijania się w powietrze. Po naciśnięciu strzałki w górę spowodujemy, że prędkość zmieni się na 3 w górę.
Przegrywanie i punktacja
Super! Mamy możliwość omijania murów. Teraz musimy zaprogramować najsmutniejszą część – przegrywanie. Przegramy, gdy wpadniemy na mur lub spadniemy za dolną krawędź mapy. O przegranej będzie informowała odpowiednia zmienna (Przegrana). Zaprogramowanie przegranej po spadnięciu jest stosunkowo proste, natomiast kłopot może sprawić zaprogramowanie zderzenia z murem. Postawmy sobie pytanie: Jakie warunki muszą być spełnione, żeby program wiedział czy wróbelek wpadł na mur?
- Pierwszym warunkiem jest na pewno wysokość na jakiej znajduje się wróbelek. Gdy wysokość ta będzie mniejsza niż MurY to znaczy że wpadamy na górny mur. Gdy wysokość będzie większa niż MurY + wielkość szczeliny to znaczy że lecimy wprost na dolny mur.
- Drugim warunkiem jest pozycja w osi X. Wiemy, że ptak znajduje się na stałe na współrzędnej X=50. Gdy MurX będzie większy niż X=49 i mniejszy niż 50 + Szerokość muru to znaczy, że wróbel powinien przelatywać przez szczelinę.
Złamanie obu warunków spowoduje przegraną. Przy pomocy bloków, można to przedstawić w ten sposób:
Dodajmy te bloki do pętli powtarzaj.
Przegrana będzie zerowała punktację. Musimy ją oczywiście wcześniej zaimplementować. Dodajmy zmienną Punkty, wyświetlajmy ilość punktów w lewym górnym rogu, a także dodawajmy jeden punkt za każdym razem, gdy wygeneruje się nowy mur.
Teraz połączmy punktację z przegraną. Musimy użyć bloku Jeżeli… w przeciwnym razie.
Jeżeli Przegrana nie będzie prawdą, to program będzie wykonywał się normalnie. Natomiast jeżeli uderzymy w ścianę lub spadniemy to program powinien wyświetlić napis GAME OVER oraz powiadomić ile udało nam się zdobyć punktów. Sekwencję bloków, która będzie wykonywała te polecenia wrzucę do pustej części bloku warunkowego Jeżeli…w przeciwnym razie
Niezły efekt! Niestety, gdy przegramy to nie pozostaje nam nic innego jak na nowo uruchomić cały program. Możemy to z łatwością naprawić dodając taki zestaw bloczków:
No teraz to mamy naprawdę świetną grę. Zajmiemy się teraz szczegółami.
Udźwiękowienie
Zaprogramujmy grę tak, by po naciśnięciu strzałki w górę program wydawał radosne ćwierkanie.
Teraz czas na smutny dźwięk po przegranej.
Nasz program jest już naprawdę, naprawdę rozbudowany.
Dodatki
Kolejnym szczegółem, który poprawi wizualnie naszą grę jest uzależnienie obrotu wróbelka od prędkości. Zobacz jaki będzie efekt zastosowania takiej formuły:
UFF… gra gotowa. Mam nadzieję, że dotrwałeś do tego miejsca. Jeżeli tak, to pochwal się swoim projektem – może uda ci się go jeszcze udoskonalić?