Jak vytvořit bludišťovou hru (maze game) v Game Makeru

Estimated read time 24 min read

Bludišťové hry, neboli maze games, jsou velmi populární a v Game Makeru se snadno vytvářejí. Tento tutoriál vám ukáže jak vytvořit takovou hru krok za krokem. Pěkné je, že od prvního kroku máme hratelnou hru, která se v dalších krocích stále rozšiřuje a stává se přitažlivější. Předpřipravenou hru si můžete stáhout v tomto příspěvku, vy si ji jen celou předěláte podle sebe (jednoduché ne? :)).

Když si tuto předpřipravenou hru upravíte a předěláte podle sebe, tak jí můžete bez problémů propagovat, prodávat, umístit si vlastní copyright a vydělávat na ní. Soubor je ve formátu Zip, najdete v něm grafické podklady, které si můžete změnit a dále i samotnou hru, resp. její základ. Grafické podklady jsou ve složce „grafické komponenty“ a zdroj najdete ve složce „zdroj“. Jako první si stáhněte soubor, níže, a rozbalte ho.

Myšlenka hry

Před zahájením tvorby hry je nejdříve dobré si rozmyslet jak hra bude vypadat. To je nejdůležitějším krokem při navrhování hry. Dobrá hra je vzrušující, překvapující a návyková. Měly by tam být jasné cíle pro hráče a uživatelské rozhraní by mělo být intuitivní.
Hra, kterou budeme dělat, je bludišťová hra. Každá místnost se skládá z bludiště. Chce-li hráč uniknout z bludiště, tak musí sbírat všechny diamanty a pak až odejít. Chce-li tak hráč učinit, tak musí řešit hádanky a taky se musí vyhnout monstrům. Mnoho hlavolamů a hádanek lze vytvořit, např.: bloky musí být vtlačeny do díry, části místnosti musí být otevřeny pomocí bomb atd. Je to velmi důležité pokud nechcete zobrazovat všechny tyto věci v první místnosti. Všechny nové položky a všechna nová monstra se musí objevovat postupně, aby byla hra zajímavá.
Takže hlavním cílem ve hře je osoba ovládaná hráčem. Ve hře jsou stěny (možná různé typy, více typů zdí udělá hru přitažlivější), dále jsou ve hře diamanty ke sběru. Existují věci, které leží v okolí, které dělají něco až ve chvíli, kdy se jich hráč dotkne nebo je sebere. Jeden zvláštní bod bude východ z místnosti, tam jsou příšery, které se sami pohybují. Ale pojďme řešit tyto věci jednu po druhé.

Jednoduchý start

Zpočátku zapomeneme na diamanty. Budeme vytvořit hru, ve které se hráč prostě musí dostat k východu. Existují tři zásadní složky ve hře: hráč, zeď, a východ. Budeme potřebovat postavy (budeme je nazývat sprite, jako v Game Makeru) pro každou z těchto postav se musí vytvořt objekt. Ve složce, kterou jste si před chvílí stáhli najdete první velmi jednoduchou hru pod názvem maze_1.gmk. Prosím, vložte ji a prohlédněte si ji.

Objekty

Pojďme nejprve vytvořit objekty. Pro každý ze tří objektů, které používají je jednoduchý sprite s rozměry 32×32:

 

Vytvořte tyto tři sprity obvyklým způsobem a pojmenujte je spr_person, spr_wall, a spr_goal.

Dále vytvoříme tři objekty. Pojďme nejprve na objekt zeď. Dáme mu spr_wall sprite jako obrázek, pojmenujte ji obj_wall a učiňte ji pevnou zaškrtnutím políčka „Solid“. Díky tomu bude pro předněty a osoby nemožné, aby pronikly skrz zeď. Objekt stěna nedělá nic jiného, takže žádné události pro ní nemusejí být definovány.
Zadruhé, dejte vytvořit cílový objekt, to je objekt, kterého hráč dosáhne v cíli. Jedná se o jakýsi ne-předmět, rozhodli jsme se proto, aby to byl obraz cílové vlajky. To je pro hráče zřejmé, že musí jít sem. Když na ní člověk narazí, tak musí jít do další místnosti. Takže tuto akci dáme do kolizní události (collision event, lze nalézt v záložce main1). Má to ale jednu nevýhodu, způsobí to chybu, když hráč dokončí poslední místnost, takže musíme udělat trochu víc práce. Nejprve zjistíme, zda existuje další prostor, pokud ano, tak se přesuneme tam. Jinak musíme restartovat hru. Takže akce bude vypadat takto:

