23. Říjen 2017 - 11:52

Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Kroužící orel

Stran: [1] 2 3 ... 8
1
Moc díky za vysvětlení s překladem, vyzkoušel jsem ve frobtadsu volbu -we a s definicí provaz.moveinto jsem opravdu pohořel.  A máš pravdu, vše jsem zkusil znovu a nyní již i WB píše:

TADS Compiler 3.1.3  Copyright 1999, 2012 Michael J. Roberts
Exoter.t(338): warning: undefined symbol "moveinto" - assuming this is a property name
Errors:   0
Warnings: 1

Zajímavé, včera jsem zkoušel WB restartovat a vše znovu kompilovat, druhý den vše funguje, nechce se mi věřit, možná že zafungoval „restart“ celého linuxu. Tak to je super, jen bych rád volbu -we využil i ve WB, zkoumal jsem jeho manuály, především The TADS 3 Debugger a zatím nenašel nic, co by mi pomohlo, ještě na to juknu.

Byl jsem nadmíru překvapen příkazem provaz.moveinto(studna) a vše jsem dnes ještě jednou otestoval a zasílám v příloze.

1. scénář – použil jsem svůj upravený soubor cs_cz.t, takže mi funguje příkaz přivaž zatím bez využití Tebou doporučovaného VerbRule, ve zdrojovém kódu je „chybný“ vnitřek metody provaz.moveinto. Takto vše v pořádku funguje a hra nemá problém s přivázáním provazu a vlezením do studny. V příloze jsou to soubory provaz_moveinto_Exoter.t, transskript_provazmoveinto.txt a cs_cz.t

2. scénář – stejně jako 1 bod, ale s využitím „správného“ vnitřku metody provaz.moveInto, zde hra píše nesmyslné hlášení:
(nejprve dáváš provaz na podlahu, potom ho uvolňuješ od studnu)
Provaz jsi spustil dolů.
// do studny se však nedostanu
>d
Studna je moc hluboká na to, abys do ní skočil jen tak.
V příloze jsou to soubory provaz_moveInto_Exoter.t, transskript_provazmoveInto.txt a cs_cz.t

3. scénář stejně jako bod 1, jen využívám Tvůj aktuální překlad cs_cz.t, který jsem si stáhnul na stránkách. Zde musím zatím místo „přivaž“ použít „připevni“, jinak ale vše funguje tak jak má.
V příloze je to soubor transskript_provazmoveinto_preklad_Gaspoda.txt

4. scénář stejně jako bod 2, jen využívám Tvůj aktuální překlad cs_cz.t, který jsem si stáhnul na stránkách. Zde dopadnu zase špatně, viz soubor transskript_provazmoveInto_preklad_Gaspoda.txt

Z toho jsem zmaten, zatím s využitím mého zdrojáku musím využít původní chybný provaz.moveinto, jinak nemohu provaz ke studni připevnit a dostat se dolů. Na druhou stranu se divím, že hra místo chyby vyhodí jen varování, v Library jsem našel jen moveInto.

Pokud se na to podíváš, budu moc vděčný, snad jsem se vyjádřil srozumitelně. Tady mi potíž přijde nelogická, spíš ale někde dělám chybu, o které zatím nevím.

Krásný víkend přeje

Orel

2
A kruci, ani nevím jak mě napadlo vrátit se zpět a metodu provaz.moveInto přepsat zase zpět na provaz.moveinto a chyba se už neobjevuje…:

>prozkoumej studnu
Hluboká studna, nyní však již zcela vyschlá.
>přivaž provaz ke studni
(nejprve dáváš provaz na podlahu)
Provaz jsi spustil dolů.
>d
Sešplhal jsi dolů za pomoci přivázaného lana.
Ve studni
Jsi na dně studny. Je tu vlhko.
Můžeš jít nahoru.
Vidíš tu druhý drahokam.
>i
Neseš šperhák, pochodeň (svítí), svazek klíčů a křesadlo.
>n
Jihozápadní část nádvoří
Stojíš na nádvoří.
Můžeš jít na sever, na východ, na jih, dolů.
Je tu stará kamenná studna.
Vidíš tu provaz.
>polož pochodeň
Hotovo.
>d
Sešplhal jsi dolů za pomoci přivázaného lana.
Ve tmě
Je tu naprostá tma.
>n
Jihozápadní část nádvoří
Stojíš na nádvoří.
Můžeš jít na sever, na východ, na jih, dolů.
Je tu stará kamenná studna.
Vidíš tu provaz a pochodeň (svítí).
>vezmi pochodeň
Hotovo.
>vezmi provaz
(nejprve uvolňuješ provaz od studnu)
Hotovo.
>d
Studna je moc hluboká na to, abys do ní skočil jen tak.

Uff, tohle opravdu zatím nepobírám, ale nevadí, pořádně si prostuduji Tebou popsané části základny a pokusím se znovu definovat VerbRules.

3
1. C a C++
Ano, podobnou definici jsem nalezl i na diskuzních fórech programátorů, tady bude asi jen opravdu malý rozdíl, někteří diskutující srovnávali C++ a Javu s tím, že Java je plně objektová, což asi nebude ve všech případech to pravé, nevím, toto zjistím až s dalšími zkušenostmi. Každopádně jsem si nainstaloval cppreference a cppman a zkouším jejich integraci s různými IDE a VIMem, to jistě využiji u různých tutoriálů, o kterých jsem psal v minulých dílech.

