[Piszemy grę RPG] #1 Budujemy szkielet gry

Pierwsza lekcja nowej serii poradnika z pisania gier.

Wstęp


Witam cię serdecznie w serii z pisania gry RPG w SFML. Podczas dzisiejszej lekcji nie napiszemy kodu, dzisiejsza lekcja ma na celu zaplanowanie kolejnych działań podczas pisania gry, powinna nam ona nieco pomóc w dalszej pracy.

 

Gra RPG, a więc jaka?


To pytanie musimy sobie zadać przed zaczęciem dalszych prac, a więc z jakich stałych elementów składa się gra RPG?

Niewątpliwie każda gra RPG posiada przynajmniej jedną grywalną postać, z którą może utożsamić się gracz. Bardzo często gracz ma do wyboru kilka klas postaci: Wojownika, Maga, czy Łucznika, a każda z klas ma własny zestaw umiejętności. Oczywiście można dołożyć jeszcze rasy, ale nimi nie będziemy się zajmowali w tym poradniku.

Skoro mamy grywalną postać to narzuca się potrzeba dodania jakichś wrogów, z którymi gracz mógłby się „pobawić”.

Nieodłączną częścią gier rpg są także przedmioty, które gracz może nakładać, używać (w sensie np pić mikstury życia), czy sprzedawać.

Jeżeli chcemy sprzedać przedmioty to oczywiście narzuca się pomysł dodania jakiegoś NPC, u którego moglibyśmy kupować, czy właśnie sprzedawać przedmioty. Jak już mówimy o NPC to oczywiście nie może zabraknąć postaci, które mogą dać nam zadania.

Już chyba potrafimy dostrzec zarys gry jaki przed nami powstaje, to co zrobiliśmy w tej chwili to jedynie szkic gry jaką chcielibyśmy stworzyć, teraz już mniej więcej wiemy jakich klas będziemy potrzebowali. Czas na nieco bardziej bezduszną wersję tego jak gra będzie wyglądała od środka.

 

Warstwa logiczna


Oczywiście przedstawiony przeze mnie schemat nie jest jedynym możliwym i jedynym prawidłowym, jednak od strony „logicznej” grę można przedstawić w ten sposób:

rpg-sfml

Polecam najpierw samemu przeanalizować ten schemat, a dopiero później przejść do mojego opisu.

Przedstawiony przeze mnie schemat posiada wszystkie elementy, które opisaliśmy sobie powyżej, przedstawia także hierarchię klas (a przynajmniej mam nadzieję, że jest zauważalna).

Game

Klasą główną, do której zbiegają się wszystkie inne jest klasa Game, która ma za zadanie poskładać wszystkie elementy dostarczone przez inne klasy w jedną logiczną całość. Ma ona zajmować się fizyką (kolizjami), renderować scenę przechwytywać eventy, czy też gracza, jego ekwipunek, przetrzymywaniem tekstur, etc (ogólnie: zajmuje się wszystkim).

Player

Reprezentacją gracza w świecie gry jest klasa Player. Jest to klasa wirtualna, która jednak posiada kilka pól takich jak: pozycja gracza, życie, zadawane obrażenia itp.

Klasami, które dziedziczą po tej klasie są: Mage, Ranger oraz Warrior, czyli klasy, które posiadają dodatkowo opisany sposób atakowania, czy też zachowania na niektóre sytuacje, dodatkowo podczepione mają one klasę SkillTree, która jest klasą niezależną od nich no i posiada odpowiednie do każdej z klas drzewko umiejętności.

Equipment

Oczywiście nasza postać musi gdzieś przechowywać swoje przedmioty, z resztą nie tylko ona, własny ekwipunek muszą posiadać także sklepy.

Klasą nieco mniejszą są oczywiście przedmioty, którą reprezentuje klasa wirtualna Item, z której możemy wyróżnić przedmioty do obrony postaci: Armor; do atakowania Weapon, czy jadalne Eatable.

NPC

Jest to ogólna klasa abstrakcyjna służąca do interakcji z postaciami sterowanych przez komputer. Mamy tutaj postacie, które mogą dawać nam zadania Neutral, handlarzy Trader, czy przeciwników Enemy.

Quest

Jest to klasa, której zadaniem jest wczytanie obecnie aktywnych zadań, podania listy aktualnie możliwych do zaakceptowania, czy pokazania postępu aktualnie dostępnych zadań.

Level

Jest to klasa, której zadaniem jest wczytanie, czy też zapisanie poziomów (jeżeli będziecie chcieli, aby zobaczyć jak napisać własny edytor poziomów dajcie znać).

W obecnej chwili zaplanowaliśmy sobie okodowanie 17 klas, z których każda jest dość spora i niewykluczone, że pojawią się kolejne klasy pomocnicze (aby wszystko nieco schludniej wyglądało).

 

Podsumowanie


Jak widzimy takie zaplanowanie powinno nam nieco pomóc przy dalszym pisaniu gry, a ogarnięcie tego „w locie” bez planu niewątpliwie byłoby dużo trudniejsze.

W następnej lekcji napiszemy sobie pierwszy kod, w którym napiszemy sobie wczytywanie poziomów (wraz z renderowaniem tylko potrzebnego fragmentu poziomu).

W razie pytań, problemów, sugestii odnośnie tego kursu, albo po prostu chęci podzielenia się swoim zdaniem zapraszam do systemu komentarzy.

Code ON!


  • Kamil

    Bardzo ładnie rozplanowane, dobrze opisane. Pewnie nie raz tu zajrzę jak coś swojego będę miał zamiar pisać. ;]

  • Rhanjie

    Będę czekać na dalsze lekcje, bo fajnie się czyta. 🙂

    • Miło mi, mogę zdradzić że kolejna lekcja jest już w trakcie prac, chociaż nie prędko się pojawi bo chcę dobrze przedstawić zaplanowany na nią materiał.

  • Programmer

    W jaki sposób zrobiłeś ten schemat do gry, można wiedzieć czy to jakiś program do tworzenia takich rzeczy?
    http://szymonsiarkiewicz.pl/wp-content/uploads/2015/03/scheme.png

  • szevaa

    Może pomyślisz o tworzeniu filmów na YT tak jak pan MZ. Nawet jeśli nie bardzo fajny poradnik w wolnym czasie zajmę się i tym pomysłem 🙂 Pozdrawiam, pajsonat Shiro!

    • Seria „howTo” jest poniekąd wstępem do tworzenia filmów na YT (część wpisów howTo, posiada / będzie posiadała implementację w formie filmów).