wstecz | dalej | spis treści |
|
|
|
Skręć Se Silnik cz. 1 |
|
|
|
autor: Kamil
Skręć Se Silnik, czyli jak budować napęd do swoich gier – Gra ekonomiczna cz.1:
Witam. Dzisiaj w
ramach nowej serii zajmiemy się tworzeniem jednego z najważniejszych
elementów całej gry. Co ja mówię, elementu najważniejszego! Chodzi
tutaj o silnik (lub, jak kto woli, engine z angielskiego),
coś, co napędza grę. Dla wielu wciąż stanowi to problem. Zajmę się
przybliżeniem wszelkich typów tych konstrukcji, zaczynając od jednego z
trudniejszych – silnika gry ekonomicznej. Trudne? Dla wielu tak.
Czytaj dalej i przekonaj się, czy dla Ciebie też jest trudne!
Gra ekonomiczna. Taak. Od razu kojarzy się z "tycoonami", no tak, o to w końcu chodzi. Przybliżę po krótce, o co dokładnie. W grach ekonomicznych zwykle zasiadamy na fotelu szefa jakiejś jednostki, budujemy, kupujemy, sprzedajemy, wydobywamy itp. Słowem – bawimy się w prezesa. Wielu to lubi, świadczy o tym chociaż ilość zapowiadanych gier tego typu. Od razu mówię, że o RTS możemy zapomnieć – to już prawdziwy hardcore w kodzie, niewielu to potrafi zrobić. A ci, co potrafią, pilnie swej tajemnicy strzegą.
Co dzisiaj zrobimy
z tego silnika? Podstawy. Głównie interfejs i silnik budowania
podstawowych budynków. Wszystko zrobimy najprostszym sposobem, chodzi o
to, by naprowadzić Cię na odpowiednią ścieżkę, jeżeli pojmiesz, "o co be",
to dalej sobie dasz radę
Nieco o samym
silniku. Zajmiemy się najprostszą formą – obiekty aktywne wstawiane w
miejsce kursora. Alternatywą mogą być chociażby tablice, ale sam Broo
przyznał, że to potrafi w Polsce tylko Omenski zrobić
Zrobimy silnik do najprostszej ekonomicznej gry – na panelu wybieramy budynek, klikamy na przycisk i wybieramy miejsce na mapie, klikamy i budynek gotowy. Bez wybierania budynku, by np. rozpocząć badania w wypadku budynku badawczego. Opiszę tutaj grę w klimacie przyszłościowym, na razie zrobimy budowanie 1 budynku – kopalni. Jako surowiec damy fundusze, ale równie dobrze możemy dać kilka innych. O tym później. Dobra, tyle w ramach wstępu. Zajmijmy się kompletowaniem grafiki.
Standardowo, grę robimy na planszy 640x480. Tak jest najwygodniej. Po prawej stawiamy interfejs, a po lewej – obszar gry. Na razie bez scrollingu. Na dole podaje spis obiektów, proponowane rozmiary i jak u mnie to wygląda: Tło – Twoja inwencja. Rozmiar dowolny, szybkie tło (rozciągnięte na cały obszar) Panel interfejsu – Tutaj będą się znajdować przyciski budowania, a także kontrolki z ilością funduszy, Ew. minimapa. Rozmiar proponuję 138x480. Proponowany wygląd poniżej.
Przycisk budowania – Przycisk z ikoną budynku do budowania. Gdy zrobimy w rozmiarze 60x60, idealnie wpasuje się w panel obok. Proponowany wygląd: Pusty: (budowanie niedostępne)
Buduj kopalnię:
Poza tym robimy identyczny obiekt, ale tylko z animacją pusty, nazywamy go pusty. Pierwszy przycisk w interfejsie to będzie ten z budowaniem kopalni, a reszta to będą puste przyciski. Gdy będziemy mieli więcej obiektów, zastąpimy je. Kursor – Po prostu kursor. Budynek kopalni – Wizerunek budynku kopalni, w mojej standardowej siatce 64x64 ma on rozmiar 128x128 i wygląd:
Masz wszystko? Dobra, ustaw to wszystko w odpowiedni sposób, nadaj obiektowi "kursor" przeźroczystość (by podczas wybierania miejsca budowania widać było, co jest pod obszarem) i czytaj dalej. Teraz zajmiemy się innymi obiektami.
Stawiamy na planszy nasze przygotowane grafiki itp. Następnie stawiamy dalsze obiekty: 3 liczniki, "Stan" – oznaczający, co w danej chwili robimy; "Kasa1" i "Kasa2", dlaczego dwa odpowiem potem. Wszystkie dajmy na niewidoczne. Następnie, dwa obiekty edycji – "Fundusze" i "Hint". W pierwszym pokazuje się ilość pieniędzy, a w drugim opis wskazywanego obiektu. Teraz o obiektach i ich opcjach. Panel dajmy jako obiekt aktywny, nazwijmy "Panel". Przycisk budowania kopalni nazwijmy "B_kop", jako animacje stoped dajmy animacje z niedostępnym budowaniem (pustą), a jako walking – animacje buduj kopalnie. Poza tym zróbmy obiekt przycisku o nazwie "Pusty", tylko z animacją pusty. Na planszy postawmy kursor z animacją kursora w stoped, animacją wyboru miejsca budowania w animacji własnej o nazwie "Buduj128x128" z hot spotem na środku i animacji budowania niemożliwego w animacji własnej o nazwie "NBuduj128x128" z hot spotem na środku. I na koniec jeden obiekt aktywny "Kopalnia" z hot spotem na środku. Tyle wystarczy.
Teraz przechodzimy do sedna, do najgorszego. Nie mogę tego już dłużej odwlekać :D Zajmiemy się zdarzeniami…
Wszystkie zdarzenia pogrupujemy w logiczne grupy. Będą to: Hinty – zdarzenia związane z wyświetlaniem opisu obiektu; Panel – zdarzenia związane z panelem; BUDOWANIE – zdarzenia budowania obiektów; Inne – zdarzenia inne. Gotowy? No to zaczynamy.
Wszystko to około 20
zdarzeń. Niewiele, nie? No właśnie
DOPISEK W „(* *)” umieszczam komentarze zawarte w kodzie; służą one do oddzielenia dalszych sekcji kodu, a po „//” umieszczam własny komentarz do danego zdarzenia. DOPISEK
Grupa „Hinty”: 1#-> Stan = 0 +B_kop flaga 0 jest podniesiona (on) +Kursor zachodzi na B_kop – Ustaw tekst Hintu na "Buduj kopalnie – 1000 CR" // Gdy najedziemy na przycisk budowania kopalni, w hincie pojawi się jej koszt. 2#-> [Neguj] Kursor zachodzi na B_kop – Ustaw tekst Hintu na " " // Gdy kursor nie zachodzi na przycisk budowy kopalni, ustaw tekst hintu na pusty.
Grupa „Panel”: (* KOPALNIA *) (tak oznaczam komentarz w TGF w kodzie) 3#-> Kasa2>=1000 – Ustaw animacje B_kop na walking i podnieś flage 0. // Jeżeli mamy wystarczającą ilość funduszy, niech przycisk budowania kopalni będzie dostępny. 4#-> Kasa2<1000 – Ustaw animacje B_kop na stopped i opuść flage 0. // Analogicznie do powyższego, jeżeli nie mamy kasy, przycisk jest niedostępny. 5#-> Użytkownik klika na B_kop + Flaga B_kop jest podniesiona – Ustaw Stan na 1. // Jeżeli przycisk jest dostępny i użytkownik nań klika, ustaw Stan na 1, co odpowiada budowie kopalni. 6#-> Użytkownik klika prawym przyciskiem – Ustaw Stan na 0. // Standard w takich grach – klękasz prawym i przestajesz budować obiekt.
Grupa „BUDOWANIE”: (* KOPALNIA *) 7#-> Stan = 1 + [Neguj] Kursor zachodzi na panel – Ustaw animacje kursora na Buduj128x128. // Jeżeli kursor nie zachodzi na panel, ustaw animacje kursora na budowanie kopalni. 8#-> Stan = 1 + Kursor zachodzi na panel – Ustaw animacje kursora na stoped. // Gdy kursor zachodzi na panel, ustaw mu animacje na normalną. 9#-> Stan = 1 + Kursor zachodzi na tło – Ustaw animacje kursora na NBuduj128x128. // Jeżeli kursor zachodzi na tło, uniemożliw budowanie ustawiając odpowiednią animacje kursora. 10#-> Stan = 1 + Kursor zachodzi na kopalnie – Ustaw animacje kursora na NBuduj 128x128. // Analogicznie j.w. Jeżeli kursor zachodzi na kopalnie. 11#-> Stan = 1 + Kasa2 >= 1000 + Animacja Buduj128x128 jest aktualnie odgrywana – Stwórz obiekt Kopalnia na 0,0 od kursora + odejmij 1000 od Kasa2 + Ustaw kopalnie na spodzie (bring to back). // Najważniejsze zdarzenie. Opiszę potem. (* Wskaźnik *) 12#-> Animacja Buduj128x128 jest odgrywana – Ustaw pozycje X kursora na XMouse / 32 * 32 i pozycje Y kursora na YMouse / 32 * 32. // Skokowy ruch kursora. 13#-> Animacja NBuduj128x128 jest odgrywana – Ustaw pozycje X kursora na XMouse / 32 * 32 i pozycje Y kursora na YMouse / 32 * 32. // J.W. 14#-> Kasa2 < 1000 – Ustaw animacje kursora na NBuduj128x128.
Grupa "Inne": (* Licznik kasy *) // Taki bajer, pieniądze stopniowo wpływają na nasze konto. Zresztą, sam zobacz. 15#-> Kasa2 > Kasa1 – Dodaj 1 do Kasa1. 16#-> Kasa2 < Kasa1 – Odejmij 1 od Kasa1. 17#->[Neguj] Animacja Buduj128x128 jest odgrywana + [Neguj] Animacja NBuduj128x128 jest odgrywana – Ustaw X kursora na XMouse, ustaw Y kursora na YMouse. // Gdy animacje budowania nie są odgrywane, ruch kursora jest normalny. 18#-> Zawsze – Ustaw tekst Fundusze na str$( value( "kasa" ) ) + " CR". // Wyświetlanie ilości naszej kasy. 19#-> Na początku poziomu – Ukryj wskaźnik myszy, ustaw Kasa1 i Kasa2 na np. 2000.
Uff… Palców nie
czuję
10#
- Tutaj gdy będziemy mieli więcej obiektów, musimy dodać kolejne warunki w
zdarzeniu, np. dodatkowe Kursor zachodzi na Elektrownia. Wygodniejsze się
wydaje upchnąć wszystkie budynki do jednej grupy obiektów i zrobić jedno
zdarzenie typu Kursor zachodzi na grupa "good", ale te grupy w TGF są
bardzo niedorobione i… nie działa to poprawnie
11# - Jeżeli animacja Buduj128x128 jest grana, to wszystko oznacza, że mamy pod kursorem pusty obszar. Gdy klikniemy mychą, Kasa2 będzie większy od 1000, a Stan będzie się równał 0, to tworzymy kopalnię pod kursorem i zabieramy 1000 creditsów z naszego konta.
No i to chyba…
wszystko. Teraz tylko outro, lub, jak kto woli, zakończenie i wreszcie
mogę iść spać
Mam nadzieję, że pojąłeś. Wszystko zresztą jest takie proste… Na podstawie tych moich wypocin możemy zrobić dowolnie inną grę ekonomiczną, wystarczy pomyśleć. Postaram się w następnych numerach "Ślimaczka" dodać nowe budynki, funkcje itp. Słowem – skończyć ten silnik. Tymczasem ja się żegnam i zostawiam dla tych niezbyt rozumnych przykład tego, co dziś chcieli zrobić. Ale proszę, nie kopiujcie bezmyślnie zdarzeń! Bo inaczej wszystko minie się z celem tej publikacji.
***Ważny dopisek!!! Zauważyłem pewien problem. Mianowicie, trzeba dokładnie ustalić zapętlenie animacji w kursorze. Zatem, w animacji stoped (ukrywającej zwykły kursor) dajemy repeat 1, w animacji Buduj128x128 – zapętlenie nieskończoną ilość razy, w animacji NBuduj128x128 jak w poprzedniej. Inaczej jakieś niewiadomo co się robi. !!!koniec ważnego dopisku***
Pozdrawiam i zapraszam na kolejny artykuł
Kamil, dnia 28
stycznia, 2 minuty po północy
http://www.dhost.info/etgf/kamilhp/
Dla tych nierozumnych: przykład
|
|
wstecz | dalej | spis treści |
|
by pepe9donkey |