Píšeme textovku na Atari v Basicu – objekty
Minule jsme si povídali o lokacích, dneska se zaměříme na objekty, jak ty statické, tak i ty dynamické. Píšeme hru v Atari Basicu a uděláme s ji jednodušší. Objekty, co půjdou v naší hře zkoumat, popřípadě sebrat se nám v popisu lokace budou ukazovat třeba až pod popisem lokace. Nejdříve tedy hra vypíše herní situaci a následně zobrazí dostupné objekty v dané lokaci.
Jasně, je to jednodušší způsob programovaní, ale je to lepší i pro hráče. Začínající programátoři se dopouští jednoho nešvaru, nebo chyby. Herní objekty umístí do dané lokace pomocí nějaké proměnné, v našem případě je to mrazivý démon. Dejme tomu že proměnná DEMON=5, to znamená, že démon se nachází třeba v lokaci s číslem 5. Jasně, je to supr, víme, že démon je tam, když ho sebereme tak mu změníme číslo a máme ho u sebe, když ho položíme, tak se mu také změní číslo na aktuální lokaci.
My, co jsme už pár her napsali v tom Basicu a nejenom v něm, jsme oblevili sílu polí, je fakt, že si budete asi muset někde mimo držet tabulku čísel objektů, jak i čísel lokací, ale na druhou stranu vám to pak usnadní psaní hry. Takže co jsou ta pole? Soubor proměnných očíslovaných za sebou, které mají rozdílné hodnoty, Atari Basic umí pole jen číselné, což je škoda, kdyby uměl i řetězcové, tak se dá hra programovat trošku líp.
Když jsem už zmínil démona, tak si ho pojďme nadefinovat. Založíme si pole cca o 100 objektech příkazem DIM P(100), teď už víme, že můžeme mít ve hře jen 100 objektů, budeme si tuhle skutečnost tedy muset hlídat a nebo, si uděláme pole dynamické a budeme ho definovat jen na skutečný počet objektů, ze začátku nám bude krapítek trvat inicializace hry, ale to zase tolik vadit nebude.
Rozhodíme si naše demo objekty do dvou lokací, máme třeba lokaci Recepce, což je číslo 1 a lokaci číslo 2 a to bude třeba bar. V baru bude na stole slánka. Na recepci bude zevlovat démon. Démon bude první objekt a slánka bude druhý objekt, pak tedy definice pole bude znít P(1)=1:P(2)=2.
Když jsem ten svůj engine vymýšlel, tak mně napadlo, že asi bude problém se sbíráním objektů, co když třeba objekt 1 v našem případě démon, nepůjde sebrat? Můžete to ošetřit buď podmínkou: Když sbírám objekt P(1) nejde sebrat. A nebo druhá varianta, objekty co nejdou sebrat, mají zápornou hodnotu čísla lokace. Engine pozná, že daný objekt nejde sebrat a může vypsat nějakou veselou hláškou, že toho démona prostě nemůžete sebrat. Samozřejmě, že hodnoty daných polí si můžete měnit, jak je libo, třeba démona posypete solí, objekt sůl zmizne. Rozuměj, soli dáte jinou hodnotu, já osobně používám hodnoty 2000, daný objekt je použit. Když má třeba hodnotu 0 – objekt nebyl ještě objeven. Nebo když má hodnotu 1000 tak daný objekt má hráč v inventáři atd. Fantazii se meze nekladou.
Máme tedy nějak nadefinované objekty, jak zobrazíme jejich popisky? Opět jsem se nechal inspirovat Chrámem zkázy, kde jsou objekty definované v datech a engine při zobrazení lokace zjistí jednoduchou smyčkou, jestli je daný objekt v lokaci a pokud je, skočí rovnou na správný řádek s daty načte jméno objektu a přilepí ho k textu. Na stejném principu funguje i zobrazení objektů, které hráč nese v inventáři, inventář je vlastně také lokace, když se to tak vezme.
Mám tedy zadefinován datový řádek DATA demon,mrazivy,mrazivý démon,-1
Kde první dva popisy slouží ke kontrole řetězce sebrání objektu, nebo jeho prozkoumání při vstupu z klávesnice, všimněte si, jsou oba bez diakritiky a následuje jeho český název a pak identifikace v lokaci 1 a ten mínus značí, objekt nejde sebrat.
Takhle si zadefinujete objektů kolik potřebujete, nechte si mezi datovými řádky větší mezeru, bude se vám to hodit, když budete zkoumat herní objekty, jasně, kdyby bylo místa víc, dá se dopsat použití daných objektů, rozhovory s postava a tak dále.
Buď si budete počet všech objektů počítat ručně – což může vést k chybám a nebo na začátku hry, si spočítáte kolik máte datových řádků, respektive kolik máte objektů, nadimenzujete pole proměnných a pak jen do daného pole načtete startovní pozici objektů a nemusíte se o nic starat.
Co se týče základní definice s objekty, tak to asi bude pro dnešek všechno, příště si povíme něco o parseru zadaných příkazů z klávesnice.