2. synonyma
Jasné, do knihovny raději už zasahovat nebudu, vlastní změny ve svém kódu určitě budou lepší řešení. Prozkoumal jsem componentMods.t a pokoušel se definovat synonymum dle roomControl.t. Ještě předtím jsou použil Tvůj překlad cs_cz.t a přepsal jím svůj upravovaný, jenže ouha, od té doby při hře vidím:

přivaž provaz
K čemu ho chceš připevnit?
>studna
(nejprve dáváš provaz na podlahu, potom ho uvolňuješ od studnu)
Provaz jsi spustil dolů.
>d
Studna je moc hluboká na to, abys do ní skočil jen tak.

a tohoto hlášení se nejsem schopen zbavit, i když jsem mnou upravenou češtinu zase nahrál zpět, hlášení je zde po kompilaci ve WB i Frobtadsu…
Musel jsem nebo možná Workbench nějakým příkazem přepsal definici AttachTo, budu hledat, sakra, tohle jsem nečekal.

3. chybové hlášení
No jo, máš recht, příkazu provaz.moveinto(studna) jsem si opravdu nevšiml, na debug ovšem používám Workbench s výchozím nastavením a o chybě píše pouze Frobtads:
Frobtads:
   compile Exoter.t -> obj/Exoter.t3o
Exoter.t(338): warning: undefined symbol "moveinto" - assuming this is a property name
   link -> Exoter.t3p
   preinit -> Exoter.t3
Errors:   0
Warnings: 1

---

Workbench – příkaz Compile for Debugging i Full Recompile for Debugging:

Tip: you can go to the source location of a compile error
by double-clicking on the error message in this window

----- begin build: Thu Oct 19 13:02:03 2017 -----
>t3make -Fy "Z:\home\wanbli\Plocha\TADS\Exoter\obj" -Fo "Z:\home\wanbli\Plocha\TADS\Exoter\obj" -o "Z:\home\wanbli\Plocha\TADS\Exoter_�s\Makefile_dbg.t3" -D "LANGUAGE=cs_cz" -D "MESSAGESTYLE=neu" -D "INSTRUCTIONS_MENU" -d -statprefix <@> -statpct "system.tl" "adv3\adv3.tl" "Exoter.t" -res
TADS Compiler 3.1.3  Copyright 1999, 2012 Michael J. Roberts
Build successfully completed.
----- end build: Thu Oct 19 13:02:04 2017 -----

Zkusím se poohlédnout po chybě v mém nastavení, s warningy jsem se ovšem v minulosti setkával, je zvláštní, že tuto chybu neodchytil. Také je mi divné, že metoda „moveinto“ projde, v knihovně je opravdu pouze moveInto, tady je asi překladač benevolentní.

4
1. Přímý a nepřímý objekt

Konečně se zase dostávám k programování, krásné počasí o víkendu jsme celé projezdili. Paráda, teď už je mi
konečně věta we "leave that to the direct object" jasná, s přímými a nepřímými objekty se zde aktivně setkávám právě až u pochodně, Ericův manuál studuji postupně, vidím, že o nich píše v sekci Actions a právě u třídy Attachable, o které se zmíním později. Metodu iobjFor(BurnWith) jsem využil u křesadla, vyzkoušel jsem si i dobjFor(BurnWith) u pochodně, kterou jsem nakonec zakomentoval, k tomuto řešení bych se přiklonil v případě, že bych chtěl řešit její postupné vyhasínání, čímž u Exotera hráče trápit zatím nechci. Vidím, že jsi studoval také Inform, ten jsem zatím nezkoušel, snad časem, ovšem vypadá to, že TADS je tak komplexní, že jeho možnosti ani nebudu schopen využít. Na ten kafovak u Borise se juknu do Tvých zdrojáků, ohledně PreferredIobj není samozřejmě v Learning TADS 3 ani slovo, je mi jasné, že jsi jej potřeboval vytvořit sám při přípravě překladu.

2. Knihovna, hlavičkové soubory, zdrojáky a historie TADS

Podíval jsem se na adresářovou strukturu frobtadsu, nyní je to krásně vidět, hlavičkové soubory vidím v /usr/share/frobtads/tads3/include, vidím, že i u nich existuje vnořené inkludy, např. hned ten první bignum.h inkluduje systype.h . A na stejné úrovni adrsář /lib vidím zdrojáky s příponou .t, jasně, zde je ten obrovský thing.t, objekty, eventy a v neposlední řadě knihovna adv3.h, o které jsme se bavili minule. Napadá mě jak byla vygenerována dokumentace, vím, že např. u Javy nebo PHP lze vygenerovat dokumentaci z komentářů, předpokládám správně, že webová Library reference vznikla podobně?

Dívám se, že zde mám nainstalovanou také starší verzi TADS2 s mnohem skromnější strukturou, jedná se krom dokumentace jen o 3 soubory:
/usr/share/frobtads/tads2/adv.t
/usr/share/frobtads/tads2/gameinfo.t
/usr/share/frobtads/tads2/std.t

jak vidno, posun ve třetí verzi a tedy i složitost, je obrovský.

