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.
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");
}
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
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.
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.
Dodajemy te obiekty na mapę gry (room), bo będziemy ich używać
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.
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 :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
it is a very nice post about busy
carry on dear
thanks for sharing
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
please write it english directly
i will wait for your next post in english
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thanks a lot for your valuable post sharing............. i like this post. best of luck mt dear friend
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hej! Fajna gierka :) Jakbyś miał chwilę to sprawdź mój projekt: Snake.js https://github.com/kbkk/Snake.js
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Rzuciłem, ale nie znam się na JS :D Widziałem coś podobnego w "grze w 4 minuty" czy coś podobnego ;)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit