Tworzenie gier - Marynarzyk (cz. 3)
Jak niektórzy wiedzą, zasilacz się zepsuł u mnie w komputerze. Być może uda się to naprawić bez serwisantów, jednakże nie miałem kodu źródłowego marynarzyka. Postanowiłem go odtworzyć ręcznie i zajęło mi to z 30 sekund ... Straszne, że tyle pracy daje tak mało rezultatów ...
Ale liczę, że w przyszłości będziemy robić bardziej skomplikowane gry ;)
Wyświetlanie wyboru gracza
W poprzednim tekście zrobiliśmy wyświetlanie wyboru komputera - by sprawdzić czy poprawnie losuje. Teraz zróbmy analogicznie z graczem
draw_text(10, 25, wybor_gracz);
Gdzie (dla przypomnienia) 10 to pozycja w poziomie, 25 w pionie, a wybor_gracz to zmienna przechowująca naszą wartość.
Cały kod draw wygląda tak:
draw_text(10, 10, wybor_cpu);
draw_text(10, 25, wybor_gracz);
Wciśnięcie klawisza
Robimy prostą interakcję. Zmienimy wybor_gracz na inną wartość niż 0. Dodajemy 3 eventy
Key Release -> Digits -> Release 1 ; 2 ; 3
Będą one odpowiednikiem nożyczek (1), kamienia (2) i papieru (3).
W każdym z nich dajemy kod
wybor_gracz=1; // dla nozyczek
Dla kamienia wybor_gracz=2 i analogicznie dla papieru - 3.
Testujemy
Uruchamiamy grę i wciskamy dowolny klawisz z tych trzech - zmieni nam się wartość zmiennej.
Czyli działa!
ify (jeśli)
Ach te złe ify. Może zrobimy następnym razem (zobaczymy) cały tekst poświęcony ifom, bez tworzenia gry.
if to funkcja, która określa czy dany warunek jest spełniony i wykonuje go. Do czego może się przydać? Praktycznie do wszystkiego - jeśli gracz ma 0hp to zrestartuj grę, jeśli gracz ma pusty magazynek to nie może strzelać i tak dalej. Podstawa absolutna ;)
If nie jest trudny, najtrudniejsze moim zdaniem jest łączenie warunków w jeden. Bardzo łatwo coś zepsuć i trzeba dochodzić czemu coś źle się wykonuje.
Zróbmy na razie na rozgrzewkę prostego ifa. Jeśli wybraliśmy nasz "znak" (nożyczki itd.) to nie możemy go zmienić. Ale jak to zapisać?
Na początku wybor_gracz był równy 0. Można sprawdzić czy wybor_gracz=0 i jeśli tak to zmień wartość. Jeśli nie to nic nie rób.
if(wybor_gracz=0)
{
wybor_gracz=1;
}
I analogicznie dla innych wciśnięć guzików.
Jak zauważyliście, a programowaliście w innych językach - kombinacja "=" to przypisanie, a "==" to przyrównanie. Game Maker (i Enigma) i tak olewają to, więc nie ma znaczenia :D Możecie poprawnie pisać "==".
Podstawowy if działa. Na tym prawie zakończymy naszą lekcję, zrobię tylko rozeznanie w operatorach logicznych i tak dalej
== (lub =) - czy jest takie same (czyli np. czy 0==0)
> - czy lewa strona jest większa od prawej (np. 2>1)
< - czy lewa strona jest mniejsza od prawej (np. 1<2)
>= - czy lewa strona jest większa lub równa od prawej (np. 1>=1)
<= - czy lewa strona jest mniejsza lub równa od prawej (np. 1<=1)
!= - czy lewa strona nie jest taka sama jak prawa (np. 1!=1 daje fałsz - w skrócie negacja)
&& (AND) - przyda się to do łączenia warunków - funkcja "i". Jeśli (a=1) AND (b=2)
Zwraca poprawność (pozytywny wynik) gdy oba warunki są poprawne.|| (OR) - przyda się to do łączenia warunków - funkcja "lub". Jeśli (a=1) OR (b=2)
Zwraca poprawność (pozytywny wynik) gdy przynajmniej jeden warunek jest poprawny (na przykład 1, 2 lub oba na raz).
Wiadomości powyższe przydadzą się do np. sprawdzenia wyniku marynarzyka. Na przykład jeśli gracz dał "1" (nożyczki), a komputer dał "3" (papier) to nożyczki niszczą papier więc gracz wygrywa.
Na zakończenie
Mam nadzieję, że wiele osób rozumie to co piszę i testują to u siebie :P Game Maker to język opracowany by uczyć dzieci programowania (i z czasem przerodził się w język dla młodych programistów). Serio, jak ja opanowałem ten język to Wy tymbardziej.
Szybkie podsumowanie lekcji
- If to funkcja wykonująca się jeśli warunek jest spełniony
- Zapoznaj się z listą w dziale "ify". Wydrukuj ją jeśli nie potrafisz jej na razie zapamiętać. Sama wejdzie do głowy, bo bez tego praktycznie gry się zrobić nie da, a trudne to nie jest.
- W GML / EDL znaki "=" i "==" są w wielu przypadkach równoważne.
