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

Smazaný obsah Přidaný obsah
→‎Příkazy a metody: přesun do skladu
Řádek 19:
 
Je-li příkaz takto definován v objektu, se kterým se má provádět, může se stát, že týž příkaz v různých situacích bude znamenat úplně jiný úkon. Například páka umístěná u nějakého stroje může nabízet příkaz <code>zatáhni<code>.<ref>Stejně jako příkazy smyslového zkoumání se dají zadávat mnoha synonymy — například místo <code>očichej</code> můžeme použít též varianty <code>očuchej<code>, <code>očichám</code>, <code>očuchám</code>, a s jinou pádovou vazbou rovněž <code>čichni</code>, <code>čuchni</code>, <code>čichnu</code>, <code>čuchnu</code>, <code>přičichni</code>, <code>přičuchni</code>, <code>přičichnu</code>, <code>přičuchnu</code>, <code>přivoň</code>, <code>přivoním</code> — nabízejí zpravidla i příkazy definované jednotlivými objekty vícero variant. V případě příkazu <code>zatáhni<code> to budou nejspíš například varianty <code>zatáhnu<code>, <code>zatahej<code> a <code>zatahám<code>.</ref> Pokud pak postava stojící u páky zadá <code>zatáhni za páku<code>, může daný stroj spustit. U vchodu do nějakého domu zase může být šňůra, která nabízí stejný příkaz <code>zatáhni<code>, avšak zatahání za ni nespustí žádný stroj, nýbrž rozezní domovní zvonek.
 
== Příkazy a metody ==
 
Abychom pochopili princip zacházení s herními objekty ještě o něco přesněji, musíme nahlédnout hlouběji do nitra objektů. Jak jsme si řekli výše, všechny akce s objekty se provádějí tak, že se objektu dá pokyn, aby spustil nějakou funkci, tedy určitý logicky ucelený kousek svého programového kódu. Takovéto na pokyn zvenčí spustitelné funkce nazýváme ''metody'', a o pokynu k jejich spuštění hovoříme jako o ''volání''.<ref>V programovém kódu objektu se mohou vyskytovat — a zpravidla také vyskytují — i funkce, které metodami nejsou, tedy nejsou určeny k tomu, aby se popsaným způsobem volaly zvenčí.</ref>
 
Jsou čtyři metody, které se v objektu volají automaticky:<ref>Přesněji řečeno volá tyto metody herní ovladač neboli driver, tedy program, který udržuje celou hru v chodu.</ref>
 
*Bezprostředně po vytvoření každého objektu se v něm zavolá metoda <code>create()</code>.<ref>Aby se názvy funkcí odlišily od jiných názvů, píší se za ně závorky. Mezi těmito závorkami případně mohou být i parametry funkce, ale tím se budeme zabývat až později.</ref> Ta zpravidla provede základní nastavení objektu — tedy definuje jeho vzhled, povrch, zápach, zvuk, hmotnost, cenu atd.
*V pravidelných časových odstupech (asi 40 minut reálného času) se v každém objektu zavolá metoda <code>reset()</code>. Ta zpravidla obnovuje ty vlastnosti objektu, které se mohou změnit následnou činností hráčů — například rostou-li na jabloni jablka, která mohou hráči otrhávat, může tato metoda obsahovat opětné doplnění jejich počtu.
*Při každém bezprostředním setkání objektu s živou bytostí se volá metoda <code>init()</code> — živou bytostí zde rozumíme objekt, kterému bylo povoleno vykonávat příkazy, což jsou typicky jednak hráči, jednak nehráčské postavy jako třeba Josef v úvodní místnosti hry, a bezprostředním setkáním zas míníme přesun objektu do inventáře živé bytosti, přesun objektu do inventáře jiného objektu, v němž se nachází živá bytost, nebo přesun živé bytosti do inventáře objektu. V této metodě se zpravidla definují příkazy, které mají být při zacházení s objektem živé bytosti k dispozici.
*Před zničením objektu (tedy jeho odstraněním ze hry) se v něm zavolá metoda <code>remove()</code> (či naopak, zavolání metody <code>remove()</code> způsobí zničení objektu, v němž byla zavolána). Ta se zpravidla stará o to, aby objekt dokončil nezbytné započaté akce, případně uložil nějaká data na disk.
 
Objekty, s nimiž se dá zacházet specifickými příkazy, tedy definují tyto příkazy typicky ve funkci <code>init()</code>. Pokud tedy například objekt pochodně definuje příkazy <code>rozsviť</code> a <code>zhasni</code>, pošle se definice těchto příkazů objektu živé bytosti, která se s pochodní setkala, a tato živá bytost pak může těchto příkazů využívat. Jakmile se ovšem bytost od objektu zase vzdálí, příkazy se pro ni stanou opět nedostupnými.
 
Příkazy jako <code>rozhlédni se</code>, <code>očichej</code> nebo <code>vezmi</code>, které má mít živá bytost k dispozici stále, a to navíc pro sebe (a ne pro jiné živé bytosti, s nimiž se setká), naproti tomu nemá smysl definovat ve funkci <code>init()</code>, nýbrž ve funkci <code>create()</code>, tedy ve chvíli, kdy objekt právě vznikl a ještě nevstoupil do hry, takže definice příkazů pošle jen sobě jakožto jediné přítomné živé bytosti.<ref>Přesně vzato to takhle funguje u nehráčských bytostí, které si své základní příkazy definují skutečně ve funkci <code>create()</code>. Hráčský objekt — vytvářený při každém nalogování hráče a opět ničený při odlogování — si je definuje až ve funkci <code>setup_player()</code>, která se volá těsně po <code>create()</code> a která mj. načítá uložený stav hry z minula.</ref>
 
{{doplnit}}
 
druhá dokáže hodnoty těchto vlastností vypsat (''query''), další je umí změnit (''set'')
 
{{doplnit|poznámku o inventářích během získání a ztráty místního příkazu}}
 
== Reálné a virtuální objekty ==