Jak na textovky aneb lokace a zkoumání 2. díl
Jak jsem už slíbil, tak je tu pokračování seriálu o textových hrách. Dnes si povíme něco o místnostech, respektive herních lokacích a zkoumání předmětů. Nejprve si povězme jak by to mělo v takové hře fungovat a jak dochází k pohybu po jednolivých lokacích.
Představme si takovou čtvercovou síť kde jsou umístěny jednotlivé lokace, každá lokace obsahuje číslo, dejme tomu od jedné do tisíce, v každé lokaci je nastaveno kam je možno jít, tzn. sever, jih, východ a západ. Tuhle čtvercovou síť můžeme pro jednoduché hry udělat dvou rozměrnou, nebo pro složitější hry třírozměrnou, každá místnost bude mít tedy vlastní souřadnice. Pro názornost například osu X osu Y a pro ty třírozměrné hry osu Z. Každá lokace se tedy nachází na těchto souřadnicích, při pohybu v jednotlivých směrech dochází v enginu hry k přičítání či odčítání jednotlivých souřadnic. Čili pro pohyb na sever připočítáme k ose Y hodnotu +1 pro pohyb na jih hodnotu pro osu Y -1 a tak to pokračuje v ostatních směrech. Samozřejmě pro pohyb nahoru či dolů se musí pracovat s osou Z, mnohdy se to hodí, když například hra nutí hráče šplhat po stromech, popř. sestupovat na dno propastí a strží. Takže engine sám obstará a zjistí si jakou místnost má zobrazit pro danou souřadnici.
Pro účely pokládání a sbírání předmětů je docela vhodné si jednotlivé místnosti číslovat, například proměnnou M, o předmětech se rozepíšu v dalších dílech tohoto mini seriálku. Samozřejmě bude nutné aby každá jednotlivá lokace obsahovala informaci do jakých směrů je možné se vydat, čili si musíme vytvořit směrové proměnné, jako třeba S = true, z dané lokace je možné jít severním směrem. A tak pořád dokola.
Po vypsání popisu lokace, doporučuji menší zjednodušení pro hráče a to, že popis lokace, nebo respektive objekty v popisu lokace, které půjdou prozkoumat hráčem, zvýraznit, buďto tučně, či jinou barvou, která nám bude ladit do hry. Pro názornost takový malý příklad:
Stojíš na ulici a pozoruješ dění okolo sebe, respektive nic, protože se tu vůbec nic neděje. Nedaleko se nachází zastávka MHD s malým přístřeškem, který má chránit cestující, když čekají na svou linku před větrem a deštěm. Budka má jen jednu stěnu a ta je polepena různými plakáty a ty jsou zase počmárané od vandalů. V budce je lavička, která toho má už dost za sebou.
Ze zatáčky se vyřítil strašlivou rychlostí autobus MHD a se skřípěním brzd zastavil u zastávky. Dveře se otevřely a z nich vypadlo několik cestujících na zem. Řidič autobusu čeká až nastoupíš, vypadá poněkud netrpělivě.
Pak bude jasné, že hráč může prozkoumat „ulici“, „stěnu“, „plakáty“, „lavičku“ a „autobus“.
Tímto se tedy dostáváme k od místností k prozkoumání jednotlivých objektů v dané lokaci. Nazvěme si jej pro naší potřebu zkoumáním jednoduchým. Protože budeme potřebovat pro hru i zkoumaní objektů složitější, neb budeme muset někde poschovávat haldu předmětů, se kterými může hráč manipulovat, aby to byla pořádná textová hra. Vytvořme si tedy nějakou funkci, která bude testovat, jestli se daný objekt vhodný k průzkumu nachází na dané lokaci, proto jsme si také naše lokace označili čísly a proměnnou M, vytvářet si k tomuto účelu pole proměnných se mi zdá značně kontraproduktivní. Čili náš hráč napíše do příkazového řádku: „prozkoumej ulici“ systém „sešrotování příkazů“ pozná, že se jedná o příkaz k průzkumu objektu, zjistí si zdali daný objekt na dané lokaci existuje a když je to pravda, tak vyhodí hlášku k prozkoumání, např. Tuto: „Je liduprázdná, když nepočítáme tebe. Vypadá to tu na docela poklidné místečko.“
Pokud naše funkce průzkumu nenajde odpovídající objekt, tak vyhodí hlášku ve smyslu, že hráč zkoumá naprostou kravinu. Sofistikovanější engine, by dokázal vyhodnotit o jaký objekt se jedná a když například bude hráč v lese, tak mu může odpovědět, něco ve smyslu, že jako v lese žádnou ulici asi nenajde nebo tak nějak.
Samozřejmě nesmím zapomenout, že náš výpis lokace bude zahrnovat možné směry pohybu, tak aby hráč nemusel zkoušet všechny světové strany, no vpodstatě závisí na hře, může to být třeba i tak, že zpočátku nemá hráč kompas, takže dokud jej nenajde tak mu to žádné směry v lokaci zobrazovat nebude, jak tomu například bylo ve hře Ataristův protiútok.
Dále by se ve výpisu popisu lokace měli objevit všechny „sebratelné“ předměty, ale o tom až příště.
Prosím jak se má v jazyce C na operačním systému windows 7 ultimate nstavit celá obrazovka jako konzole a jak obarvit text? Dškuji za odpověď
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd,SW_SHOWMAXIMIZED);
A barva toho textu finglaku?
lazy: RTFM!