Právě to mě nejvíce láká, časem díky znalosti jazyka C budu schopen zkoumat tyto soubory a chápat, o čem jsou a jak linux opravdu funguje. Teď se dívám na wikipedii, TADS2 byl psán nebo spíše jeho syntaxe vycházela z C a trochu z Pascalu, zatímco TADS3 je úplně jiný objektový model vycházející z C++ a z Javy plus využití VM, o tom píšeš i Ty ve svém manuálu.

Zdálo by se tedy a někteří diskutující programátoři jsou toho názoru, že učit se staré C je už přežitek stejně jako Pascal, na druhou stranu pokud chci jít do hloubky, bude lépe se věnovat právě starému C a teprve poté C++, cítím, že jedině tak mohu programování opravdu do hloubky pochopit, viz Tvůj názor na prvotní výuku pomocí skriptovacích jazyků. Jen nevím, zda to pro mě nebude trochu obtížné, když se nyní snažím pochopit objektový model a budu se vracet ke strukturovanému, když se ovšem dívám na C++, není to čistě objektový jazyk a některé konstrukce jsou převzané z C, tak to snad půjde. Pascal, i když jeho implementace FreePascal a Lazarus už je objektová, mi dnes asi nic nedá a skutečné využití pro mě nevidím.

3. Attachable a malé rozšíření překladu

Pečlivě jsem prozkoumal popis této třídy v Learning TADS3, T3TourGuide, Tvůj překlad a také knihovnu. A vypadá to, že hurá, pečlivost se vyplatila, vytvořil jsem objekt studna, ke které pomocí metody canAttachTo(obj) lze přivázat provaz. U provazu jsem s definicí jako Attachable pohořel, to jsem ale očekával, manuály popisují, že typický problém, kdy jej přivázaný táhnu sebou celou mapou není tak jednoduché řešit. Napadlo mě použít NearbyAttachable, který tuto bolístku zvládá, nyní vše funguje jak má. U lana a provazu mě první slovo napadne přivaž/odvaž, nikoliv připevni, přidal jsem jej tedy do souboru cs_cz.t z aktuální verze překladu, tam i v budoucnu budu dávat synonyma. Společně s aktuálním zdrojákem a průchodem hrou jej zasílám v příloze, třeba Ti cokoliv z toho pomůže u tvorbě dalších verzí.

Ukončení hry sebráním 4 diamantů už naprogramovat nebude problém, toto popisuje i manuál, nyní musím vyřešit snad již poslední bolístku, což jsou boje se strážcem, drakem a psem. Tady jsem dříve také zuřivě hledal na internetu, teď znovu prozkoumám knihovnu, pokusím se najít obecnou formulaci a vymyslet řešení, bude to podobné jako Tvůj příklad s pochodní a křesadlem. Začíná mě to stále více bavit, což je přesně to, co potřebuji.

4. Nová verze překladu

A vidím, že jsi zveřejnil novou verzi překladu, vše jsem vyzkoušel. Pokud vím, nic kromě souboru cs_cz.t jsem neupravoval a používám skutečně verzi 3.1.3, s tou jsem také před lety začínal. Nyní již je pojem křesadlo(lit) minulostí, tehdy jsem chybně definoval jeho metodu, pochodeň skutečně svítí jak je vidět v přiloženém transskriptu hry.

Zkusil jsem ještě jednou starší verzi definice křesadla:
+ kresadlo : FireSource, Candle 'křesadlo/křesadla/křesadlu/křesadlem' 'křesadlo' *4
a po jeho zapálení je vidět:
 Neseš šperhák, pochodeň (svítí) a křesadlo (svítí).

I tak je tedy vše v pořádku, je ale samozřejmě možné, že jsem si s překladem hrál více, než je zdrávo a upravil něco, co jsem neměl. 

5
... ještě ty přílohy...

6
1. Křesadlo a pochodeň
Nádherně vysvětleno, právě se dívám na mix-in třídu FireSource, která má jedinou podtřídu Matchstick a jedinou metodu iobjFor(BurnWith).  A pokud si třídu rozkliknu odkazem 1895, skutečně vidím „We don't provide any action handling - we leave that to the direct object.“ - tady autor přímo nabádá, abych si odvozený objekt upravil, přesně jak píšeš.

S „PreferredIobj“ jsem se zatím nesetkal nebo si jej nevšiml, vidím, že jej používáš ve svém překladu a konkrétně v demonstraci Attachable:

preferredIobj = nil
replace doActionMain()

Dívám se na třídu FueledLightSource, zde je jako jediná podtřída uvedena Candle. Direktivu getFuelLevel() { return fuelLevel; } jsem našel při rozkliknutí odkazu třídy i její podtřídy, odkaz extras.t 2079 i 2205.

Nyní vše v pochodní funguje, viz soubor Exoter_v2.t, jediný problém, který zatím vidím, je příkaz:

>zapal pochoden kresadlem
To není něco, co by mohlo hořet.

ale

>zapal pochoden
Čím ji chceš zapálit?

>kresadlem
Zapaluješ pochodeň.

funguje parádně, zatím to tak nechám, tyhle detaily si nechám na později.