Nastavení akce

Je zřejmé, že v plné hře je lepší udělat něco víc, když hráč dokončí poslední úroveň, například ukázat nějakou pěknou fotografii, nebo ukázat hráčovu pozici v seznamu nejlepších hráčů. Tím se ale budeme zabývat později.
Nakonec je třeba vytvořit na osobu, která je řízena hráčem. Zde je třeba udělat i nějakou další príci, je třeba reagovat na vstup od uživatele, neměl by se srazit se zdí. Pro pohyb udeme používat klávesy se šipkami (to je přirozené a snadné pro hráče). Existují různé způsoby, jak se může osoba pohybovat. Nejjednodušší způsob je přesunout hráče o jednu buňku v naznačeném směru při zmáčknutí šipky. Druhý způsob, který budeme používat, je to, že osoba pohybuje ve směru tak dlouho, jak je tlačítko stisknuto. Jiný přístup je, aby se hráč pohyboval až do dalšího stisknutí klávesy (jako v PacManovi).
Potřebujeme akce pro pohyb šipkami, tyto akce jsou poměrně triviální, oni jednoduše nastaví správný směr pohybu. .“>(Jako rychlost použijeme 4.) Chcete-li zastavit, když hráč uvolní klávesu, tak používáme klávesovou událost (event) <no key>. Zde jsme zastavili pohyb, přeci jen je tu jedna komplikace. Chceme, aby byla postava zarovnána s buňkami mřížky, které tvoří bludiště. Jinak by byl pohyb poměrně obtížný. Např. budete muset zastavit na správném místě, aby jste se přestěhovali do chodby. Toho může být dosaženo takto: v kontrolní kartě je testovací akce zda je objekt v souladu s mřížkou. Pouze v případě, že je to tak, tak se další akce provádí. Musíme přidat klíčovou hodnotu ke každé šipce a nastavit paramatry na 32, protože to je velikost rastru v našem bludišti:

Nastavení parametrů na 32

Je zřejmé, že musíme také zastavit pohyb když narazíme do zdi. Takže v kolizní události pro osoby se stěnou dáme akci, která zastaví pohyb. Existuje jedna věc, na kterou musíte dávat pozor a to na to, že pokud vaše postavička sprite úplně nevyplňuje buňku, která je za normálních okolností vždy takto neúplná, může se stát, že vaše postava nebude v souladu s buňkou mřížky, když narazí do zdi. (Abych byl přesný, to se stane, když je tam hranice velikosti větší než rychlost kolem obrázku spritu). V tomto případě postavička uvízne, protože nebude reagovat na klávesy (protože není v souladu s mřížkou ), ale také se to může celé pohnout dál (protože je tam stěna). Řešením je buď udělat sprite větší nebo vypnout přesné kolize kontroly a jako ohraničovací rámeček uveďte celý obraz.

Vytváření místnosti 

Tak a to bylo všechno, co jsme museli udělat v akcích (events), nyní přejdeme k vytváření místnosti. Vytvořte jednu nebo dvě místnosti, které vypadají jako bludiště. V každém pokoji umístěte cílovou vlajku a postavičku umístěte na start.

Hotovo

A to je vše. První hra je připravena, trochu si s ní pohrajte, např. změňte rychlost postavy, vytvořte některé další úrovně, změňte obrázky atd.

Sbírání diamantů

Ale cílem naší hry bylo sbírat diamanty. Diamanty sami o sobě jsou snadné. Ale jak zajistit, aby hráč nemohl opustit místnost dokud neposbírá všechny diamanty? Za tímto účelem se přídává objekt „dveře“. Dveře se budou chovat jako zeď tak dlouho, dokud ještě zbývají diamanty a zmizí, když budou všechny diamanty pryč. Ve složce „zdroj“ si najděte soubor maze_2.gmk. Prosím načtěte ho a zkontrolujte.
Vedle zdi, cíle a objektu hráče potřebujeme další dva objekty s odpovídajícími sprity: diamant a dveře. Diamant je velmi jednoduchý objekt. Jediné co potřebuje je to, že se zničí, ve chvíli kdy se srazí s postavičkou hráče. Takže v kolizní akci (collision event) dáme akci pro jeho odstranění. Dveře objektu budou umístěny v klíčovém místě, aby blokovali průchod k cíli. Budou pevné (zablokují osobě projít), v případě kolize osoby s dveřmi musíme zastavit pohyb. V sekci Step v Eventu (u dveří) by měl být počet diamantů 0 a pokud ano, zničí sebe. Tam je pro to přímo akce. Budeme také přehrávat nějaký zvuk, takový, že hráč bude slyšet, že dveře se otevřely. Takže v  krokové akci  to vypadá následovně:

