Tworzenie gier - Marynarzyk (cz. 2)

in #pl-gamedev6 years ago (edited)

Dobrze - mamy obiekt kontrolny, który zarządza wszystkim, mamy pokój - musimy zaimplementować zdarzenia.

Oczywiście w Event Create tworzymy zazwyczaj zmienne - omówiliśmy je już poprzednim razem. Zmienne będą dwie:

  • wyborcpu
  • wyborgracz

Takie proste nazwy. "Wybór Gracz" będzie równy 0 na początek, gdyż 1, 2, 3 to prawdziwe wybory, a 0 to wskazówka, że żaden nie został wybrany.

wyborgracz=0;

CPU będzie losowo wybierał opcję. Zanim do tego przejdziemy, omówmy funkcje losowania, którą użyję.

irandom_range(n1, n2)

Jest to funkcja losująca liczbę z przedziału n1 do n2. Na przykład 1, 3 [w naszym przypadku]. Zwracana wartość jest liczbą całkowitą.

randomize

Game Maker / Enigma używa tego samego Seeda zawsze. Oznacza to w skrócie, że zawsze losowana liczba jest ta sama. Randomize pozwala wylosować nowy seed przez co wartości za każdym razem będą losowe.

Po więcej funkcji zapraszam do działu Random Functions.

Kod

Czyli jeśli komputer ma coś losować, to musi to wyglądać tak:

randomize();
wyborcpu=irandom_range(1, 3);
wyborgracz=0;

Wyborcpu przypisujemy do zwrotu z funkcji - w skrócie funkcja losująca wykona się i zwróci wartość, która zostanie przypisana do wyborcpu. W ten sposób zwracać można chyba każdą funkcję - niektóre zwracają wartość, niektóre informacje (np. 1 - poprawnie się wykonałem, 0 - niepoprawnie).

Ale skąd mam wiedzieć czy działa?

Dobre pytanie - przecież na wiarę nic nie będziemy brali - możemy sprawdzić czy wyborcpu działa poprawnie!

Do event Draw dodajemy jak zwykle - "kawałek kodu" i wpisujemy

draw_text(10, 10, wyborcpu);

lub

draw_text(10, 10, string(wyborcpu));

Różnica polega na tym, że jeśli funkcja przyjmuje wartość tekstową, a podamy cyfrę - program może źle zadziałać. string() zamienia cyfrę na znak tekstowy - "3" (na przykład).

Jednak są sytuacje, gdy trzeba "rzutować" zmienną, czyli zmieniać jej typ.

draw_text(x, y, string);

draw_text to funkcja rysująca tekst - przyjmuje 3 argumenty - X czyli pozycja na ekranie w poziomie gdzie jest rysowane, Y czyli pozycja w pionie i string - czyli tekst właściwy.

W grze podaliśmy string - wyborcpu
"Poprawny string" np. "Ania poszła do przedszkola" jest w cudzysłowach. Wtedy taki tekst nie podlega wykonywaniu się. Podanie wyborcpu (bez żadnych apostrofów ani cudzysłowów) sprawia, że program odszukuje w zmiennych czy taki "element" się trafił. Jako, że w create losowaliśmy cyfrę, to podstawił ją i wyświetlił.

Room - pozycje X i Y

2017-12-30-150817_2048x1152_scrot.png

Tutaj najprostszy przykład - bezpośrednio na room czyli pokoju. Na czerwono zakreśliłem pozycję myszy; X wynosi 416, a Y - 352. Zaznaczyłem też, która oś jest która. Punkt zielony to (mniej więcej) podana pozycja X i Y dla draw_text - czyli 10, 10 - lewy górny róg.

F5 - restart gry

Aby sprawdzić czy kod działa musimy uruchamiać aplikację, sprawdzić i wyłączyć. Zróbmy prosty restart gry. Jest to sytuacja, w której cały program zaczyna działać od początku, ale bez jego wyłączenia i włączenia. Czasem można coś w tym stylu zauważyć gdy gra zmienia rozdzielczość.

Dodajemy event Key Press -> Function Keys -> press < F5 > i w Piece of Code dajemy

game_restart();

Jest to funkcja "tymczasowa" w naszej grze, ale może się przydać.

Rezultat

Mamy coś na ekranie - co prawda daleko do prostego marynarzyka, ale jednak. Myślę, że marynarzyk w prostej wersji będzie gotowy w następnym artykule, a później zajmiemy się jego graficzną formą.

obraz.png

Szybkie podsumowanie lekcji

  • randomize losuje wartość seed, przez co funkcje losujące zwracają wartości losowe.
  • irandom_range losuje cyfrę z przedziału i zwraca wynik całkowity
  • Wynik funkcji (np. irandom_range) można przypisać do zmiennej
  • Jeśli funkcja spodziewa się wartości tekstowej - powinno się zamienić wartość cyfrową na string.
  • draw_text rysuje tekst. Jako, że to funkcja rysująca - musi być w "event Draw".
  • game_restart resetuje grę do stanu "jak przy uruchomieniu".
  • RÓBCIE KOMENTARZE

Jak ktoś czegoś nie rozumie - niech da znać. Dla mnie to jest proste jak słońce, ale dla Was takie nie musi. Najwyżej zrobię sprostowanie w kolejnej części poradnika.

Sort:  

hy what is that dont understand that

Hej, ciekawa seria – obserwuję uważnie. Nigdy wcześniej nie spotkałem się z tym środowiskiem developerskim i chętnie będę na bieżąco czytał i też porównywał sobie jak wygląda tworzenie kodu w tym IDE a w innych środowiskach, które akurat znam. A tak poza tym – miło spotkać innego zapaleńca wolnego oprogramowania i Linuxa! :)

Ja u siebie też trochę o technologii piszę i chcę pisać. Teraz właśnie zacząłem serię artykułów, w których opisuję moje zmagania się z tworzeniem gry przeglądarkowej w warcaby angielskie.

Temat chyba cię zainteresuje (widziałem, że zagłosowałeś na pierwszy wpis z tej serii) i na pewno będziesz miał ciekawe uwagi co do mojego kodu – na to liczę.

Hej!

Postaram się, ale jestem słaby z typowego programowania. Enigma / Game Maker jest bardzo prosty i umiem w tym jakieś gry tworzyć; znam troszkę basha i PHP (i wszelkie HTML, SQLe podstawowe, Bootstrapy)

Ja sam raczej wyrosłem właśnie z takiego bardziej front-endowego podwórka (strony i aplikacje internetowe – HTML, CSS, JS, PHP). Ale zawsze chętnie uczę się czegoś nowego i tak jest też w przypadku tych PyCheckersów.

Super zajawka i fajny sposób na naukę programowania 😋

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.033
BTC 63071.06
ETH 3121.31
USDT 1.00
SBD 3.84