Hledání ve třídách, vlastnostech, metodách apod. v knihovně už je mi jasné, teď se mi jen vše musí spojit dohromady, chápu, to chce čas, jo to vlastně „gró“ programování. Místo abych hledal v knihovně, snažil jsem se nalézt co nejvíce v příkladech, což je asi běžný postup programátorů začátečníků. Upřímně řečeno přes obrovský záběr TADSu jsem si ani neuvědomil, že tak triviální věc jako zapálení pochodně křesadlem, troudu ocílkou nebo obyčejné rozdělání ohně něčím jiným, než sirkami, zde není už jako hotové řešení, tady jsem dost ovlivněn našimi textovkami a příkazem použij – je ale jasné, že standardní knihovna bude popisovat jen obecné věci, vše obsáhnout nelze, chápu, že se s tím v budoucnu setkám i v C++ a jiných jazycích, asi proto existují knihovny rozšiřující, které se snaží nějakou konkrétní množinu problémů řešit. Na programátorovi je také to, aby tyto knihovny znal a ve svém projektu je uměl použít plus to, co jinde nenajde, dokončil sám, to mi stále více a více ukazuje praxe.

Teď když už se s Library reference manual více kamarádím a ještě jednou si prohlížím třídu FueledLightSource, napadá mě otázka, co znamená a k čemu slouží soubor  extras.t, na jehož definici se dívám? Když si přeložím popis „This module defines classes for specialized simulation objects. “, vidím, že se jedná o modul, který definuje třídy pro objekty specializující se na konkrétní simulaci. Jedná se tedy o hlavičkový soubor umístěný v podadresáři lib a když rozkliknu odkaz Source file, mimo celého bohatě komentovaného dokumentu vidím, že na začátku obsahuje direktivu:

#include "adv3.h"

To znamená, že odkazuje na standardní knihovnu adv3, okolo které se celý TADS točí, teď už mi to do sebe více zapadá.

Možná bude pro mě lepší, když budu více zkoumat Library reference manual a nejlépe zkoušet dostupné příklady, tak pochopím více, ostatně i Eveho manuál sem mnohokráte odkazuje. Definice místností a objektů je mi již víceméně jasná, rozhovory s NPC postavami si nechám na jindy, nyní mi jde hlavně o akce, o kterých píšeš i ve svém manuálu a k jejich definici potřebuji pořádně pochopit práci s metodami, o nic se, jak překpokládám, dozvím nejvíce zde. 

2. Nepřeložený řetězec "lit"
Ještě jednou jsem si zkusil projet moji původní verzi Exotera, zde se po zapálení pochodně křesadlem s tím, že jej definuji jako Matchstick, viz soubor Exoter_v1.t, objeví toto:

„Neseš šperhák, pochodeň (svítí) a křesadlo (lit).“

Následně jsem to samé zkusil po Tebou navrhované úpravě, viz soubor Exoter_v2.t:

Neseš šperhák, pochodeň (svítí) a křesadlo.

V souborech cs_cz.t a msg_neu.t je dle mého laického pohledu vše v pořádku, zde asi překladač k objektu Matchstick přiřadil chybný textový řetězec nebo je na místě, které jsem zatím nenalezl. Pokud budeš v budoucnu připravovat další verzi češtiny, prosím o kontrolu objektu Matchstick a přidání překladu, snad alespoň tímto svým testováním alespoň trochu pomohu k jeho zlepšení.

3. Knihovna Adv3lite a TADS Workbench
Moc děkuji za parádní popis této knihovny, chápu, proč lidi toužili po něčem jednodušším, upřímně řečeno jsem dle Tvého popisu nabyl dojmu, že TADS2 byl mnohem jednodušší na použití, než třetí verze, já jsem se setkal až s trojkou.
Sakra, nečekal jsem, že tato knihovna přidává i nové vlastnosti, na druhou stranu vidím, že dopadla podobně jako např. Wordpress nebo Nginx, původně štíhlé projekty vesele bobtnají a původní záměr mizí. I proto je mi velmi sympatická knihovna ncurses, mám rád jednoduché řádkové aplikace s rozhraním ála M602 nebo dosedit, které jsou určené k jediné konkrétní činnosti nebo mé oblíbené účetnictví Tichý – Ježek, které i po dvaceti letech zachovává stejné rozhraní a jen upravuje funkcionalitu, dnes podporuje i EET a existuje i snadný krok, jak jej plně integrovat do Linuxu.
Zatím jí tedy nechám na pokoji, pokud neexistuje překlad, není pro mě určena, takže se na ní podívám v budoucnu. Ta klasická mě stále více a více ohromuje tím, co vše dokáže, takové práce, kterou autoři věnují komunitě, si nesmírně vážím.
S tím Informem jsem si také trochu hrál, na root.cz vyšel i český článek tuším o dvou dílech, který základy popisuje, vypadá mnohem jednodušší, ale obávám se, že složitější problémy už nebude taková sranda realizovat a domnělá jednoduchost se rozplyne jak pára nad hrncem. Pro mě je tedy TADS výhodnější,  díky českému překladu a  především jako parádní příprava na C++.

Neodolal jsem a do google jsem zadal „TADS Workbench source“, napadlo mě, když je TADS otevřený, zda jsou i k WB k dispozici zdrojové kódy. V diskuzi:

https://www.intfiction.org/forum/viewtopic.php?f=10&t=4088

Jeden diskutující píše: „The Workbench source is available as part of the htmltads source release. It's all built directly on Win32 (no MFC or any other Microsoft class libraries are involved).“

Plus zde na github:

https://github.com/uliwitness/TADSWorkbench

