Programování pro hračičky/Andělé/2012/Domácí úkol 5

Z Wikiverzity
Jak používat klasifikační nálepkuTato stránka je součástí kurzu:
středoškolská
Příslušnost: skupinová

Toto je stránka vytvořená v rámci již proběhlého kurzu a nyní sloužící k jeho archivaci. Tuto stránku již prosím needitujte! Pokud se chcete do kurzu zapojit, pak vyhledejte aktuální běh na hlavní stránce kurzu či se zeptejte v příslušné diskusi.


Byť domácí úkol k 5. lekci spočívá v programování v rámci mudu a nepotřebuje být přepisován sem, můžete si své problémy a nápady odložit též zde, nebo se tu o nich poradit.

Jako u minulých úkolů si prosím udělejte vlastní kapitolu, tedy oddělte své zápisky od předchozího textu nadpisem se svým jménem.

Waran (Slenderman aka Jan Horák)[editovat]

Nastavení hlášek pro netradiční směry[editovat]

Jak tak zkouším virtual_compilerem generovat 4D prostor, narazil jsem na další hloupý problém. Už mi nestačí totiž šest základních směrů (sever, jih, východ, západ, nahoru, dolů), a tak jsem zavedl další dva - oranžová a modrá. Problém je však s hláškami. Odchodovou hlášku jsem už upravil pomocí set_exit_msg. Nevím ale jak to udělat, že když mám nastaveno (pomocí EXIT_VIEW), že jde koukat skrz průchody, abych hráče viděl směrem oranžová, a ne "0". Co zatím brouzdám po nápovědách, ne a ne na to narazit.

