Programování pro hračičky/Andělé/Lekce 2
Tato stránka je součástí kurzu: | |
středoškolská | |
Příslušnost: skupinová |
Pojmy ke zopakování
editovat- objekt, vlastnost, metoda
- třída, instance třídy, dědění vlastností a metod
Probrání domácího úkolu
editovatSrovnejme si různé navržené objekty: Jsou dostatečně popsány jejich vlastnosti a metody? Je z popisu vidět, s jakými jinými objekty ve hře mají některé vlastnosti nebo metody společné, tedy jakou třídu by mohly či měly dědit? Jak se po srovnání s jinými objekty díváme na vlastní navržený objekt? Je moc složitý, moc jednoduchý, příliš málo přínosný pro hru?
Během dalších několika lekcí bychom měli dospět k tomu, že si svůj navržený objekt skutečně se vším všudy naprogramujeme. Nyní ještě máme možnost zvolit si bezbolestně úplně jiný objekt, pokud s tímto svým prvním návrhem nejsme spokojeni. Zvažujme proto dobře.
Programátorský přístup do hry
editovatProgramátorem ve hře Prahy je možno se stát dvojím způsobem. Standardní postup by znamenal dosáhnout ve hře 100% herní zkušenosti (zjistitelno příkazem stav
). Pro účely našeho kurzu je možno se stát programátorem též mimořádně v domluvě s uživatelem Mmh (studující, kteří se účastní reálných hodin, se domluví tam, případní samouci na jeho diskusní stránce nebo na diskusní stránce svého běhu kurzu).
Poté, co jste povýšili do stavu programátorského (ve hře „andělského“), získali jste rovněž přístup na herní server přes FTP nebo SSH. S využitím obdržených přístupových údajů se pomocí dvoupanelového správce souborů (např. FileZilla, WinSCP nebo Midnight Commander) připojte k hernímu serveru a v protějším panelu si otevřete svůj pracovní adresář na lokálním počítači. V tomto pracovním adresáři můžete zpracovávat soubory svým oblíbeným programátorským editorem (např. PSPad, Notepad++, Emacs nebo Kate) a pomocí správce souborů je přesouvat na server Prahů, kde se teprve mohou projevit ve hře.
Generickým kódováním znaků v Prazích je ISO-8859-2.[1] Ve většině případů bude proto potřeba, abyste si v programátorském editoru, který budete používat, toto kódování nastavili (Emacs by kódování ISO-8859-2 měl rozpoznat sám). Pokud si nejste jisti, zda je nastavení provedeno správně, ověříte to níže, až si ve svém editoru otevřete první z Prahů stažený soubor.
Andělský stav ve hře
editovatJakmile se přihlásíme do hry jakožto andělé, máme k dispozici celou řadu dalších příkazů a zcela odlišný přístup k interním informacím herního systému. Základní přehled o těchto nových možnostech získáme příkazem pomoc
, který pro anděly funguje jinak než pro běžné hráče (a upozorní nás též na nová témata nápovědy, z nichž nejdůležitější jsou pomoc andělská
a pomoc aura
).
Na rozdíl od běžných hráčů má anděl přístup do části hry nazývané nebesa. Jedná se především o nebeskou aulu, z níž vedou cesty do oddělení věnovaných rozličným oblastem hry, ale též do andělského kursu. Anděl rovněž získá svůj domovský adresář v mudové knihovně (pokud se ve hře jmenuje třeba Andělíček, bude mít domovský adresář /w/andelicek
[2]) a v něm umístěnou pracovnu, do které se může kdykoli přemístit příkazem domů
.
Anděl má k dispozici též různé pracovní nástroje, které vystupují jako objekty ve hře. Zcela automaticky by se měla v jeho vybavení ocitnout andělská aura a Podprahová encyklopedie. Pokud by mu z nějakého důvodu chyběla aura, získá novou příkazem aura
, pokud by mu chyběla encyklopedie, získá ji v nebesích v oddělení věci
. Podrobnou nápovědu k zacházení s aurou je možno získat příkazem pomoc aura
a dalšími nápovědnými příkazy, které jsou zmíněny v jeho textu. Nápovědu k encyklopedii získáme, když spustíme encyklopedii příkazem encyklopedie
(nebo zkráceně enc
) a pak zadáme 1
pro vstup do první části, jíž je právě nápověda.
Anděl rovněž vnímá své okolí jinak než běžní hráči. Nastavení svého vnímání může změnit pomocí příkazu zrak
(viz pomoc zrak
). Další nastavitelné andělské mimořádnosti je možno najít ve zvláštní sekci příkazu nastavení
a v příkazu anastavení
.[3]
Stavíme a propojujeme místnosti
editovatStáhněme si soubor, v němž je uložen programový kód[4] naší andělské pracovny (v našem příkladu /w/andelicek/workroom.c
, resp. /mud/lib/w/andelicek/workroom.c
), do pracovního adresáře na lokálním počítači a otevřeme jej ve svém programátorském editoru.[5] Jednotlivé části kódu jsou velmi podrobně popsány tzv. programátorskými komentáři, což jsou části textu buď uzavřené do dvojic znaků /*
a */
, nebo řádky nebo části řádků začínající dvojznakem //
.
První změna
editovatPročtěme si tyto komentáře a pokusme se podle nich změnit něco v popisu místnosti. Najdeme si například funkci set_long(),
[6] která nastavuje vlastnost long
, tedy tzv. dlouhý popis místnosti, který ve hře vidíme, když se v místnosti rozhlédneme.[7] Zkusme něco v tomto textu změnit a soubor uložme.
Změněný soubor je tímto uložen zprvu jen na našem lokálním počítači. Nyní ho musíme pomocí správce souborů nahrát opět na jeho místo na veřejně přístupném serveru Prahů. Ovšem ani tím se naše změna ještě nedostane do hry, protože změněn je zatím jen soubor na disku serveru, zatímco objekt místnosti je načten do operační paměti serveru stále ve své staré podobě. Aby se změna projevila ve hře, musíme objekt místnosti obnovit, tedy nechat jej znovu vytvořit (a načíst do paměti) podle změněného souboru na disku. To uděláme ve hře andělským příkazem obudiž zde
(nebo zkráceně obu zde
).
Po zadání tohoto příkazu mohou nastat tři možnosti:
- Naše změna je řádně provedena, místnost má nový dlouhý popis, který vidíme jednak hned po obnovení, jednak kdykoli znovu po zadání příkazu
rozhlédni se
. - Žádná změna se neprojevila. Z výše uvedeného postupu jsme tedy buď vynechali některý krok, nebo jsme změněný soubor nahráli jinam, než kde se má nacházet (v adresáři
/w/našeandělskéjméno
, resp./mud/lib/w/našeandělskéjméno
). Zjistíme, která z těchto možností nastala, a po správném umístění souboru místnost opět obnovíme. - Vypsalo se nám hlášení o chybě a ocitli jsme se mimo prostor a čas (či programátorsky přesněji v implicitní místnosti
/room/void
). To znamená, že jsme při provádění změny v textu udělali nějakou chybu, která učinila programový kód místnosti nesrozumitelným pro herní ovladač — například jsme omylem smazali jednu z uvozovek obklopujících text dlouhého popisu, nebo nám naopak někde nějaká uvozovka přebývá, nebo nám chybí některá ze závorek či závěrečný středník a pod. Pak musíme tuto chybu najít (k tomu nám pomůže ve vypsaném hlášení chyby číslo řádku, na němž ovladač zjistil, že programu nerozumí) a opravit, a potom opravený soubor přesunout na herní server a opět načíst. K tomu nám stačí se do opravené místnosti přesunout — chybou se vymazal objekt místnosti z operační paměti, takže příkazemdomů
, resp.cíl -
si vynutíme jeho opětovné vytvoření podle programu uloženého na disku.
Další jednoduché vlastnosti
editovatJakmile se nám podařilo změnit dlouhý popis místnosti, můžeme podobným způsobem zkoušet měnit další jeho vlastnosti, například noise
, smell
a feel
. Ty nejsou v andělské pracovně zprvu vůbec nastaveny, tedy musíme vložit do zdrojového kódu hned za pozměněný příkaz set_long("...");
celý nový příkaz, například set_smell("Smrdí to tady!");
[8] — při troše štěstí při tom hned uděláme několik chyb, jejichž následným hledáním si výborně vštípíme syntaxi jazyka LPC, tedy co se jak správně píše, aby tomu herní ovladač rozuměl.
Ohledně každé takovéto funkce můžeme hned konzultovat svou encyklopedii, konkrétně zadat encyklopedií definovaný příkaz ?
následovaný jménem funkce, tedy třeba ? set_smell
. Encyklopedie nám pak vypíše dokumentaci k příslušné funkci.
Průchody
editovatO něco složitější vlastností místností je jejich vzájemné propojení. Každá místnost si vede seznam směrů, jimiž se z ní dá odcházet, a k nim jednak seznam místností, do kterých se těmito směry dojde, jednak seznam příznaků určujících, zda je daný směr viditelný v popisu místnosti, zda je daným směrem vidět do sousední místnosti a pod.
Průchody je možno nastavit najednou funkcí set_exits()
, resp. set_exit()
v případě jediného průchodu, ovšem také je dodatečně přidávat funkcí add_exits()
, resp. po jednom funkcí add_exit()
. Tato poslední funkce je pro svou jednoduchost použita v kódu andělské pracovny.[9]
Správné používání těchto funkcí můžeme opět konzultovat s encyklopedií, tedy zadat ? add_exit
a pod., a přečíst si dokumentaci těchto funkcí či dalších funkcí s nimi spojených. Pro první pokus však stačí okopírovat řádku, v níž je definován například průchod do auly, a změnit jak směrník místnosti, tak udaný směr, tedy třeba:
add_exit("/w/jinyandel/workroom","západ");
Tímto způsobem si nyní můžeme ze své pracovny udělat několik průchodů do jiných místností. Všimněme si, že průchody nejsou automaticky obousměrné, tedy můžeme klidně procházet ze své pracovny na svá oblíbená místa ve hře, aniž by se na dotyčných místech něco změnilo a aniž by někdo mohl projít odtamtud do naší pracovny.
Další místnost
editovatNyní můžeme zkusit založit další místnost. Nejsnáze to uděláme tak, že zkopírujeme ve svém pracovním adresáři soubor workroom.c
třeba na pokus.c
, a v něm pak změníme všechna nastavení tak, aby se hodila pro novou místnost, jak ji chceme mít. Přebytečné části programového kódu (i komentáře určené pro začínající anděly) vymažme, aby nepletly případné další spolupracovníky. Sice je nepravděpodobné, že další spolupracovníci budou předělávat právě tuto naši pokusnou místnost, ale učme se od začátku pracovat jako ve skutečnosti, kdy musíme spolupracovat s týmem a myslet na ty, kdo přijdou po nás.
Nově založenou místnost pak oboustranně propojme se svou pracovnou (a to při zachování prostorové logiky, tedy jdeme-li z pracovny do druhé místnosti směrem na sever, měli bychom se vracet zase na jih) a vyzkoušejme, zda průchod funguje.
Poznámky
editovat- ↑ Kódování ISO-8859-2 má oproti Unicode tu programátorskou výhodu, že počet znaků řetězce odpovídá počtu bajtů, pročež funguje vestavěná funkce LPC vracející délku řetězce.
- ↑ Všechny směrníky budeme uvádět v podobě, v níž se jeví zevnitř hry, resp. přes FTP. Při spojení přes SSH je nutno před takový směrník předřadit ještě
/mud/lib
, tedy například/mud/lib/w/andelicek
. - ↑ Některé příkazy, navazující na běžné hráčské nebo systémové příkazy a rozvíjející je pro potřeby andělů, jsou pro jednoduchost (byť jazykově poněkud nezvykle) pojmenovány pomocí předpony
a-
(„a“ jako „anděl“). Viz též příkazyahřímej
,arci
,amore
,acd
aj. - ↑ Synonymě se používá označení „programový kód“, „zdrojový kód“, „zdrojový text“, a v kontextu též jen „zdroj“ či „program“.
- ↑ Zde si ověříme, zda máme v editoru správně nastaveno kódování znaků ISO-8859-2. Pokud ano, vidíme v textu správné české znaky (včetně š, které najdeme například ve slově „krášlí“), pokud ne, pak vidíme místo některých českých znaků znaky jiné.
- ↑ Závorkami budeme dávat najevo, že identifikátor, který jsme napsali, je jménem funkce. V textu programu se pak mezi tyto závorky často vpisují ještě parametry funkce. Tak je tomu i v tomto případě, kdy mezi závorkami funkce
set_long()
vidíme text uzavřený do programátorských uvozovek — celý tento text (včetně případnéhoname+
nebo+name+
, které najdeme v různých verzích základní andělské pracovny) je parametrem této funkce, a uvozovky sdělují, kde začíná a kde končí. - ↑ Až na několik odůvodněných výjimek dodržujeme v programových knihovnách Prahů konvenci, že funkce
set_něco
nastavuje vlastnostněco
. - ↑ Středníkem oddělujeme jednotlivé příkazy, z nichž se program skládá.
- ↑ Zde si můžeme všimnout další konvence v pojmenovávání funkcí: zatímco funkce
set_něco
nastavuje vlastnostněco
, funkceadd_něco
zvyšuje hodnotu nebo přidává k vlastnostiněco
. Taková funkce je samozřejmě smysluplná jen pro některé vlastnosti.
Úkoly do příští lekce
editovat- Podle libosti si ještě vylepšeme svou pracovnu a zakládejme, propojujme a vylepšujme si další místnosti ve svém adresáři.
- Postupně si čtěme andělskou nápovědu a případně též vyzkoušejme ten či onen příkaz. Pokud něčemu nerozumíme, buď to nechme na příště (časem si všechno vysvětlíme), nebo se zeptejme na diskusní stránce k této lekci, nebo použijme vnitroherní komunikace a konzultujme s jinými anděly.
- Prolistujme si zběžně Podprahovou encyklopedii. Ne, nesnažme se ji číst celou, ale podívejme se, jaké hlavní části má, a vyzkoušejme si různé druhy nápovědy, které nabízí.
- Projděme si andělský kurs, do něhož vede vchod z auly i z každé nové andělské pracovny.
- Ve schráně v aule najdeme i nějakou tu andělskou literaturu, kterou si můžeme začít pročítat. Mělo by tam být šest knih (Kniha 'Kdo je kdo', Andělský Kodex, Angelologie pro smrtelníky, Prolegomena, Paralegomena, Svitek o vzdělávání andělů). Kdyby nějaká chyběla, můžeme zkusit příkaz
obudiž zde
, ten by měl aulu uvést do počátečního stavu. Prolegomena a Paralegomena krom toho můžeme získat z pantomatu v oddělenívěci
. - Případně změňme nebo upřesněme svou představu o předmětu, který jsme vymysleli za domácí úkol z minulé lekce. Od příští lekce ho postupně začneme vytvářet.