Jsou k dispozici nějaké zdrojáky, zběženě jsem je prozkoumal a vypadá to, že jsou určeny pro MAC, ostatně pro něj je k dispozici i starší oficiální verze dostupná na stránkách.  Škoda, linuxový WB by byla paráda plus jak jsem minule psal ta verze ncurses/GTK/QT, jen ty zdrojáky mě zatím opravdu děsí, je jich nějak privela…
Takže zatím zůstanu u kombinace Frobtads/editor českého textu/WB ve Wine, sice trochu krkolomné, ale naštěstí funkční.

4. Lano a attachable obecně
Nyní po vyřešení pochodně bych se rád vrhnul na přivázání lana k temné studni a vše, co s tím souvisí. Využiji všechny dostupné znalosti, jak vidím, attachable je parádně popsaná v manuálu i v Library plus připravil jsi parádní demonstrační hru, pokusím se vše vyřešit sám, jedině tak se dostanu zase o krok dále.

7
Hierarchie dědičnosti tříd:
Ano, právě na třídě Thing je vše parádně ilustrativní, někteří její potomci jsou popisováni v Eveho manuálu a také v návodu od Tebe. Díky za zajímavý odkaz na strom živočichů, ten jsem neznal, přeci jen od školy už mám pár let za sebou, hledání společných vlastností a metody je mi sympatické, tady krásně na konkrétním příkladě vidím výhodu OOP. S podobnou třídou pro Widget jsem se setkal už s GTK tuším v Glade při návrhu uživatelského rozhraní, když jsem si s ním hrál, tehdy jsem ale samozřejmě netušil nic o stromu dědičnosti a nyní je vše mnohem jasnější. Ouplně lituji, že nejsem programátor, TADS potřebuje pořádný moderní workbench pro Windows i Linux, moc dobře se mi pracuje s klasickými DOSovými okny ála Turbo nebo FreePascal IDE, mít takový naprogramovaný v ncurses pro příkazovou řádku a klidně i v GTK a QT pro X nebo Wayland by byla paráda. Ale co naplat, zatím musí stačit Wine.

Programování v C:
Moc díky za reakci, kvalitu tutoriálů zatím nejsem schopen posoudit, takže je paráda, že jsi se na web podíval a zhodnotil, mě zaujal hlavně popis oblastí, které mě nejvíce lákají, především ke knihovně ncurses jsem nenašel v češtině příliš mnoho materiálů. Podobný zajímavý návod nejen na C/C++ jsem nalezl i na webu www.itnetwork.cz a příklady her se zdrojovými kódy mám v plánu pořádně prozkoumat hnedle po zvládnutí TADS. Mám k dispozici i zajímavý úvod do programování v C na Raspberry - Essentials_C_v1.pdf, kde v závěru odkazují na asi tradiční knihu tohoto jazyka s názvem “The C Programming Language” od Kernighana and Ritchieho. Zde se ale právě bojím ztráty motivace a právě proto mě TADS zaujal, protože jeho ovládnutím se mi otevře můj dávný sen naprogramovat textovou hru, motivace je tedy obrovská. A stejně mě láká prozkoumávat linux a bsd, k tomu se dostanu později.

Pokud učíš právě tímto stylem, je to paráda, nakonec, proč bychom se na nějaké výuce nemohli dohodnout, vůbec nejsem proti.

Zapálení pochodně:
Nyní řeším zapálení pochodně. Několikrát jsem si přečetl T3TourGuide od strany 102 do 109 plus pečlivě prozkoumal LightFireSource v Sample Games. Zde jsou popisovány nejrůznější metody kontrolující množství oleje v lampě nebo způsob zapálení dynamitu, prosté zapálení pochodně něčím jiným, než sirkami, jsem však nenalezl. Napadlo mě grepnout metodu "canLightWith" a "canLightWith(obj)" ve všech souborech včetně Základny, které mám na disku, žádný příklad tohoto typu však nebyl k mání. Ani google nepomohl, divím se, že není k nalezení možnost zapálit pochodeň křesadlem, že by něco takového žádný autor pro textovku nepotřeboval?

Zkoušel jsem pomocí tipu na straně 104 v T3TourGuide v souboru LightFireSource ze Sample Games uvedený příklad LIGHT CANDLE FROM TORCH, ten mi úspěšně funguje, ovšem k zapálení předmětu musím mít krom zápalek v takovém případě věc, která již hoří.

Jediné, co mě po několikadenním zkoušení napadlo, bylo využít objekt Matchstick - jen díky němu jsem schopen křesadlem pochodeň zapálit. Zde zasílám transskript hry:

--------------------------------------------------------------------------------------------------------------------------
Vítejte v konverzační hře Exoter, přesněji řečeno v její co nejvěrnější předělávce ze skvělého počítače ZX Spectrum a Didaktik Gama.

Kobka
Jsi v malé kamenné kobce. Je tu cítit mrtvolný zápach. Světlo sem proniká z jediného stropního otvoru, ve kterém je mříž.
Nemůžeš jít nikam.
Vidíš tu mrtvolu.

>koukni se do mrtvoly
Bližší pohled na mrtvolu odhalil šperhák schovaný v záhybech polorozpadlých šatů!

>vezmi sperhak
Hotovo.

>odemkni mriz
(šperhákem)
Hotovo.

>n
(nejprve otevíráš mříž)
Chodba
Stojíš na kamenné dlažbě středověké chodby. Nízká klenba Ti rozhodně nedodává pocit jistoty.
Můžeš jít na východ, na jih, dolů.
Nevidíš nic zvláštního.