Aha. No, tak to bude možná, obávám se, na zásah do programových knihoven. Myslím, že tohle je někde v modulu /i/living/eyes... Zkusím na to kouknout zítra večer nebo v pondělí, pokud to stihnu, a popřemýšlím, co by se s tím dalo dělat. --Mmh (diskuse) 8. 12. 2012, 19:55 (UTC)
Jinak tedy, nakolik to chápu z naší rozmluvy, jedná se o čtyřrozměrný prostor, tedy k osám sever-jih, východ-západ a nahoru-dolu přibývá nová. Vlastně bychom mohli zkusit rozšířit programové knihovny tak, aby šly další dimenze udělat snáze, ale pak mám dojem, že oranžová-modrá možná není úplně ideální označení. Spíše bych se klonil k něčemu jako minulost-budoucnost. Také by pak bylo potřeba rozmyslet všechny tvary (sever, na sever, k severu, ze severu, od severu, na severu, severní -- a teď to odpovídající třeba pro "oranžová", nebo pro "budoucnost"). --Mmh (diskuse) 8. 12. 2012, 19:59 (UTC)
S označením budoucnost/minulost problém nemám (oranžová a modrá byla první kombinace slov, jejihž první písmena se ještě nevyskytují ve směrové zkratce). Jinak koukám, že Charles Howard Hinton už nové směry ve čyřrozměrném prostoru nazval, a to ana a kata. Jenom nevím, jak to v češtině ohýbat...
--Waran (diskuse) 9. 12. 2012, 10:57 (UTC)
Ana a kata je prostě řecky nahoru a dolů, takže u mne tedy nic moc. Samozřejmě by z toho něco odvodit šlo (třeba to rozšířit na anoda a katoda, tedy řecky cesta nahoru a cesta dolů, a pak by se chodilo na anodu, od anody, foukal by anodní vítr atd.). Mnou plácnutá minulost a budoucnost mají také tu výhodu, že zkratková písmena nekolidují s jinými směry. Dále mne napadá Pratchettovský střed a okraj (ovšem s by kolidovalo), pak obecné tam a onam, případně kupředu a zpět, nebo také hladce a obrace. Nějaké další nápady? --Mmh (diskuse) 9. 12. 2012, 15:52 (UTC)
Hned sem dodám ten nápad z naší rozmluvy, než to zapomenu: přídech a úvan. --Mmh (diskuse) 9. 12. 2012, 16:37 (UTC)
Pratchettovské je i posměrně a protisměrně, to se nám ale moc nehodí. Přídech a úvan zní zajímavě, ale vítr by pak byl úvanní nebo jaký?--10. 12. 2012, 21:27 (UTC), Utar (diskuse)
Jo, přídešní a úvanní. --Mmh (diskuse) 10. 12. 2012, 21:47 (UTC)
Beru. --10. 12. 2012, 23:01 (UTC), Utar (diskuse)
Jsem též za. --Waran (diskuse) 11. 12. 2012, 19:43 (UTC)
Ještě bych dal do úvahy, zda by nebylo lepší to prohodit, tedy údech a přívan, protože slovo přídech má už svůj význam. --Mmh (diskuse) 12. 12. 2012, 01:33 (UTC)
(Nijak zvlášť pádný důvod to ovšem není, východ i západ mají v jazyce také jiné významy než jen světové strany.) --Mmh (diskuse) 12. 12. 2012, 01:34 (UTC)
To mne taky napadlo, prohodit to. Ale nemohl jsem se rozhodnout, která verze je lepší, tak jsem to sem ani nepsal. Spíš bych se pak rozhodoval podle toho, jaké zprávy se s těmihle směry budou pojit. Pokud to bude prostě Hráč přichází z, tak radši přívan, ať se do toho ten přídech neplete. Pokud to ale bude Hráč přidechává/přivání/přilétá z, tak klidně i přídech.
Jiný pohled, co mne napadl, byl: je A, B, C, kde B je obyčejný svět, doleva (C > B, B > A) to je jeden směr (např. přídech), doprava druhý (úvan). A a C pak budou pojmenované právě těmi prohozenými názvy (zde by to vyšlo světy Přívanu/Údechu). Tohle je varianta spíše pro speciální hlášku, ne jen Hráč přichází z. Nejsem si ale jist, zda Waran nechtěl celou osu Přívanů/Údechů (co třeba je pak prostě číslovat: o přídech nalevo od Přívanu III je Přívan IV). --12. 12. 2012, 08:07 (UTC), Utar (diskuse)
Nakolik to chápu, jedná se o celou novou souřadnicovou osu.
Zjistil jsem však pro přídech i přívan nepříznivou věc: zkratka "p" je už zažitá jako zkratka za "prohlédni si". --Mmh (diskuse) 12. 12. 2012, 21:14 (UTC)
Prošel jsem si všechny možné předpony a kombinace, a jako možné řešení s nekolidující zkratkou mne napadá kombinace úvan/obdech, případně odvan/údech. --Mmh (diskuse) 13. 12. 2012, 01:25 (UTC)
Jo, a možná by stálo za to se přesunout na stránku domácího úkolu k 6. lekci, protože tam už jde přímo o pohyb a o průchody mezi místnostmi (potažmo jejich směry). --Mmh (diskuse) 13. 12. 2012, 21:22 (UTC)

Když už jsme u těch směrů, je nějaká metoda pro předání pole všech aktuálních směrů? Neboli aby mi to teď naplnilo pole deseti hodnotami (4 hlavní, 4 vedlejší, nahoru, dolů) a po přechodu na vyšší dimenze více položek? --10. 12. 2012, 23:01 (UTC), Utar (diskuse)

Jak "aktuálních"? Něco jako query_command_list()? --Mmh (diskuse) 10. 12. 2012, 23:28 (UTC)
Myslel jsem trochu něco jiného (všechny směry, které umí EXIT_VIEW; to je asi ta správná definice), ale tahle funkce se taky hodí. Díky --10. 12. 2012, 23:58 (UTC), Utar (diskuse)
Poté, co jsme to onlajn prodebatovali přímo v Prazích, sem jen šoupnu výsledek pro zdejší čtenáře: EXIT_VIEW umí správně do věty zapracovat osm světových stran a směry nahoru a dolů. Není žádná funkce, která by vracela pole těchto deseti směrů. Existuje funkce query_ss_array(), která vrátí pole osmi světových stran, což je užitečné pro mapové moduly. Ani trojrozměrnou mapu už nemáme (nepočítáme-li mimořádnou možnost přechodu mezi jednotlivými mapovými doménami, tedy po třetí souřadnici). Pokud bychom dodali čtvrtý rozměr, byla by to zprvu nová dvojice typu nahoru/dolů, tedy mimo mapové funkce. Samozřejmě, kdyby z toho chtěl někdo vypracovat celou mapovou doménu, už by se hodilo si na to udělat příslušné inherity (a případně i zadefinovat mezisměry, třeba szdp jako severozápadodolnopřívan). --Mmh (diskuse) 11. 12. 2012, 11:24 (UTC)

