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ć To też wyższa szkoła jazdy, tego wam nie wytłumaczę.

  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.

 

Nie zwracajcie uwagi na "Energia:" – robiłem dodatkowo w swoim silniku poziom prądu, jednak tutaj tego nie będzie. 3 wgłębienie jest na "hint:" - tutaj będą się pojawiać opisy budynków itp., a to duże to miejsce na przyciski budowania.

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:

Animacja do kursora "buduj 128x128" – Obiekt, którym będziemy wskazywali gdzie ma zostać zbudowana kopalnia. Dodatkowo jeszcze jedna animacja z tym samym obiektem, ale w innej kolorystyce – w przypadku gdy budowanie w tym miejscu nie może zostać zrealizowane. 

 

 

   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ę  No, ale mam to z głowy. Teraz pozostaje opisanie kilku zdarzeń.

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 Pod MMF tego problemu NIE MA.

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