Nastavení otevírání dveří

Udělejme hru hezčí

Nyní jsou základy hry vyřešené, je třeba vyřešit věci kolem. Stěny vypadají dost ošklivě, tak na ně umístíme tři nástěnné objekty, jeden do rohu, jeden pro vertikální stěny a jeden pro horizontální stěny. Dejte jim ty správné sprity a nastavte je jako je pevné. Nyní vypadají místnosti s trochou úprav mnohem lépe. Dát místnostem pozadí obrázku také pomáhá.
Chcete-li se vyhnout nutnosti určit kolizní události postavy se všemi těmito různými stěnami (a později s podobnými monstry), tak používejte jednu důležitou techniku v Game Makeru, vytvořte objekt rohu zdi párový pro ostatní objekty. To znamená, že se stěna objektu chová jako zvláštní varianty objektu rohu stěny. Takže oni mají přesně stejné chování (pokud jsme pro ně neurčili jiné chování). Pouze jsme tedy nastavili kolize s rohem. Ty budou automaticky použity pro další objekty stěn. Také objekt dveří můžeme dát jako párový roh zdi.

Skóre

Nyní nastavíme hráči skóre tak, aby měřilo jeho úspěšnost, to je poměrně triviální. Za každý zničený diamant mu udělíme 5 bodů, takže v případě, že zničí diamant, tak přidáme 5 bodů do skóre. Za dokončení úrovně zdělíme 40 bodů, takže jsme přidali 40 bodů do skóre v kolizní události pro cíl s osobou.
Když hráč dosáhne poslední místnosti , tak se zobrazí tabulka s nějvyšším skóre. V Game Makeru je to snadné, protože je na to přichystaná přímo akce. Objekt cíl (goal) se stává malinko složitější po  střetnutí s osobou. Když se střetne s osobou, tak se provede následující událost (event):

Nastavení cíle (goal)

Přidávají se body do skóre, přehrává se zvuk, čeká se chvíli a pak se buď přejde do další místnosti, pokud je to poslední místnost zobrazí se zpráva, tabulka s high-skóre a hra se restartuje.
Všimněte si, že skóre se automaticky zobrazí v titulku, to je trochu ošklivé, místo toho vytvoříme kontrolní objekt. Ten nepotřebuje sprite. Tento objekt bude umístěn ve všech pokojích je to stejný druh kontroly jako, co se děje. Pro tuto chvíli ho použijeme pro zobrazování skóre. Ve akci kreslení se nastavte písmo a font pro zobrazování ve skóre.

Spuštění obrazovky 

Je hezké začít s obrazovkou, která zobrazuje název hry, k tomu používáme první místnost. Vytvoříme zdrojové pozadí s pěkným obrázkem. (Možná budete chtít uvést, že se zde nepoužije žádná video paměť, protože se používá pouze v první místnosti.) Použijeme ho tedy do první místnosti (nejlépe bud, když nebudem využívat barvu pozadí a uděláme ji bez dlaždic). Startovní kontrolní objekt (neviditelný samozřejmě) je vytvořen tak, že čeká dokud uživatel nestiskne klávesu a pak se přesune do další místnosti. („Start controller“ se také nastaví pro skóre jako 0 a zajišťuje, že skóre není zobrazeno v titulku).

Zvuky