>v
Chodba
Jsi v chodbě.
Můžeš jít na východ, na západ.
Vidíš tu pochodeň.

>vezmi pochoden
Hotovo.

>prozkoumej pochoden
Kdyby se Ti jí podařilo zapálit, jistě by vydávala hodně světla.

>v
Chodba
Jsi v chodbě. Vidíš strážce, naštěstí je k Tobě obrácen zády.
Můžeš jít na východ, na západ.
Vidíš tu svazek klíčů a křesadlo.
Strážce tu stojí.

>vezmi kresadlo
Hotovo.

>prozkoumej kresadlo
Snad by se s ním dal rozdělat oheň.

>v
Konec chodby
Jsi na konci chodby. Vidíš dveře.
Můžeš jít na východ, na západ.

>zapal kresadlo
Škrtnutím křesadla zapaluješ malý plamínek.

>i
Neseš šperhák, pochodeň a křesadlo (lit).

>zapal pochoden
(křesadlem)
Zapálená pochodeň příjemně praská a vydává hodně světla.

Křesadlo dohořelo a plamen mizí v obláčku dýmu.

>

- po několika příkazech hra vypíše: "Pochodeň už vyhořela až na konec a zrovna zhasíná.", toto chování předpokládám musím potlačit změnou metody objektu Candle. Právě se koukám do T3TourGuide na stranu 104, kde autor popisuje vytvoření nové třídy RedCandle a právě metoda dobjFor(BurnWith) bude nejspíše ta pravá:

dobjFor(BurnWith)
{
   check()
   {
      if(fuelLevel < 1) // tento if musím potlačit?
        sayBurnedOut;
      else
        inherited; //volání předka tohoto objektu, pokud dobře rozumím?
    }
}

--------------------------------------------------------------------------------------------------------------------------

Křesadlo se stále chová jako sirka, viz "Škrtnutím křesadla zapaluješ malý plamínek." Po zadání i se v inventáři objeví „křesadlo (lit)“, zde asi bude nepřeložený textový řetězec. Následně křesadlo dohoří stejně jako sirka v Sample games - LightFireSource.

Napadlo mě modifikovat jednu z metod objektu Matchstick tak, aby lépe odpovídal křesadlu - je tento mnou zamýšlený postup správný? Pokud ano, pokusím se přijít na to, kterou. Skutečně jsem zatím nepřišel na jinou možnost jak zapálit nehořícím objektem objekt hořící, při vyhledávání na internetu jsem ještě narazil na zjednodušenou knihovnu adv3lite, která pravděpodobně tuto situaci řeší elegantněji:

http://tads3.gerynarsabode.org/index.php?title=Thing_(adv3Lite)

--------------------------------------------------------------------------------------------------------------------------
canBurnWithMe    
Use this property to declare that a player can burn something with the object being defined. The default setting is that one cannot use objects to burn other things with. Can be either true or nil
canBurnWithMe = true
--------------------------------------------------------------------------------------------------------------------------

Rád bych se však alespoň zpočátku naučil knihovnu klasickou, protože výše popsané zjednodušení mi ve výuce programování určitě nepomůže. Dostupná dokumentace je dle mého názoru perfektní, to spíše já zatím ještě neumím dohledat všechny potřebné informace.

8
Díky za parádní vysvětlení, já opravdu žil v domění, že třída od třídy nemůže nebo spíše není nutno, aby cokoliv dědila, na to přijdu až s vysvětlením od programátora nebo vlastní praxí. S tou vícenásobnou dědičností je to moc zajímavé, čím dál více se mi líbí kombinace TADS a C++. U PHP chápu, že OOP zde není ještě úplně dozrálé, přeci jen pokud se nepletu, opravdové objekty tam byly až od verze 5, na druhou stranu původní C také nic takového nemělo, jeho následník má ale historii samozřejmě delší.

A sakra, já jsem právě slovo „statický“ převzal z Eveho manuálu, kde na straně 23 vysvětluje rozdíl mezi daty vlastností a blokem kódu uvnitř medoy, jak vidno, definici jsem pochopil nesprávně. Spolu jsme se v minulosti bavili právě o proměnných a funkcích, psal jsi mi, že u OOP se jedná o vlastnosti a metody daného objektu, díval jsem se do historie zpráv.

Ano, četl jsem velmi zajímavé srovnání TADS a Inform, kde právě Tebou popsaný rozdíl v programování autor uvádí. Určitě nebudu spěchat a pořádně si vyzkouším všechny příklady v manuálu, ano, Eve píše, že práce s objekty je u TADSu zjednodušena, na to si v budoucnu u C++ musím dát pozor. Mimochodem velmi mě zaujaly tyto stránky:

http://www.sallyx.org/

Autor zde parádně popisuje začátek v jazyce C, přechod k C++, poté programování v Linuxu a popis mnou velmi oblíbené knihovny ncurses, také Postgresql se bude hodit. Je to spíše věc budoucnosti, pokud bys však měl čas a chuť a v rychlosti se juknul na popsanou látku, můžeš mi jako programátor sdělit svůj názor zda jsou tyto tutoriály vhodné na seznámení s těmito jazyky? Toto ale v žádném případě nespěchá, nejprve musím projet Learning T3, ten se mi jako manuál zdá naprosto parádní. A přečtu si jej několikrát, což dělám právě teď...