Teleportační místnost - /i/move.c hlásí chybu na řádku 302[editovat]

Při stavbě teleportační místnosti se mi vyskytl následující problém:
Odchycení uživatelského příkazu a proměnné s probíhá bez problému, potíže nastávají zde:

this_player()->move("/w/slenderman/room/1", "MOVE_MAGIC",
                    "$Ten(1,OBJ_TP) se soustředí na našedlý obláček.\n$Ten(1,OBJ_TP) s tichým zabzučením mizí.",
                    "Něco zabzučelo, a v místnosti se objevuje $ten(1,OBJ_TP).");
return 1;

(soubor /i/move.c mám samozřejmě zděděný)
Při spuštění mi to však hlásí chybu:

Soubor: /i/move.c  Řádek: 302
Objekt: /w/slenderman/portalovka

	old_room->add_encumbrance(this_object(),ENC_REMOVE,0);
	if (way & MOVE_ATOM_MESSAGE)
	    this_object()->send_move_out_msg(old_room, new_room, way,

Chyba: Bad argument 1 to &()

Sedím nad tím už notnou chvíli, a stále nemůžu objevit, kde jsem udělal chybu. Nejsem si jistý, zda jsem správně zadal typ přesunu (MOVE_MAGIC), ale když to tam zadám bez uvozovek, hlásí to, že proměnná nebyla definována.
--Waran (diskuse) 8. 12. 2012, 12:18 (UTC)

Chyba je to přímo ukázková: Nejde o "MOVE_MAGIC", nýbrž o MOVE_MAGIC. Je to celočíselná konstanta, tedy "přezdívka" nějakého celého čísla, které si nemusíme pamatovat (a které se může interně případně změnit) a můžeme místo něho používat tento identifikátor. Když se tam místo toho dá totéž v uvozovkách, tedy řetězec, a modul /i/move se pokusí tento řetězec pomocí & (bitový součin) soperovat s celým číslem, nastane ona chyba: špatný parametr č. 1 u operace &. --Mmh (diskuse) 8. 12. 2012, 13:32 (UTC)
Do "záhlaví" doplněno #include <move.h> a funguje. Díky.
--Waran (diskuse) 8. 12. 2012, 13:52 (UTC)

Počítač Slandy4U - Sběr nápadů[editovat]

Jako prostředek ke splnění domácího úkolu jsem si vzal myšlenku počítače v počítači (inspiroval jsem se počítačovou učebnou lycea v Prazích), k vyzkoušení se v Prazích dostanete příkazem:
cíl /w/slenderman/pocitacovka
stroj spustíte příkazem $ start.
Při tvoření tohoto úkolu jsem se myšlenkou dost nadchnul, problém je ale v tom, že mě nenapadá, co by mohl všechno počítač umět.
Napadne-li někoho něco, budu velmi vděčný, když mi nápad nějak pošlete (buď přímo v prazích, např. z mé pracovny (cíl /w/slenderman/workroom) příkazem piš dopis (pozor, ve většině místností to nejde)), nebo na jeden z dalších prostředků, uvedených v mých kontaktech.
Předem díky za pomoc!
--Waran (diskuse) 7. 12. 2012, 21:02 (UTC)

Poznámka: pro anděly by piš dopis mělo být možné kdekoliv, protože si svůj (neviditelný) mejlový klient nosí pořád s sebou; pokud se někomu náhodou cestou ztratil (objekt může zaniknout při spoustě příležitostí), může si dotyčný pořídit nový v Místě věcí v Pantomatu. --Mmh (diskuse) 8. 12. 2012, 13:34 (UTC)