Hra by byla bez zvuků docela nudná, takže potřebujeme hře dodat nějaké zvuky, především musíme nastavit hudbu na pozadí. K tomu použijeme nějaký pěkný MIDI soubor, tedy ten, který najdete ve složce s grafickými komponenty, ostatně i jako ostatní zvuky do hry. Začneme s touto hudbou ve start_controller, nastavíme opakování navždy. Dále potřebujeme nějaké zvukové efekty pro vyzvednutí diamant, k otevírání dveří a pro dosažení cíle. Tyto zvuky jsou nazvány podle příslušných výše popsaných událostí. Poté co se dosáhne cíle a tedyi cílového zvuku, tak dáme  chvilinku ticha než se načte další místnost.

Vytváření místností

Nyní můžeme vytvořit několik pokojů s diamanty. Všimněte si, že první místnost je bez diamantů, je to proto, aby jsme nejdřív hráči ukázali, žemá jít směram ke vlajce, až v další místnosti se dozví, že je třeba sbírat diamanty. Tím, že sugestivní název do druhého pokoje s diamanty, bude hráč pochopit, co dělat. Když dáme druhé místnosti sugestivní jméno, tak hráč samotný pochopí co má dělat.

 

MONSTRA A PODOBNÉ VÝZVY 

Hra je vytvořená, vypadá celkem pěkně, ale je triviální a nudná, něco jí chybí. Musíme tedy přidat akci ve formě monster. Také přidáme nějaké bomby, pohyblivé bloky a díry. Celou hra lze nalézt v souboru move_3.gmk.

Monstra

Budeme vytvářet tři různé příšery: jednu, která se pohybuje doleva a doprava, další se bude pohybovat nahoru a dolů, a třetí se bude pohybovat ve všech čtyřech směrech. Přidání monstra je vlastně velmi jednoduché. Jedná se o objekt, který začíná v pohybu a změní svůj směr, kdykoli narazí do zdi. Když postava narazí do monstra, tak je zabita, úroveň se restaruje a hráč ztrácí život. Pro začátek dáme hlavní postavě pouze tři životy.
Pojďme nejprve vytvořit monstrum, které se pohybuje doleva a doprava. Použijeme pro něj jednoduchý sprite a další objekty vytvoříme s odpovídajícími sprity. Ve vlatní tvořící akci to znamená jít také do leva a do prava. Aby to měl hráč trochu těžší, tak nastavte monstrům větší rychlost. Při kolizi se monstra vrací ve svém vodorovném směru.

Druhé monstrum funguje přesně stejným způsobem, ale tentokrát začneme s pohybem buď směrem nahoru nebo dolů a když narazí na zeď, tsak se obrací ve vertikálním směru.
Třetí monstrum je poněkud složitější. To začne pohybovat buď v horizontální nebo ve svislém směru. Když narazí do zdi tak to vypadá, zda to může udělat doleva nebo to vzít pravou zatáčku. Pokud se mu to nepodaří tak otočí svůj směr. To vypadá následovně:

Nastavení monster

Aby se předešlo problémům s monstry v jejich velikosti, tak musíme zrušit zaškrtnutí přesné kolize kontroly a upravit masku, nastavte ohraničovací rámeček na full image.
Když se osoba srazí s monstrem, tak musíme nastavit nějaký hrozný zvuk, pak chvíli ticha, následné snížení počtu životů o jeden a pak restart místnosti. (Všimněte si, že tento řád je zásadní, jakmile půjdeme znovu do místnosti, tak jsou další kroky již vykonány). Kontrolní objekt v akci „no more lives“ ukáže skóre a restartuje hru.

Životy

Použili jsme mechanismus Game Makeru a udělili hráči tři životy. Bylo by však hezké, kdyby se životy stále ukazovali. Kontrolní objekt lze udělat stejnou cestou jako u skóre, ale je lepší když vidíte malé obrázky jako životy. Je tam pro to akce v kartě „score“. Kreslení události nyní vypadá takto:

Vytvoření životů

Všimněte si, že jsme použili také zdrojový font k zobrazení skóre.

Bomby