Ještě jednou si projedu mnou popisovanou část manuálu, ať je mi vše jasné. Tento víkend jsme jezdili a také tento týden mám téměř celý zaplněn jízdami na koních, takže se k počítači dostanu méně, ve volných chvílích budu dále studovat, OOP není žádná sranda. Už vím jak definovat metodu uvnitř objektu pochodeň, v Library i příkladu s názvem LightFire jsem nalezl vše potřebné plus následná změna názvu po změně stavu se také zadařila, ještě si projedu všechny příklady a příště sem snad už konečně hodím další kus exoteráckého kódu.

9
Výborně, já to cítím zrovna tak, je velmi lákavé naučit se např. PHP s Javascriptem a nějakým tím frameworkem, spousta z nás by poté mohla pracovat z domova, což by mi v minulosti moc pomoho, u síťařiny tohle nejde. Nyní už ale tuhle potřebu nemám a mohu se učit jazyk, který je mi blízký, TADS, C, C++ a Python v kombinaci s linuxem nebo unixem je přesně to, co mě láká nejvíce.

Learning TADS3 je psaný čtivě a se zajímavými příklady, už jsem u šedesáté stránky a mnohé jsem pochopil, je hezké vědět, že existuje třída, objekt, vlastnosti a metody, ale teprve zde vidím prakticky, k čemu jsou. Autor parádně ukazuje jednoduchou definici vlastností a využití šablon, poté mix-in třídy a vícenásobnou dědičnost, nevěděl jsem, že i třída může dědit z jiné třídy.

Taky už vidím rozdíl mezi
vlastností = statická data
a
metodou = blok kódu čekající na spuštění

a na všechny ty tajemné příkazy uvnitř složených závorek u Heidi i Základny se už budu dívat jinak.

Snad jsem i správně pobral rozdíl mezi metodou a funkcí
metoda = kód přiřazený ke konkrétnímu objektu
funkce = kód nepřiřazený

tohle bude určitě v C++ podobné.

V manuálu jsou i bezva příklady, např. prsten schovaný pod kobercem se dá definovat více způsoby, metodou discover nebo makePresent.  Už vím jak změnit název objektu po jeho změně, např.  zapálenou pochodeň a spoustu dalších věcí, s tímle se pohnu mnohem více dále. I v Exoteru využiji třídu Outdoorroom a více si s ním vyhraji, teď už snad pochodeň a studnu nadefinuji správně. Metody jsou krásně vidět i v Sample games, soubor LightFire.t mi hodně pomůže.

Jo, my lidi jsme holt líní, nedal jsem na Tvou i autorovu radu, že začít Getting started a hrou Heidi pro neprogramátora není ten nej nápad, ale nevadí. Teď už snad konečně získám i ty programátorské návyky, hurá...

---

Moc děkuji za parádní vysvětlení mix-in tříd, autor je posléze popisuje i v dalších tématech, mě hlavně zajímalo, proč právě Darkroom, u kterého bych mix-in očekával, takto připravený není. Teď už vím, že autor standardní knihovny se prostě tak rozhodl při implementaci TADSu, nakonec novou mix-in třídu si mohu nadefinovat i sám, proč ne, takové vychytávky ale až časem. Na Lockable se podrobněji podívám, se Shipboard je vše jasné, tu jako samotnou třídu nemohu využít, pak by samozřejmě mix-in ztrácel smysl.

Mimochodem, díval jsem se, že i v C++ se mix-in třídy používají a jak jsem předpokládal, má svojí Standard Library, to mě více, než těší, začít programovat s TADSem mě nenásilnou formou dostane i sem...

Za půl hodinky mě čeká vyjížďka, pak bude chvíli volno, takže budu študovat dále a zase něco upravím a přidám do zdrojáku.

10
Jasná věc, nic se neděje, já jsem se upřímně o táborech k textovkám taky vůbec nedostal, s dvaceti dětmi není žádný den zrovínka oddych. Pilně teď študuju Learning TADS3, dříve jsem dumal nad tím, kterým programovacím jazykem začít, teď ale začínám chápat, že je to fuk, třídy a objekty se budou používat i v C++ podobně jako zde a až pořádně pochopím syntaxi a algoritmy, bude mi v každém jazyce hej. Eve parádně vysvětluje objekty, jejich vlastnosti a metody a rovnou na příkladech, takové učení mě baví, některé nic mi zatím neříkající matematické úlohy např. v Pascalu nebo Pythonu mojí pozornost nedokázaly udržet.

Hnedle od začátku mluví také o dědičnosti a vícenásobné dědičnosti, tohle se na příkladech dá parádně vstřebat. Zatím jsem u mix-in třídách, nyní ještě netuším, proč Darkroom není mix-in, ale ShipboardRoom a FloorlessRoom ano, důvod tady ale určitě je a věřím, že jej naleznu později v textu nebo v Library, tyhle otázky pokud sám vyřeším, mě posunou zase dále.

Stále jezdíme a za měsíc tu mám podzimní prázdniny u koní, volná dopoledne ale dycinky najdu, takže můžu študovat, jdu na to. Pokud budeš cokoliv upravovat, prosím o info např. sem:

http://tads.cz/cs/novinky

tam často chodím a hnedle je vidět, co máme nového - už se těším na novou knihovnu.

