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

Smazaný obsah Přidaný obsah
Zrušena verze 86728 od uživatele 188.116.127.146 (diskuse)
Řádek 37:
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ý, 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žiobdrží 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>.
 
Protože takovéto virtuální objekty jsou jen vlastností nějakého reálného objektu, nemohou se samy přesouvat (nanejvýš spolu s objektem, jehož jsou součástí). Můžeme na ně sice zkoušet aplikovat základní příkazy pro přesun objektů, jako třeba <code>vezmi</code>, a protože tyto příkazy jsou definovány přímo v objektu hráče, dočkáme se specifické reakce, většinou však tato reakce sestává jen z hlášky <code>To bohužel nejde.</code> Jen v ojedinělých případech můžeme pokusem o vzetí virtuálního objektu skutečně dostat nějaký objekt do inventáře — pak jsme ovšem nevzali virtuální objekt (ten zůstane na svém místě), nýbrž nový reálný objekt, který byl vygenerován reálným objektem, jehož součástí virtuální objekt je.<ref>Příkladem takové akce je trhání plodů z ovocných stromů a keřů, s nímž se můžeme setkat v dalších oblastech hry.</ref>