Přidejme bomby, spouště a vyhodíme je do povětří. Myšlenka jetaková, že když se hráč dostane na spoušť, tak všechny bomby explodují a zničí vše ve svém okolí. To může být použito k vytvoření otvorů ve stěnách a ke zničení monster. Budeme potřebovat tři nové objekty: spoušť (trigger), bombu a výbuch. Pro každý z nich potřebujeme vhodný objekt sprite.
Bomba je velmi jednoduchá, ta prostě jen sedí a nic nedělá. Chcete-li si být jisti, že se monstra budou pohybovat nad ní (spíše než pod ní), tak nastavíme hloubku na 10. Instance objektu jsou vypracovány do hloubky, ty s nejvyšší hloubkou jsou vypracovány jako první tak budou ležet za těmi s menší hloubkou. Nastavením hloubky bomby na 10, se jiné objekty, které mají výchozí hloubku 0, vytvoří přímo na ní.
Spouštěč (trigger) je také poměrně jednoduchý, když se střetne s hráčem, tak všechny bomby vybuchnou. Toho může být dosaženo pomocí opatření ke změně objektu v jiném objektu. Na vrcholu jsme naznačili, že by se to mělo použít pro všechny bomby.

Nastavení bomby

Objekt exploze pouze ukazuje animaci, po animaci se bomba zničí sama. (Musíte být opatrní, aby byl původ exploze na správném místě, když do něj vkládáte bombu). Objekt také musíte zničit vše, čeho se dotkne, to vyžaduje trochu práce. Za prvé, nechceme exploze zničit sámi sebe, takže se musíme dočesně přesunout z cesty. Pak musíme použít opatření ke zničení všech instancí v místech kolem staré pozice výbuchu. Nakonec musí být místo exploze zpět na původním místě.

Nastavení exploze

Všimněte si, že je špatně, když hráč stojí hned vedle bomby, ujistěte se proto, že se spouštěč nebude nacházet hned vedle bomby. Je důležité pečlivě navrhnout úrovně s bombami a spouštěči, tak aby to vypadalo zajímavě.

Bloky a díry

Pojďme vytvořit něco jiného, co nám umožní dělat složitější hádanky. Vytvoříme bloky, které mohou být tlačeny hráčem. Také jsme udělali díry přes které nelze chodit, musí se vyplnit posuvnými bloky nebo je naopak lze použít jako průchody. To umožňuje mnoho možností, bloky musí být tlačeno určitým způsobem vytvořit průchody. Pomocí bloků můžeme i zachytit monstra.

Blok je pevný předmět, hlavním problémem je, aby se po stisknutí hýbal. Když se srazí s osobou, provede se následující akce: Testujeme, zda relativní pozice 8 * other.hspeed, 8 * other.vspeed je prázdná. Toto je pozice, do které má být blok tlačen, pokud je prázdná přesuneme blok tam. Děláme totéž, když je objekt otvoru v této poloze.

Aby se zabránilo monstrům v přebíhání bloků, tak spárujeme roh zdi, to však představujr trochu problém. Vzhledem k tomu, že událost kolize je definována mezi osobou a rohovou stěnu a ne mezi osobou a blokem, tak se stane to, že se osoba zastaví a to není to co chceme. Pokud chceme vyřešit tento problém, tak uděláme fiktivní  osobu, při srážce s osobou se totiž nezastaví, ale otočí a pokračuje dál. Jak bylo uvedeno výše, můžeme použít podřízené objekty s mírně odlišným chováním než spárované objekty.
Díra je pevný předmět. Když se srazí s blokem zničí sebe a blok. S bloky a otvory můžete vytvořit mnoho zajímavých místností. Může však nastat jeden problém a to je ten, že se hráč místnosti uzamkne tak, že už se nebude moci sdostat ven, takže musíme dát hráči možnost restartovat úroveň, za cenu jednoho života. Za tímto účelem pouijeme tlačítko R pro restart. V této klávesové akci pro kontrolu se jednoduše odečtěte jeden z životů a restartujte místnosti.
Tak a zde končí třetí verze pro bludiště, s prvky o kterých jsme psali si můžete vytvořit mnoho verzí zajímavých levelů.

NĚKTERÁ ZÁVĚREČNÁ VYLEPŠENÍ

Pojďme nyní dokončit naši hru. Určitě je potřeba zlepšitgrafiku. Také potřebujeme mnohem více zajímavých úrovní. K tomu přidáme nějaké bonusy a ještě několik funkcí. Finále lze nalézt v souboru maze_4.gmk.

Lepší grafika

Grafika naší aktuální hry je zatím poněkud chudá, dáme si tedy práci a zlepšíme to. Hlavní věc, kterou je dobré změnit je osoba, potřebujem aby se dívala směrem, kam půjde. Nejjednodušší způsob, jak toho dosáhnout, je použít nový snímek, který se skládá ze 4 podobrázků, jeden pro každý směr, aby se měnili takto:

 

 

