Programování pro hračičky/Měniči/Lekce 2: Porovnání verzí

Smazaný obsah Přidaný obsah
úprava odkazů a kategorie
Řádek 35:
Když se pokoušíme zacházet s různými objekty, narazíme na případy, kdy se s nějakým objektem nedá provést něco, co u jiných objektů téhož druhu bylo možné. Například jsme si na pár oknech vyzkoušeli, jak reagují na příkazy <code>otevři</code>, <code>zavři</code> a <code>zaklepej</code> — v jednom případě šlo třeba okno skutečně otevřít, ve druhém případě nám třeba sdělilo, že otevřít nejde, protože je zarezlé, ale bylo každopádně jasné, že příkaz je v objektu okna definován — ale pak najednou narazíme na okno, které na všechny zmíněné příkazy reaguje jen obecným <code>Prosím?</code>.
 
Takovéto dvojí chování oken (nebo jiných objektů, třeba dveří, židlí, skříní apod.) bývá způsobeno tím, že objekt, který nereaguje na očekávané příkazy, není reálný,<ref>Pohybujeme se ovšem ve virtuálním světě, tedy i „reálné“ objekty jsou vůči našemu reálnému světu virtuální, tedy reálně v něm nejsou. Jsou však reálné v rámci virtuálního světa hry, zatímco virtuální objekty jsou i v něm virtuální, tedy nenacházejí se v něm, ale hra se chová, jako by se nacházely.</ref> nýbrž tzv. ''virtuální objekt'' (též ''detail'', nebo z angličtiny ''v-item'' či ''vitem'').
 
Zatímco objekty, o nichž jsme dosud mluvili, jsou samostatné a ucelené programové entity, virtuální objekty jsou vlastně jen do jiných objektů vložené záznamy o vlastnostech objektů, které ''by mohly'' být, ale nikdo je nevytvořil. V případě našeho nereagujícího okna je tímto „jiným objektem“ místnost, která má mezi svými vlastnostmi uloženo, že je v ní staré okno v bíle natřeném dřevěném rámu, na omak trochu zaprášené. Pokud pak hráč zadá příkaz <code>prohlédni si okno</code>, pak jeho hráčský objekt, v němž je příkaz <code>prohlédni</code> definován, sice nenajde žádný reálný objekt, jehož by se tato věta mohla týkat, ale od místnosti dostane zprávu, že má popis zmíněného okna, a ten zní: <code>Staré okno v bíle natřeném rámu. Léty nepoužívání už zatuhlo ve své zavřené poloze natolik, že ani při nejlepší vůli nejde otevřít.</code> Hráčský objekt pak hráči pošle tento popis úplně stejně, jako by v místnosti byl samostatný objekt okna. Pokud však hráč zadá příkaz <code>zaklepej na okno</code>, pak obdrží jen hlášku <code>Prosím?</code>, protože ani hráčský objekt sám, ani místnost s virtuálním oknem nedefinuje příkaz <code>zaklepej</code>.