Tworzenie gier - Marynarzyk (cz. 4)

in pl-gamedev •  7 years ago 

Nauczyliśmy się zdarzeń, tworzenia zmiennych, losowania wyników, ifów ... czas dokończyć dzieło i wydać naszą pierwszą prymitywną grę.

A więc tak. Skoro komputer wybiera swoją opcję, a my swoją, to trzeba teraz oprogramować wygrywanie.

obraz.png

Remis

Remis wydaje się najłatwiej oprogramować. Jeśli obaj gracze mają to samo to wyświetl tekst Remis. Dla ułatwienia będziemy wszystko wykonywać w Event Draw (który działa jak Step, ale ma opcje rysowania).

Dodajemy kolejny blok Piece of Code - chodzi o to, by nie trzymać wszystkiego w jednym bloku, a to poprawi czytelność. Blok nazywamy "Wynik gry".

Jak to zrobić? Prosto. Jeśli komputer i my wybraliśmy to samo to wyświetl tekst "Remis".

/// Wynik

if(wybor_cpu=wybor_gracz)
{
draw_text(10, 50, "Remis");
}

obraz.png

obraz.png

Czyli działa ;)

Wygrana

Mamy trzy możliwości:

  • My: nożyczki, Komputer: papier
  • My: kamień, Komputer: nożyczki
  • My: papier, Komputer: kamień
if(((wybor_gracz=1 && wybor_cpu=3) || (wybor_gracz=2 && wybor_cpu=1))  || (wybor_gracz=3 && wybor_cpu=2) )
{
draw_text(10, 50, "Wygrana");
}

Ogólnie osobiście radzę parami grupować. Czyli dwa ify to jedna para, a potem wynik z tego ifa i kolejne sprawdzenie to druga para. Wszystko w nawiasach. Wydaje się to być skomplikowane, ale wbrew pozorom po jakimś czasie staje się to intuicyjne.

Można to tłumaczyć tak

Pierwszy człon:

Jeśli (gracz wybrał nożyczki i komputer wybrał papier) lub (gracz wybrał kamień i komputer nożyczki)

Drugi człon

Jeśli (gracz wybrał papier i komputer wybrał kamień)

Trzeci człon

Jeśli człon pierwszy lub drugi jest prawdziwy - Wykonaj

obraz.png

Przegrana

Analogicznie działa to do wygranej, tylko zamieniamy cyferki komputera i gracza. I napis zmieniamy :-)

Myszka

Używaliśmy do tej pory klawiszy. Zamieńmy je na myszkę. Z silnika YGOPro wyciągnąłem 3 grafiki do marynarzyka.

f1.jpg
f2.jpg
f3.jpg

Dodajemy 3 sprite - spr_nozyczki, spr_kamien i spr_papier - i centrujemy punkt 0, 0 (przyciskiem center).

Tworzymy też 3 obiekty - obj_nozyczki, obj_kamien i obj_papier. Każdy z nich otrzyma kod z obj_controller, który wykonuje "akcje" wyboru. Czyli tworzymy zdarzenie Left Mouse Pressed i kopiujemy wartości wciśnięcia klawisza 1 z obj_controller.

obraz.png

Dodajemy te obiekty na mapę gry (room), bo będziemy ich używać
obraz.png

Uruchamiamy i ...

I nie działa. Nic się nie dzieje - dlaczego? Omówimy teraz koncepcję zmiennych globalnych.

Wcześniej mówiłem Wam, że zmienne tworzy się poprzez

zmienna=wartość

I jest to prawda, ale taka zmienna nie jest globalna, a lokalna dla obiektu. Co to oznacza? Wyobraźmy sobie, że mamy dwóch przeciwników mających 100 HP. Jeden dostał kulkę i stracił 50HP. Czyli 1 ma 50HP, a drugi 100HP. W typowych zmiennych tzw. lokalnych każdy obiekt ma własną "zmienną". W globalnej jest jedna zmienna na całą grę (albo pokój, musiałbym sprawdzić). Oznacza to, że w strzelance jakby była zmienna globalna - strzał w jedną osobę oznacza utratę życia innych i nie jest to pożądane.

Aby taką zmienną zrobić trzeba dodać przed jej nazwą global i kropkę, tzn:

global.zmienna=wartość

Przerabiamy kod obj_controllera i innych obiektów, by wszędzie był global.

obraz.png

obraz.png

Możemy potem usunąć wyświetlanie wyborów. I mamy wstępną grę skończoną.

Kod źródłowy

http://gmclan.org/up6184_14_marynarzyk.html

Na zakończenie

Marynarzyk w teorii skończony. Jak chcecie będziemy rozwijać go bardziej graficznie (tło, efekty graficzne itd). Co chcecie to zrobimy :P

Ale może takie lekcje Wam się nie podobają i wolicie teoretycznie poczytać co jest czym?

Napiszcie w komentarzach - Praktycznie czytam wszystkie komentarze :)

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

  ·  7 years ago Reveal Comment

it is a very nice post about busy
carry on dear
thanks for sharing

please write it english directly
i will wait for your next post in english

Thanks for your valuable and informative post about polish & pl-artykuly.
We can gather a lot of information by your post.
By dint of, we can increase our skill that is beneficial for all steemians.
I will always visit your site & wait for your upcoming post.
Thanks .
@Resteem done.

Thanks a lot for your valuable post sharing............. i like this post. best of luck mt dear friend

Hej! Fajna gierka :) Jakbyś miał chwilę to sprawdź mój projekt: Snake.js https://github.com/kbkk/Snake.js

Rzuciłem, ale nie znam się na JS :D Widziałem coś podobnego w "grze w 4 minuty" czy coś podobnego ;)

O, gmclanowy uploader :D Czasem jak zaglądam do swojego folderu to mi się płakać chce że byłem w stanie coś takiego wrzucić do Internetu :D