11
Máme po táborech a konečně budu mít více času a hlavně spoustu chuti pokračovat s parádním TADSem. Jen tak bastlit a zkoušet opravdu nejde, Exoter bych tímto způsobem nikdy nedokončil. Znovu jsem si pročetl Gaspodův návod a vidím, že programovat to chce opravdu systematicky a od začátku.

Vytisknul jsem si tedy všechna dostupná pdf plus to hlavní z technického manuálu, nyní musím kompletně projít Learning TADS 3, Heidi jako příklad pro neprogramátora opravdu nestačí. Kromě TADS mě jako linuxáka zajímá nejvíce C a C++, jak vidno, syntaxe je podobná, takže proč nezačít něčím, co mě opravdu baví, u her a hlavně textovek se budu učit s radostí. Třeba časem jako céčkař vyřeším i ten nešťastný problém s UTF-8 a mé oblíbené knihovny ncurses ve Frobtadsu, jůů, to by bylo něco... Tahle aplikace si o další vylepšování sama říká, jen škoda, že není zrovna v hlavním hledáčku tvůrců balíčů jednotlivých distribucí, aktivně využívám Arch a Debian 9/Q4OS, v prvním je pro úspěšný překlad nutno upravit PKGBUILD a v tom druhém se již ani nenachází, naštěstí upravená verze z nestabilní větvě funguje parádně.

Exoter se tedy trochu pozdrží, budu se snažit co nejlépe pochopit popsané příklady v manuálech, mimochodem ty návody pro TADS jsou opravdu profesionálně zpracované. Díval jsem se i na Inform, také se dnes již zrovna moc nevyvíjí, synaxe TADSu je ale narozdíl od něj podobnější klasickému C++, takže není co řešit.

Námětů na texovky mám spoustu, hotový scénář k druhému Orlovi a připravený třetí, mnohem rozšířenější a přepracovaný Bad Night, aztékové a májové, středověké hrady jako vystřižené z vondruškových románů, ruská občanská válka za Války velké, partyzání v Jusoslávii v té druhé... je toho moc, takže se programování holt nevyhnu, to je osud, který si musím prožít.

Jakmile něco nového zbastlím, další zdrojáky sem rozhodně hodím, všechny své textovky chci dávat k dispozici včetně zdrojáků jako ve většině linuxových aplikací. Plus testování nové textovky od Thoorina, mám se na co těšit.

12
Nové textové hry / Re: Temné noci Toferunu
« kdy: 22. Září 2017 - 15:11 »
Taky teď budu mít více času, krom pořádného studia TADS a programování obecně budu moc rád testovat, už se nemohu dočkat další hratelné verze, věřím, že programování si budu moci procvičit i zde.

13
Nové textové hry / Re: Temné noci Toferunu
« kdy: 30. Červenec 2017 - 21:13 »
Zdravím Thoorine,
vrátil jsem se z dovolené a vidím, že nová textovka je na obzoru, tím lépe, že z fantasy světa. Mám před sebou srpnové tábory, ale hnedle poté bude mnohem více času, určitě mi můžeš poslat odkaz na email ludek tecka stastny zavinac gmail tecka com a moc rád vše vyzkouším. Po táborech se vrhnu na další studium TADSu plus moc rád pomohu s betatestingem, příběh vypadá už teď velmi zajímavě.

14
Tak se zase dostávám k tvorbě, lano a strážce zatím nechám stranou a zaměřil jsem se na zapálení pochodně. Prozkoumal jsem v Library - extras.t třídu class Candle: FueledLightSource a pečlivě přečetl práci s baterkou v Heidi a především Tour Guide stranu 102 - Light and Fire. Parádně je tu popsána klasická svítilna na baterky jako OpenableContainer, olejová lampa a informace o tom, že pochodeň mohu definovat podle Candle & FireSource. Zkoušel jsem všechny příklady, posílám aktuální zdroják, kde mám na str. 181 pochodeň a str. 247 křesadlo. Ve všech případech dostávám po příkazu zapal pochodeň hlášku "{Tím iobj} nemůžeš nic zapálit.".

Až budeš mít čas, zkus se prosím juknout i na pochodeň, zatím budu dále zkoumat.

15
Dnes jsem ještě jednou v klidu juknul na soubory, které jsem Ti zaslal a jak vidno, spěch není to pravé, zase je tu problém s kódováním. Nyní posílám následující soubory v jednom archivu:

Pruchod_Exoter.txt a Pruchod_Exoter.pdf - to je přesný postup zkopírovaný z hraní hry ve Win verzi TADS3 Interpretr
Auto 318.cmd - nahraný průchozí skript pod Linuxem s nečitelným kódováním, ve Win verzi Workbenche plně funční
cs_cz.t - moje malá úprava s přivázáním provazu

Se senem je tedy vše OK, nyní se pokusím zprovoznit jeho spálení pomocí zapálené pochodně plus bude asi vhodnější, aby jej hráč nemohl sebrat. Budu ještě laborovat ohledně lana a studny. Až bude hra hotová, vrhnul bych se na doplnění souboru cs_cz.t a doplnil další slova, která se mi zdají být užitečná, pokud budeš souhlasit a je-li to správný postup, můžeme jej dát i na Tvůj web jako novou verzi, alespoň takto málo budu schopen i já pomoci v překladu TADSu.

Krásný víkend a modrou oblohu nad hlavou přeje

Orel

Stran: [1] 2 3 ... 8