Game Maker normálně cykluje přes tyt subobrázky. Můžeme tomu zabránit nastavením proměnné image_speed na 0. Když změníme směr charakteru, můžeme změnit subobrázek ukazáný akce na změnu sprajtu:

Změna spritu

Podobnou věc se můžeme udělat pro všechny příšery,  tady nejsou žádné explicitní akce, kde se mění směr. Je jednodušší přidat subobrázky v případě monster, je  vidět, jakým směrem se monstrum se pohybuje a na základě toho se sprite přizpůsobí.

Bonusy

Dodejme dva bonusy: jeden k dodání 100 bodů a další aby přibyl život. Oba jsou velmi jednoduché. Když se bonusy setkají s osobu, tak přehrají zvuk, zničí sami seba a buď přidají nějaké body do skóre nebo 1 na počtu životů. To je vše.

Jednosměrné cesty 

Aby byly jednotlivé levely trochu kmplikovanější, tak budeme využívat jednosměrek, tedy cest v jednom směru. Za tímto účelem se vytvářejí čtyři objekty, každý ve formě šipky ukazující směr pohybu. Když je postava zcela v ní, měli bychom ji přestěhovat správným směrem. Děláme to v kroku osoby (step event). Musíme zjistit, zda osoba je zarovnána do sítě správným způsobem a zda se potká se šipkou, pokud ano, stanovili  jsme si pohyb správným směrem. (Nastavili jsme ji na rychlosti 8, aby to bylo zajímavější)

Vyděšená monstra

Aby bylo možné vytvořit levely, které budou podobné pacmanovi, tak se dosazuje proměnná „afraid“. Creation Event nastavíme na 0 (false). Když se postava potká s novým kruhovým objektem nastavíme proměnnou na „true“ pro všechny příšery a změníme sprite, který má ukázat, že se monstrum  opravdu bojí. Nyní se přesvědčím, zdali se při setkání monstrum opravdu bojí nebo ne. Pokud monstrum bojí, tak se přesune do výchozí polohy. V opačném případě, hráč ztrácí život. Viz hru pro podrobnosti.

Nyní z toho pojďme udělat hru

Nyní máme vytvořených mnoho objektů, ale stále nemáme hotovou celou hru. Velmi důležitou otázkou ve hrách je design úrovní, z jednoduchých můžeme udělat složité. Na začátku může být použito pouze několik objektů, později by se mělo objevit objektů více. Ujistěte se, že jsou ve hře různá překvapení a né jenom například v levelu 50. Je zřejmé, že hodnoty by měly být upraveny na určené hráče. Pro děti budete určitě potřebovat jiné hádanky než pro dospělé.
Hra potřebuje také dokumentaci. V Game Makeru můžete snadno přidat dokumentace pomocí Informací o hře. Konečně nemusí hrát hráči hru na jeden zátah, takže budete muset přidat mechanismus na načtení a uložení hry, naštěstí, je to velmi snadné. Game Maker má vestavěný mechanismus pro ukládání a načítání. F5 uloží aktuální hru, zatímco F6 načte poslední uloženou hru. Měli byste to ale dát do dokumentace.
V souboru maze_4.gmk najdete kompletní hru a také něco navíc. Prosím načtěte ji, hrajte ji, podívejte se na ni a změňte ji tak, aby se vám líbila. Zejména je třeba přidat mnoho dalších úrovní (zde jich je pouze 20). Také můžete přidat nějaké další objekty, jako jsou např. klíče, které otevřené a zamčené dveře, transportéry, které vás přemístí z jednoho místa v bludišti do jiného, kulky, které můžete střílet a tím zabíkjet příšery, dveře, které se otevírají a zavírají čas od času, led, na kterém osoba je neustále v pohybu ve stejném směru , střelba pasti a mnoho dalšího.

KONEČNĚ

Doufám, že vám tento tutoriál pomohlve vytvoření vlastní hry v Game Makeru. pamatujte si, že váš plán je vytvořit hru krok za krokem (nebo raději objekt za objektem). Existuje mnoho cest, jak může být hra vytvořena, někdy to fungovat nebude, někdy zase ano. přeji mnoho štěstí.

Další články

Další články autora