Diskuze o textových hrách

Tvorba Textových her => TADS => Téma založeno: Kroužící orel 18. Prosinec 2019 - 09:26

Název: Kroužící orel 2
Přispěvatel: Kroužící orel 18. Prosinec 2019 - 09:26
Po delší době zdravím všechny textovkáře,

moc se omlouvám za odmlku, v poslední době jsem se věnoval klasickému programování nakonec v Javě, kde mě oslovily knihy pana Pecinovského a rozhodně nelituji, je opravdu fuk, čím člověk začne, ale styl výkladu holt hraje prim. Doslova před pár dny jsem si přečetl Holynovu recenzi na Orla I. a slíbil jsem, že před Otěžemi zimní noci, textovek z ruské občanské války a jiných zajímavých témat nejprve dokončím indiánskou trilogii.

Orla dvojku již tvořím sám kompletně v TADSu, hra má cca 40 místností (ve dne i v noci, viz níže), spoustu postav a věcí k prozkoumání, hádanky samozřejmě budou, nejvíce jsem se však zaměřil na příběh a rozhovory, což mě u textovek vždy bavilo. S Exoterem jsem se dosloval plácal, protože OOP rozhodně není sranda, teď už jsem doufám jinde a hru dokončím s nabitými zkušenostmi. Už nebude jeden ne zrovna přehledný zdrojový soubor, inšpiroval jsem se svým programováním v Javě a samozřejmě Základnou, čímž jsem kód mnohem více zpřehlednil, více souborů a využití Makefile je pro už přeci jen mírně větší projekt to pravé. Právě nyní dokončuji Akce a hraji si s PreCondition, poté se vrhnu na konverzační témata (ta v Exoteru vůbec nebyla, model TADSu je ale parádní) a nakonec neodolám, indiánská vesnice ve dne je nádherná, v noci ale o nic méně zajímavá. K naprogramování denní a noční lokace jsem nenašel žádnou dokumentaci, takže krom klasických třídy Room vytvořím ještě nové objekty DarkRoom včetně všech změn, to ale nevadí.

Pány jistě potěší ženské postavy, se kterými lze konzervovat a možná i něco navíc (spíš určitě), ctěný zájemce ať si sám vybere, hrajeme konverzační hry a právě na rozhovory jsem se zaměřil asi nejvíc.

TADS je opravdu famózní, už asi po dvacáté čtu skvělý Gaspodův manuál (který mi vždy připadal nekonečný a v poslední době příliš stručný, ach jo) a ještě více se hrabu ve zdrojácích Základny, teď s vědomostmi z Javy konečně vidím tu šílenou práci, kterou si s ním autor dal, takže jí prostě nemohu nevyužít. Hra bezvadně funguje od Win XP po Win 10 a na všech hlavních linuxech, připravím aktuální info o dnešních interpreterech (např. poslední verze Gargoyle už TADS zvládne také). Bezva nápady na textovku v Javě jsem našel zde:

https://java.vse.cz/4it101/ZadaniAdventury

a ano, přesně toto a mnohem, mnohem více TADS řeší. Škoda, že není k dispozici moderní IDE, když se např. rozhodnu, že název mistostTipiOrla potřebuji všude přejmenovat na mistostTypiOrla, nejde to tak jednoduše jako např. v Netbeansech nebo v Idee, ale alespoň o to více si budu vážit kvalitních prostředí, která opravdu pomáhají. A pokud bych v budoucnu TADS z jakéhokoliv důvodu nemohl využít (přeci jen se už nevyvíjí, naštěstí fórum stále funguje), vypadá to, že mohu klidně textovkařit v Javě a drobet upravit ty skvělé předpřipravené třídy (to ale alespoň zatím nehrozí, starý dobrý Workbenech jede všude a frobtads také, Fabularium na Androidu také odvádí skvělou práci no a nakonec možnost webového hraní, kde jsem se na fóru dozvěděl o využití moderního javascriptu např. u automapingu). Mimochodem, pro mapování využívám právě JS aplikaci Trizbort:

https://github.com/henck/trizbort

která pro TADS i jiné systémy umí z mapy vygenerovat názvy místností a propojení mezi nimi (ne vždy přesně, ale rozhodně pomůže).


Kdy hra vyjde? Do konce roku nemám šanci, i když teď na ní makám téměř denně. Vidím to na leden, maximálně únor, není totiž od věci, když si všechno, co jeden den připravím, druhý den přečtu ještě jednou. Jakmile vydám hru, počkám cca měsíc na uveřejnění zdrojáků. Postupně budu informovat o pokračování ve vývoji, netušil jsem, že seznamování se s vývojařinou bude trvat takhle dlouho, ach jo, už chápu, proč vznikla Adv3lite (tam ale chybí skvělý Gaspodův český překlad, takže jedu klasiku).
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 20. Prosinec 2019 - 21:52
Ahoj, přeji pohodové vánoce a gratuluji, že ses na programování nevykašlal, ale jdeš si za svým cílem! Popravdě jsem si nebyl jistý, protože mi přišlo, že o tom nedokážeš nemluvit a dlouho o tobě nebylo vidu ani slechu ;-) Přeji mnoho úspěchů a těším se :-)
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 22. Prosinec 2019 - 19:37
Zdravím Toma,

děkuji za parádní povzbuzení, na programování jsem se opravdu nevyklašlal, jen jsem musel zkusit pár přístupů a zjistit, který mi nejvíce vyhovuje. Stejně jako s Linuxem, kde pro mě z vícero důvodů zvítězil Arch jsem zkoušel i C, Python a nakonec se zaměřuji na Javu a TADS, nejde ani tak o jazyk, ale naučit se opravdu programovat a chápat souvislosti, zde mi sednul Pecinovský a skvěle jsem se odpíchnul od věčného začátečníka.

Orla v TADSu se pokusím vytvořit sám bez dotazů, když se juknu do historie naší komunikace, už se jen usmívám nad některými dotazy, ale jinak to nešlo. Poradil jsem si se dvěma osobami v jedné místnosti a změnou dne a noci, nerad bych Ti zkazil zážitek z hraní dotazy se zdrojáky. Opravdu pečlivě se snažím vše popsat, ať se hráč do světa může pořádně vcítit, TADS mi dává parádní možnosti plus zkoumám mapovací program Trizbort, který by se možná dal využít jako automapa k webovému hraní, to zjistím časem.

Snažím se pokud možno opouštět Workbench, debugger obsažený ve frobtads mi stačí, zatím vyvíjím v kombinaci editor Pluma + příkazová řádka frobtadsu a zkouším QT Creator včetně testovacích skriptů, o tomto všem jsme si psali minule. Zde získám bezva zkušenosti plus Library reference jsem si připravil pro offline prohlížeč dokumentace Zeal (jen zatím neumím provést indexaci, aby Zeal vyhledával pomocí fulltextu, na to se vrhnu výhledově). Zdrojáky jsou opravdu mohutné, "užvatlanost" Javy vidím i zde, pokouším se však dodržovat maximální přehlednost, takže s vývojem nemám probléma ani při několika tisících řádků kódu.

Krásné prázdninové a sváteční dny přeje

Orel
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 15. Leden 2020 - 10:33
Krásné ránko přeji,

hlásím, že vývoj jde podle plánu, nejvíce času zaberou detaily typu přesného popisu všeho možného, správné mluvnické
rody a košaté rozhovory. Zatím jsem si poradil se všemi potížemi ohledně postav, práce s oděvy i kontejnery, opravdu
mi velmi pomáhá, když se umím podívat do knihovny funkcí a metod, kterou jsem si upravil pro Zeal. Dnes jsem dokonce
zjistil, že nejsem zdaleka sám, kdo vyvíjí hru z indiánského prostředí, This land is my land vypadá moc pěkně, sice
si jí na svém železe opravdu nespustím, ale i ta videa stojí za to.

Zeptal bych se na jednu drobnost, kterou sice umím vyřešit, ale rád bych věděl, zda je možné elegantní řešení vzhledem
ke struktuře mých zdrojáků. Jedná se o využití třídy Enterable, pokud chci např. jít do týpí, mohu zadat "dovnitř" nebo
"jdi dovnitř", ale po zadání "jdi to týpí" dostanu odpověď "To není něco, do čeho bys mohl vstoupit". Situaci chápu,
ostatně popisuješ jí ve svém návodu a také v Getting Started in TADS3 je na straně 56 přesně vysvětleno, co a proč dělat
plus v Library a souboru travel.t je krásně vidět provázanost jednotlivých tříd.
V příloze zasílám minimální zdrojáky pro postavu a dvě místnosti, je možné při této struktuře docílit funkčnosti příkazu
"jdi to týpí"? Pokud to nebude možné, nezbývá mi vše předělat tak jak popisuje manuál a je vyřešeno např. u chaty v Heidi.

A bych měl ještě něco z druhého soudku, TADS stále prozkoumávám a z Frobtads 1.2.3 jsem již před časem přešel na verzi
1.2.4. Vše je OK, jen pokud se pokouším zkompilovat Základnu, dostávám následující chybové hlášení, které jsem v předchozím
sestavení nezaznamenal:

symbol_export itemTablet.t -> obj/itemTablet.t3s
Neoprávněný přístup do paměti (SIGSEGV) (core dumped [obraz paměti uložen])

Program v Cčku bych např. projel pomocí GDB a Valgrindu, zde v TADSu debugger nemám. Mohu poprosit o simulaci, docela by
mě zajímalo, kde může být problém, protože se s ním při své budoucí tvorbě mohu setkat taky.

Jdu makat dále, tvorba mě čím dál více baví a to parádní způsob pro další vývoj.
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 31. Leden 2020 - 22:10
Je možné při této struktuře docílit funkčnosti příkazu "jdi to týpí"? Pokud to nebude možné, nezbývá mi vše předělat tak jak popisuje manuál a je vyřešeno např. u chaty v Heidi.

Myslíš bez použití EntryPortalu? No zkusil jsem níže uvedené a zdálo se mi, že to funguje bez problému, tedy že jsem enterable přesměroval na cílovou lokaci, takže se zdá, že není potřeba směrovat na místní objekt představující dveře, který směruje na protilehlou lokaci, ale jde směrovat rovnou na cíl.

Kód: [Vybrat]
+ typiBystrehoRysa : Enterable, CustomImmovable -> mistnostTypiBystrehoRysa 'týpí' 'týpí' *4
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 3. Únor 2020 - 10:28
Paráda, přesměrování rovnou do týpí díky Tvému zápisu parádně funguje, upravím u všech vchodů, tenhle trik jsem v manuálu nenašel nebo přehlédnul, určitě se do budoucna bude hodit. Zatím jde tvorba bez problémů, jdu pokračovat, únor budu ještě na tvorbu potřebovat, ale nevadí, rád bych se vyvaroval co největšího počtu chyb a popsal bez příliš častého využívání knihovní hlášky co nejvíce situací, do kterých se hráč může dostat.

Zatím se loučí

Orel
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 25. Únor 2020 - 21:45
Orlí jámy a využití akce dobjFor(LieOn)

Na hře stále pracuji, mám hotovo cca 70 procent, takže jsem byl s rychlejším dokončením přeci jen přílišný optimista.
Je ale jasné, že se někde seknu, zatím jsem na většinu programátorských nástrah přišel. Už několik dní se ale pachtím s
akcí dobjFor(LieOn) a jak vidno, potřebuji si ujasnit věci, které se snažím aplikovat ne tak jak autoři při tvorbě jazyka předpokládali.
V příloze zasílám aktuální situaci s několika potřebnými místnostmi.

Ve hře se nachází orlí jámy určené na lov těchto dravců, potřebuji, aby hra reagovala na příkaz "lehni si do jámy" s tím,
že pokud má hráč nůž a návnadu, akce se provede a po zpracování opeřence získám nové předměty.


Pokud nemám v ruce žádný předmět, vše je OK a vyskočí hláška, kterou potřebuji:


>lehni si do jámy
Orla musím nejen na něco chytit, ale také mít šikovný předmět na zpracování masa a peří, nic nesmí zůstat nevyužito.


Pro úspěšný lov potřebuji mít v ruce nůž a návnadu. I přes můj kód však stačí mít jen jediný předmět, např. nůž a ještě
se text opakuje, místo aby hra zobrazila blok uvedený v else. Předměty typu PresentLater se v pořádku objeví:


>inv
Neseš nůž a na sobě máš bederní roušku, opasek, orlí medicínu a mokasíny.

>lehni si do jámy
Takže Ty se opravdu nebojíš lovu orlů...

>lehni si do jámy
Takže Ty se opravdu nebojíš lovu orlů...

>roz
Jihozápadní hranice prérie (ležíš na jámách)
Na jámách je orlí maso, orlí perutě, orlí pera a orlí letky.



Nejde mi jen o vyřešení problému, ale pochopení toho, co dělám špatně, přeci jen z Pecinovského Javy využívám IDE typu BlueJ, kde krásně graficky vidím provázanost tříd, objektů a volaných metod, zde mi není jasné následující:

V referenční knihovně si vyhledám Akce a rozkliknu LieOnAction, pokud dobře chápu, zjišťuji, že se jedná o třídu dědící od tříd TAction a Action a také od BasicProd a Resolver (které jsou však označeny jako objekty, i když po rozkliknutí jako třídy, zde se asi bude jednat o ten minimální rozdíl mezi třídou a objektem, který uvádíš ve svém manuálu). V sumáři vlastností a metod třídy LieOnAction vidím několik akcí xxx dobj xxx (snad se vyjadřuji přesně), nikoliv však akci s názvem dobjFor(LieOn), kterou potřebuji použít. Dobrá, vyhledám si všechny metody s názvem dobjFor(LieOn) (zde netuším, zda mohu akci typu dobj nebo iobj chápat jako metodu?) a vidím:
 
dobjFor(LieOn) - method of ComplexContainer in extras.t[207]
dobjFor(LieOn) - method of Thing in thing.t[10072]
dobjFor(LieOn) - method of Room in travel.t[4617]
dobjFor(LieOn) - method of NestedRoomFloor in travel.t[5161]
dobjFor(LieOn) - method of Floor in travel.t[5336]
dobjFor(LieOn) - method of BasicChair in travel.t[6440]
dobjFor(LieOn) - method of NominalPlatform in travel.t[6730]

Zde mě zaráží, že jsem nedohledal žádné propojení s třídou LieOnAction, tady něco chápu špatně. Potřebuji pracovat s věcmi v inventáři, takže se juknu blíže na aplikaci této metody ve spojení s třídou Thing a dostávám předpis:

    dobjFor(LieOn)
    {
        preCond = [touchObj]
        verify() { illogical(&cannotLieOnMsg); }
    }

Já se však ve svém kódu snažím využít nikoliv preCond a verify (mohu je chápat jako atributy metody?), ale verify, check a action společně s podmínkou začínající příkazem if a končící else, nakonec se snažím umožnit hráči nejen si s potřebnými předměty lehnout do jámy, ale také při položení obou věcí dosáhnout téhož pomocí dobjFor(PutIn) asDobjFor(LieOn).

Pokud dobře chápu, potřebuji rozšířit funkcionalitu metody dobjFor(LieOn) tak, abych mohl využít atributů verify, check a action. Je nepříjemné, že můj zápis hra nebere jako chybu (syntaktická to pro kompilátor není, sémantická však ano, pokud dobře rozumím, i tak je chování zvláštní, neměl by TADS při překladu zařvat, že se snažím volat neexistující atributy?).

Něco mi holt uniká, nechápu zatím propojení mezi třídou LieOnAction a metodou dobjFor(LieOn), tuším, že zde takové propojení bude např. přes třídu Thing a její metody.

Tohle ale pro další tvorbu musím pochopit, jinak na netriviálních akcích ztroskotám. Je mi jasné, že jsem se u Exoteru ptal na každou prkotinu, protože bez chápání výše uvedeného jsem se dál prostě nemohl dostat a jen zkoušel, zda nějaký zápis projde či nikoliv (a podobně jako zde se mi to např. s hořící pochodní podařilo, hru kompilátor přeložil, ale chovala se jinak, než jsem zamýšlel).


Moc se omlouvám za sakra dlouhou zprávu, snažil jsem se vyjádřit co nejpodrobněji. Mohu poprosit o objasnění - nejde jen o vyřešení problému, ale hlavně o postup a vysvětlení, co dělám špatně? Je mi jasné, že až mi tyto věci docvaknou, bude už šumák, jaký jazyk pro tvorbu použiji (samozřejmě budu-li se pohybovat v rámci OOP, pokud se nemýlím), protože stále více vidím, že princip programování je u všech těchto jazyků podobný. Pecinovského "Architektura nejdříve" a využití návrhových vzorů a UML bude parádní pro vymýšlení jak mám funkcionalitu programu navrhnout, šikovná metodika, např. programování řízené testy a právě pochopení propojení třída - objekt - metody mi umožní program konkrétně zapsat. Tak vývojařinu v současné době chápu, pokud se mýlím, nevadí, člověk se stále učí.

Zatím se loučí

Orel
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 8. Březen 2020 - 22:27
Pro úspěšný lov potřebuji mít v ruce nůž a návnadu. I přes můj kód však stačí mít jen jediný předmět, např. nůž

Ty tam máš podmínku:

Kód: [Vybrat]
  if(!navnada.isIn(me) && !nuz.isIn(me))
ale to není správně utvořená negace. Ty říkáš, že potřebuješ nůž A ZÁROVEŇ návnadu. Co je tedy opakem, kdy akci nedovolíš? Když nemáš nůž NEBO nemáš návnadu. Zapoměl jsi prohodit tu logickou spojku. Je to stejné, jako když řeknu, že půjdu ven, když budu mít čas A ZÁROVEŇ bude hezky. Čili nepůjdu ven, pokud buď nebudu mít čas, NEBO bude ošklivě. Říká se tomu DeMorganovy zákony a dají se zapsat jako !(A * B) = !A + !B či !(A + B) = !A * !B (hvězdička značí logický součin, tedy "a zároveň", plusko logický součet, tedy "nebo" a vykřičník je negace). Měl bys tedy napsat:

Kód: [Vybrat]
  if(!navnada.isIn(me) || !nuz.isIn(me))
a ještě se text opakuje, místo aby hra zobrazila blok uvedený v else. Předměty typu PresentLater se v pořádku objeví:

Ty tam říkáš:

Kód: [Vybrat]
  if(!moved)
Ale dej si pozor, koho se ptáš. Protože píšeš přímo vlastnost moved bez určení objektu, tak se ptáš objektu, ve kterém je napsaný if() a to jsou jámy, které se nikdy nepohnou. Možná bys měl testovat např. orliMaso.moved, potom to bude zabírat, dokud se maso nepohne, čili než ho sebereš. (Teď jsi nejsem jistý, jestli makePresent způsobí pohnutí masa, ale myslím, že ano - záleží, jestli chceš změnit text po objevení nebo až po sebrání a podle toho přizpůsobit podmínku. Můžeš také zkoušet testovat if(orliMaso.location != nil))

V referenční knihovně si vyhledám Akce a rozkliknu LieOnAction, pokud dobře chápu, zjišťuji, že se jedná o třídu dědící od tříd TAction a Action a také od BasicProd a Resolver

Ano, od TAction a BasicProd přímo a ty zase od Action a Resolver.

(které jsou však označeny jako objekty, i když po rozkliknutí jako třídy

Třídy poznáš, že zpravidla začínají velkým písmenkem a objekty malým. Nicméně klíčové slovo "object", které v manuálu vidíš napsané poblíž BasicProd a Resolver neznamená, že BasicProd je objekt, je to třída, ale dědí od speciální třídy nazvané "object", což je označení, že třída nemá žádné předky v knihovně, od kterých by dědila vlastnosti.


Citace
   An object must always have at least one superclass, but you can use the special class name "object" if you want a generic object that is not based on another object that your program defines.

V sumáři vlastností a metod třídy LieOnAction vidím několik akcí xxx dobj xxx (snad se vyjadřuji přesně), nikoliv však akci s názvem dobjFor
(LieOn), kterou potřebuji použít.

V prvé řadě dobjFor(LieOn) bys měl hledat na herním objektu (potomku Thing), kde se definuje chování akce. Třída LieOnAction se přímo o konkrétní chování nestará, všechny akční třídy jsou součastí parseru, starají se o rozpoznání akce v příkazu hráče a pro samotné vykonání pak zavolají preCond, verify, check a nakonec action na herním objektu.

Zde mě zaráží, že jsem nedohledal žádné propojení s třídou LieOnAction, tady něco chápu špatně.

Potřebuji pracovat s věcmi v inventáři, takže se juknu blíže na aplikaci této metody ve spojení s třídou Thing a dostávám předpis:

Kód: [Vybrat]
    dobjFor(LieOn)
    {
        preCond = [touchObj]
        verify() { illogical(&cannotLieOnMsg); }
    }

Já se však ve svém kódu snažím využít nikoliv preCond a verify (mohu je chápat jako atributy metody?),

Zápis s dobjFor() samo o sobě ještě není ani metoda, ani vlastnost, ale taková zkratka v zápisu, aby vypadal více hierarchicky a méně se opakovalo psaní. Říká se tomu propertyset a je to specialita TADSu. To, co takhle napíšeš, tak se změní na metodu (verify, action,...) či vlastnost (preCond) tak, že se název zkombinuje z obou částí:

Kód: [Vybrat]
    preCondDobjLieOn = [touchObj]
    verifyDobjLieOn() { illogical(&cannotLieOnMsg); }

Ale jinak ano, teď už hledáš na správném místě. V těchto místech se skrývá chování, které chceš ovlivnit.

ale verify, check a action společně s podmínkou začínající příkazem if a končící else, nakonec se snažím
umožnit hráči nejen si s potřebnými předměty lehnout do jámy, ale také při položení obou věcí dosáhnout
téhož pomocí dobjFor(PutIn) asDobjFor(LieOn).

Tak to ale pozor, o jakou akci se jedná. Když se snažíš jednu akci přesměrovat na jinou, nesmíš míchat různé druhy akcí dohromady. Jednak bys nemohl přesměrovávat akci, co žádné objekty nebere na akci, co bere jen přímý objekt a podobně akci, co bere přímý objekt na akci, která používá přímý i nepřímý objekt. To není kompatibilní. Ve tvém příadě LieOn je akce, kde hráč ulehá na objekt a to není kompatibilní s akcí, kdy objekt se položí na jiný objekt. I když nemůžeš použít asDobjFor, tak můžeš obě možnosti naprogramovat velmi podobně, ale zvlášť.

Pokud dobře chápu, potřebuji rozšířit funkcionalitu metody dobjFor(LieOn) tak, abych mohl využít atributů
verify, check a action. Je nepříjemné, že můj zápis hra nebere jako chybu (syntaktická to pro kompilátor
není, sémantická však ano, pokud dobře rozumím, i tak je chování zvláštní, neměl by TADS při překladu zařvat,
že se snažím volat neexistující atributy?).

Neměl by řvát, je to obráceně. Ty je nevoláš, ty je vytváříš (a máš možnost vytvořit jakoukoliv metodu či proměnnou chceš), volá je akce v knihovně. A nebo pokud se spleteš a nepojmenuješ metodu správně nebo z jiného důvodu ji nikdo nechce, tak ji holt nikdo nezavolá.

Zde se ale už dostáváme dost do teorie a možná většina tvých problémů zmizí, když vyřešíš ty drobné chybky v logice ifů zmíněné na začástku
mé odpovědi.

Něco mi holt uniká, nechápu zatím propojení mezi třídou LieOnAction a metodou dobjFor(LieOn), tuším, že zde
takové propojení bude např. přes třídu Thing a její metody.

Ze strany akční třídy se spouští vykonání akce, např. kdyby sis našel ve třídě TAction metodu verifyAction(), tak tam uvidíš, jak zde akce volá tu verifyDobjLieOn tvé jámy. Ale pointa je, že kód LieOnAction bys ani neměl číst, to jsou ty nízkoúrovňové věci, které sice tvoří jádro zpracování, ale jako autor hry tu nic užitečného nenajdeš.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 18. Březen 2020 - 20:51
No tak to je paráda, s negací jsi vše krásně vysvětlil, jak vidno, přečíst si o ní něco v knížce je pěkné, ale opravdové využití je něco jiného, zvláště když neznám zákony Herr De Morgana, díky za ně. Pokud potřebuji prověřit, zda hráč nemá nůž nebo návnadu, musím využít OR, vše jasné. Jsem moc rád, že se právě tato chyba stala, protože se mi vryje do paměti víc, než kapitola o těchto zákonitostech pojednávající v různých příručkách.

Hmm, pomocí if(!moved) nic nevyřeším, musím se ptát, zda se pohnul předmět Orlí maso. Konstrukce if(!orliMaso.moved) je zcela funkční a situace funguje tak jak má, metoda makePresent pohnutí orlího masa způsobí a potíž je vyřešena. Na druhou stranu if(orliMaso.location != nil) využít nemohu, zde se vždy provede blok za else a dostávám hned hlášení "Orlí jáma už mi pomohla dostatečně, vzhůru za dalším dobrodružstvím. " stejně jak by již akce byla provedena.

Referenční manuál mě tady trochu mátl, když si rozkliknu LieOnAction , vidím hnedle v záhlaví informaci:
class LieOnAction :   TAction      // after macro expansion
a poté prohlížím Superclass Tree - LieOnAction tedy dědí od TAction a Resolver a právě zde jsem byl zmaten tím, že pod BasicProd a Resolver vidím uvedeno object, hmm, teď je mi po Tvé informaci jasné, že se jedná o speciální třídu, kterou manuál uvádí, ale tuhle informaci jsem přehlédl. Tady je to trochu jinak, než v Javě, kde pokud dobře chápu jasně vidím rozdíl mezi třídami a objekty, ve Tvém manuálu jsem se ale dočet, že rozdíl mezi nimi je v TADSu mnohem menší, na to si budu muset zvyknout. Nevadí, mám alespoň možnost porovnat obé, tyto jazyky tvořili zkušení programátoři a určitě sakra dobře věděli proč zvolili právě tento styl.

V tomto konkrétním případě mě tedy zajímá metoda dobjFor(LieOn) - method of Thing in thing.t[10072], kde vidím Tebou popsané preCond a verify, ještě jednou jsem si projel Tvůj manuál, vše je vysvětleno v sekci Akce s objekty na akci "sněz jahody", paráda. Já jsem chybně chápal dobjFor() jako metodu, jasně, jedná se o zkratku nebo jak píše Erik v Getting Started na straně 71 makro, tady jsem si o propertysets přečetl více. Míchání dvou druhů akcí dohromady tedy není možné, chápu to snad správně jako pokus využít metodu třídy z jiné třídy, která jí nemá definovanou (ovšem to je případ z Javy, zde se jedná o makro).

Hmm, parser tedy nebude řvát, pokud metodu pojmenuji chybně, jasné, tady se jedná nikoliv o chybu v zápisu, ale v logice programu. Změna zápisu ifu vše vyřešila, jsem ale vděčný i za tuto informaci, teorii a nízkoúrovňovou logiku TADSu bych časem také rád pochopil, zdá se mi totiž, že OO jazyky jsou v této teorii o tom samém a jejich tvůrci se jen snaží přiohnout si je po svém, diskuze o tom "nej" jazyku jsou poté zcela zbytečné. Po Tvých informacích ještě více, než kdykoliv předtím vidím, že je opravdu jedno, jaký jazyk člověk zpočátku zvolí, TADS a Java se mi po praktickém využití každého z nich krásně spojí, musím jen co nejvíce programovat. A časem pochopím třeba i to, proč je Java tak ukecaná, ale díky tomu jednoduchá a čitelná pro čtení, proč se vývojáři jazyka C a následně C++ rozhodli pro své konstrukce nebo proč je Ada tak tvrdě striktní, ale např. pro mě ještě o chlup čitelnější, než zápis Javy. OOP bude možná přehlednější a pro budoucí rozšíření programu vhodnější, než strukturovaný zápis, to ale musím zjistit vlastní praxí, kdo ví a vše má svůj dobrý důvod.

Teď je drobet náročnější, že děti nejsou ve škole, takže na ranní vývojařinu mnoho času nezbývá, budu ale pokračovat jak budu moci, abych hru dokončil co nejdříve.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 6. Duben 2020 - 09:10
Na hře stále pracuji, děti máme doma a také tvořím nové stránky pro MŠ, postupuji však dále a to je hlavní. Setkal jsem se s pár záludnostmi u rozhovorů, všechny se mi podařilo dát dohromady, mnohdy stačí dát si oddych a další den řešení přijde, to asi zná každý z nás. Každopádně už se cítím mnohem jistější a mohu zúročit zkušenosti z Exotera, Tvého návodu a dalších her, takže se mi možná podaří hru dokončit bez dalších dotazů, uvidíme. Pomáhá i základní znalost Javy, konečně vidím tu výhodu OOP, programuje se mi díky němu přeci jen pohodlněji a orientace v kódu a v dokumentaci je mnohem snažší.

Mimochodem vyšla nová verze QTADS, jsou tam drobná vylepšení, hlavní však je, že se stále vyvíjí, k hraní na počítadle je to můj nejoblíbenější interpretr.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 19. Duben 2020 - 22:19
Pokračuji dále v tvorbě, již několik dní se snažím vyřešit správnou definici metody PresentLater, zde mě však zastavila nečekaná věc. Ve hře se vyskytuje místnost Napajedlo pro koně, kde se nacházejí otisky koňských kopyt. Pomocí dobjFor(LookIn) a příkazu "koukni se do otisků" (koukni se na otisky nelze využít, protože parser příkaz pochopí jako prozkoumej otisky) naleznu zvláštní stopu. Tu definuji stejně jako otisky s tím, že po příkazu koukni se do stopy by se mělo objevit houští. I přes definici stejné metody dobjFor(LookIn) , která funguje v předchozím případě se tak ale nestane a získávám stejnou odpověď, jako bych se již do stop díval, ale houští nevidím.

Toto chování je mi zatím nepochopitelné, když jediný rozdíl mezi objekty otiskyKonskychKopyt a zvlastniStopa je ten, že zvlastniStopa představuje PresentLater a stejně tak houští. Využívám zde kontejnerovou hierarchii a hra se v pořádku zkompiluje, výsledek je však následující:

// začátek transskriptu hry
Napajedlo pro koně
Mělká zátočina slouží koním jako napajedlo, což je vidět ze všudypřítomných otisků kopyt, které lovce opravdu zaujmou, ani neví jak. Momentálně tu žádný řechták není, koním dost dobře stačí i čerstvá orosená ranní tráva. Paprsky slunce se na hladině krásně lesknou.
Můžeš jít na severovýchod, východ a na jihozápad.

>prozkoumej otisky
Stopovat zde by bylo nemožné, vidíš nejrůznější mozaiku těch nejmenších poníkových i mohutných těžkých stop. Ale moment, jedna je taková zvláštní.

>koukni se na otisky
Stopovat zde by bylo nemožné, vidíš nejrůznější mozaiku těch nejmenších poníkových i mohutných těžkých stop. Ale moment, jedna je taková zvláštní.

>koukni se do otisků
Tady je jedna opravdu zvláštní stopa, která koním určitě nepatří.

>r
Napajedlo pro koně

Mělká zátočina slouží koním jako napajedlo, což je vidět ze všudypřítomných otisků kopyt, které lovce opravdu zaujmou, ani neví jak. Momentálně tu žádný řechták není, koním dost dobře stačí i čerstvá orosená ranní tráva. Paprsky slunce se na hladině krásně lesknou.
Můžeš jít na severovýchod, východ a na jihozápad.

>prozkoumej stopu
Jedna stopa se od ostatních dost liší, je mnohem menší a vypadá trochu jako psí. Téměř se ztrácí, ale když ji sleduješ, vypadá to, že někam vede.

>koukni se na stopu
Jedna stopa se od ostatních dost liší, je mnohem menší a vypadá trochu jako psí. Téměř se ztrácí, ale když ji sleduješ, vypadá to, že někam vede.

>koukni se do stopy
Stopa už Ti pomohla k nalezení toho, cos potřeboval vidět.

>prozkoumej houští
Nic takového jako „houští“ tu nevidíš.
// konec transskriptu hry

Mohu poprosit o kontrolu tohoto chování? Také jsem si všimnul, že pokud objekt definuji jako Immovable, CustomImmovable nebo Fixture, v textu nebo po příkazu "rozhlédni se" se nezobrazí, ale bez tohoto označení ano. Byl bych rád, aby byl vždy objekt, který hráč nalezl, viditelný, ale nebylo jej možné sebrat, zde se ještě zkusím juknout do knihovny, proč se tak děje.

V příloze jsem stejně jako minule připravil hru jen s několika místnostmi včetně Napajedla pro koně.
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 19. Duben 2020 - 23:02
příkazu "koukni se do otisků" (koukni se na otisky nelze využít, protože parser příkaz pochopí jako prozkoumej otisky) naleznu zvláštní stopu.

A nemáš to už trochu překombinované? Určitě by to chtělo takový příkaz hráče předem naučit a asi s nějakým synonymem, osobně bych doporučil třeba spíš vyjít z Readable a tedy příkaz "přečti stopy" a doplnit ho o synonyma a různá přeměrování, ale asi by mě nenapadlo to dávat do sebe jako kontejnery, to mi připadá zbytečné. (Asi jsi to udělal, abys měl povolený "podívej se do", ale to můžeš udělat i bez kontejneru.)

Tu definuji stejně jako otisky s tím, že po příkazu koukni se do stopy by se mělo objevit houští. I přes definici stejné metody dobjFor(LookIn) , která funguje v předchozím případě se tak ale nestane a získávám stejnou odpověď, jako bych se již do stop díval, ale houští nevidím.

Toto chování je mi zatím nepochopitelné, když jediný rozdíl mezi objekty otiskyKonskychKopyt a zvlastniStopa je ten, že zvlastniStopa představuje PresentLater a stejně tak houští. Využívám zde kontejnerovou hierarchii a hra se v pořádku zkompiluje, výsledek je však následující:

V TADSu jsou dvě třídy pro realizaci skrytých objektů. Hidden a PresentLater. Každá funguje trochu jinak a PresentLater funguje tím způsobem, že hra objekt přesune při kompilaci pryč (zvlastniStopa.location bude nil) a v okamžiku přesunutí zvlastniStopa.makePresent(); se vráti zpět. Jenže v ten okamžik se nemůžeš ptát if(zvlastniStopa.moved), protože jsi ji právě přesunul. Nechtěl ses ptát na housti.moved?

Také jsem si všimnul, že pokud objekt definuji jako Immovable, CustomImmovable nebo Fixture, v textu nebo po příkazu "rozhlédni se" se nezobrazí, ale bez tohoto označení ano. Byl bych rád, aby byl vždy objekt, který hráč nalezl, viditelný, ale nebylo jej možné sebrat, zde se ještě zkusím juknout do knihovny, proč se tak děje.

Ano, to tak je, protože se to předpokládá jako obvykle žádoucí, samozřejmě jde změnit nastavením nekteré z uvedených vlastností na true:

Kód: [Vybrat]
class NonPortable: Thing
    /*
     *   An immovable objects is not listed in room or container contents
     *   listings.  Since the object is immovable, it's in effect a
     *   permanent feature of its location, so it should be described as
     *   such: either directly as part of its location's description text,
     *   or via its own specialDesc. 
     */
    isListed = nil
    isListedInContents = nil
    isListedInInventory = nil

Pokud to uděláš, vylistuje se podobně, jako bežné položené předměty (vidíš tu...) Ale jak se praví v popisku, většinou spíš budeš chtít buď zapracovat popis stop přímo do popisu místnosti, nebo pokud se o nich chceš zmínit ve výpisu místnosti prominentně, tak nastav u stop specialDesc a z toho se pak udělá samostatný odstavec.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 20. Duben 2020 - 21:42
Moc děkuji za velmi rychlou odpověď, upřímně řečeno nešlo mi o povolení příkazu "podívej se do", ale kontejnerová hierarchie mě napadla hnedle poté, co jsem potřeboval postupně odhalovat nové objekty. Krásně mě totiž inšpirovala hra Heidi, kde je podobná situace využita u prstenu v hnízdě na stromě a já si po tom věčném študiu jejích zdrojáků a samozřejmě i Základny pár pasáží už pamatuju. Osobně mi právě kontejnery zde připadají přehledné, ale třeba se mýlím a je zde elegantnější řešení, zkusím se na něj ještě juknout (to bude asi ta refaktorizace = optimalizace kódu, kdy vymažu nadbytečný kód a nahradím jej štíhlejším, mám v el. podobně zajímavou knížku na toto téma s názvem Čistý kód - určena primárně pro Javu, ale našel jsem i ekvivalenty pro Python a C++, na vše se časem juknu).

Ajaj, u PresentLater jsem dopadl podobně jako předem u potíží s Orlí jámou, tam jsem nepochopil negaci a zde se ptám na již neexistující objekt Zvláštní stopa. Ano, housti.moved vše řeší a následná úprava dobjFor(LookIn) právě u houští s využitím if(bizoniKost.moved && chrestidlo.moved) také pomohla. Ještě jsem stopy označil jako Readable s tím, že příkaz "podívej se do" = "přečti", využití dobjFor(Read) asDobjFor(LookIn) zařídí vše potřebné, zde mám v Základě bezpočet příkladů. Ještě jednou jsem si přečetl sekci Hidden a PresentLater ve Tvém návodu, mix-in třída PresentLater v tomto případě řeší přesně to, co potřebuji.

Ano, já opravdu využívám u většiny objektů vlastnost CustomImmovable z třídy NonPortable, zkusil jsem si různé možnosti, ale nejvíce mi vyhovuje využití specialDesc u stopy a houští. Rád bych, ale se v reakci na rozvíjející se příběh tyto objekty ukazovaly a toto řešení je pro mé potřeby ideální (i když mohu pomocí ifů změnit i popis přímo v místnosti jak je to na více místech v Základně).

Já teď ve volných chvílích zkouším kromě TADSu i Javu a Python, rád se probírám definicemi OOP z různých pohledů, je to někdy docela terminologický guláš. Zatímco v Javě je mi rozdíl mezi třídou, objektem a metodou jasný, v Pythonu se, i když vše je objekt, setkávám mimo metody i s funkcemi a to ani nemluvím o OOP v Objektovém Pascalu nebo v Adě. Naštěstí je to stále o posílání zpráv objektům a využívání jejich metod, jen to musí jednomu docvaknout, viz můj dnešní a minulý dotaz. Každopádně i když mi to zpočátku přišlo trochu nereálné, dnes už vidím, že TADS3 se opravdu dá využít jako první jazyk pro výuku programování a principů OOP, to je paráda, jen to sakra trvá, už chápu, proč je programátorů stále nedostatek. Postupně jdu vyvíjet dále, baví mě to čím dál víc a to je hlavní.
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 20. Duben 2020 - 22:18
Moc děkuji za velmi rychlou odpověď, upřímně řečeno nešlo mi o povolení příkazu "podívej se do", ale kontejnerová hierarchie mě napadla hnedle poté, co jsem potřeboval postupně odhalovat nové objekty.

Asi to můžeš řešit i pomocí kontejnerové hierarchie, jen mi v tomto případě přišlo trochu nadbytečné. Určitě by kontejnery byly na místě, pokud bys měl třeba písek a stopy v písku nebo stopy na něčem, pak TADS umí chápat, že něco je v něčem (viz i příklad s prstenem v hnízdě) a třeba se ptát ">prozkoumej stopy / A které stopy máš na mysli, stopy v písku nebo stopy na mostě?" apod. Ve tvém příkladu ale jsou spíš tak jako vedle sebe, jen prozkoumáním jedněch si všimneš druhých.

PresentLater by fungoval, i kdyby objekty nebyly v sobě, jde jen o to na jaký příkaz pak pověsíš zviditelnění. Jediné co, že kontejner má povolený (verify) příkaz na podívej se do, takže to nemusíš dělat a napíšeš jen action(), tak ušetříš jeden řádek.

Ještě bych si také dával trochu pozor na slovník. Máš tam vidět objekt otisky, ale v popisu říkáš "i mohutných těžkých stop.". Zde prozrazuješ slovo "stopa" dřív, než hráč objeví zvláštní stopu a to může trochu zmást, protože se hráč může pokusit prozkoumat stopu dřív, než ji zviditelníš. Je dobré si trochu hlídat, jaká podstatná a přídavná jména v popisech píšeš.

Zatímco v Javě je mi rozdíl mezi třídou, objektem a metodou jasný, v Pythonu se...

V Pythonu je spousta WTF momentů... Ale jsem rád, že tě to baví.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 22. Duben 2020 - 21:07
Ano, souhlasím, já využívám kontejnery jakoby bez předmětů v nich, uvedl jsi pěkný příklad s tím pískem a stopami. Zde je nepotřebuji, stačí malá úprava, otisky a zvláštní stopu definuji pouze jako CustomImmovable, u stopy ještě Readable a objekt typu kontejner využiju jen u houští, které obsahuje další dva předměty, tam to dává smysl. Metodu PresentLater mám definovanou správně i bez kontejnerů, alespoň to tak vypadá, aktuální zdrojový soubor mistnostNapajedloProKone.t funguje nyní bez potíží.

Strašně moc Ti děkuji za parádní postřeh s těmi stopami, jasně, jako hráč bych je určitě zkusil prozkoumat ještě před kouknutím se do otisků. Tohle si musím hlídat, ještě projedu všechny zdrojáky, kde by se tento problém mohl vyskytnout - je více, než možné, že to nebude jediný případ. Nechtěl jsem zatím zveřejňovat žádné zdrojáky, ale co se dá dělat, takhle to je lepší a věřím, že si hru užiješ, je toho tam naštěstí mnohem více, než jen orlí jámy a pár řechtákových stop.

He, he, to jsi mě pobavil, na WTF momenty jako začátečník narážím ve všech jazycích, vím ale, že jsme se v minulosti o tomto bavili a doporučoval jsi začít nějakým neskriptovacím. Já tak nějak tuším, že Python není ouplně to nej pro začátečníka, už jen když se juknu na zdroják v Javě, je pro mě koukatelnější, než třeba Pythoňácký, na to si ale zvyknu - každopádně kdo ví, Python se k výuce využívá dnes asi docela často a důvod zde určitě bude (minimálně ta interaktivní konzole stojí za to, i když např. v Javě mám JSHELL). Každopádně Java se mi zdá fajn tak nějak na všechno (plus výborné příručky a bezva IDE), ale Python ať už je jakýkoliv, má obrovskou komunitu včetně české (Pyladies, Czechitas, kurzy KSP). Bez Tebe bych se v TADSu moc daleko nedostal, se dvěma výše uvedenými jazyky se také pomoci dočkám, takže proč do toho nejít (a můžu prozkoumávat i opravdu veliké projekty typu IS, v Pythonu Odoo a v Javě třeba A(I)dempiere). Stejně jde hlavně o princip, zaměřil jsem se na OOP, který mě svým stylem zaujal a pak už ho jen naroubuju na konkrétní jazyk (a je mi fuk, zda to bude C++, Ada nebo Objektový Pascal, všechny mají něco do sebe a třeba Pascal s Adou u mě díky svému užvatlanému stylu begin - end nebo neustálému with - use bodují v čitelnosti i na Javou).

Jo, vývojařina mě baví, linux už jsem si vybral, i když to trvalo pár let zkoušení - Arch mi sedne opravdu na všechno a zvládnu v něm vše, co potřebuji, ohledně jazyka uvidím později. Žádný systém nebo jazyk není lepší nebo horší stejně jako vše ostatní v životě, takhle to beru a je mi hej. Vývojařinu není problém spojit s rodinou, koňmi i dalšími zájmy, když opravdu chci, čas si vždy najdu.

Měl bych dotaz na Klub Kapsa, je na něj odkaz z tads.cz a už dříve jsem jeho stránky prozkoumal. Fungujete stále (teď třeba vzdáleně) s využitím C++ a grafických knihoven s IDE QT Creator? Teď jsem zjistil, že je k mání i kroužek Pythonu pro mladší účastníky. Mě by zajímaly reakce dětí, jak se na tyto jazyky dívají a zda se pro výuku osvědčily? Dříve jsem na táborech dětem také v učebně ukazoval něco v linuxu a počítačovém mapování, teď už sotva stíháme program venku a u koní, takže jsem počítadla zcela vyškrtnul, proto by mě zajímaly Tvé zkušenosti.
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 22. Duben 2020 - 23:38
He, he, to jsi mě pobavil, na WTF momenty jako začátečník narážím ve všech jazycích, vím ale, že jsme se v minulosti o tomto bavili a doporučoval jsi začít nějakým neskriptovacím.

Můj poslední WTF v Pythonu byl, když jsem si udělal dvě úplně stejné globální proměnné (byly to kurzory mysqldb) a když jsem je použil úplně stejným způsobem z funkce, tak jeden fungoval a druhý mi řekl, že používám nedeklarovanou lokální proměnnou.

Měl bych dotaz na Klub Kapsa, je na něj odkaz z tads.cz a už dříve jsem jeho stránky prozkoumal. Fungujete stále (teď třeba vzdáleně) s využitím C++ a grafických knihoven s IDE QT Creator? Teď jsem zjistil, že je k mání i kroužek Pythonu pro mladší účastníky. Mě by zajímaly reakce dětí, jak se na tyto jazyky dívají a zda se pro výuku osvědčily? Dříve jsem na táborech dětem také v učebně ukazoval něco v linuxu a počítačovém mapování, teď už sotva stíháme program venku a u koní, takže jsem počítadla zcela vyškrtnul, proto by mě zajímaly Tvé zkušenosti.

No, teď je činnost kvůli zákazu vycházení pozastavená, ale já se přesto snažím kroužek i tak učit online formou, což je pochopitelně o dost složitější. Zítra budeme mít hodinu s letošníma začátečníkama a sešla se docela dobrá parta, někteří se spolu dokonce znají, což je víc motivuje. Kroužek C++ je můj, Python učí kolega. On to má postavené pro ty mladší kolem 6. třídy, takže na to jde pomalejš a dělají více izolovaných příkladů, u mě začínají zpravidla tak osmáci a jdeme postupně spíš do větší práce, kterou společně tvoříme a přitom se učíme nové věci. Moc je nešetřím, leccos si musí vydedukovat. Co na to říkají nevím, nemají čas moc mluvit, ale jestli chceš, tak se jich přijď zeptat (napiš do mailu).

Ne vážně, na programovacím jazyku tolik nezáleží, já to C++ mám poměrně rád, protože se s ním dají celkem dobře dělat jednoduché hry, ale ve výsledku učím dost osekanou podmnožinu a kolikrát mi jde víc o pochopení toho, jak to funguje na pozadí, než abych je naučil nějakou finesu jazyka samotného. Ty širší souvislosti jsou pro mě důležitější.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 23. Duben 2020 - 20:48
Jo, tak to Tvoje rozčarování Pythonem chápu, když jazyk použije stejně deklarované globální proměnné jednou tak a jednou jinak bude asi trochu vošajstlich, schválně jsem si zkusil něco v tomto duchu zadat do vyhledávače a trochu si početl:

https://stackabuse.com/local-and-global-variables-in-python/

plus jsem jen ze zvědavosti projel jeden odkaz ze stackoverflow:

https://stackoverflow.com/questions/52413337/python-variable-not-defined-within-function/52413443

Nezkusil ses na tohle chování zeptat třeba právě na výše uvedeném serveru? Zrovna v Pythonu by bylo divné, kdyby se s něčím takovým nikdo nesetkal. Mě docela dostala ta terminologie ohledně funkcí a metod, čekal bych spíš, že v plně OOP jazyce funkce nebudou, to jsou ale naštěstí jen prkotiny, na které se dá zvyknout.


Ano, to je paráda, že můžeš učit alespoň přes internet, u mě se na koních tímhle stylem jezdí drobet hůř. Pokud se děcka stále setkávají, je to paráda, to je to nej na každém klubu, moc jsi mě pobavil s tím "nemají čas moc mluvit", ale chápu, u mě je to podobné, táborníci si mohou žvatlat co chtějí, ale musím je utahat, aby mi nerozbili barák. Ohledně jazyka jsem přesně něco takového četl a posté slyšel od autora knihy Java 7 - Učebnice objektové architektury pro začátečníky, jde o to pochopit princip a pak už se stačí seznámit jen s jednotlivými odlišnostmi jazyků (a naučit se jejich přednosti, případně je spojit a využít obou - třeba tady se mi moc líbí CPython). Proto mě tak baví TADS, který dokáže pro moje zájmy neuvěřitelné věci, jeho OOP principy využiji v C++ a Javě plus následně si budu moci sáhnout na tu zajímavou Adu:

https://learn.adacore.com/pdf_books/courses/Ada_For_The_CPP_Java_Developer.pdf

a to samé Python, který mohu propojit třeba s C díky výše uvedenému a pomocí C++ se třeba pěkně vrátím zase směrem k Javě.

Na druhou stranu nelze přehlédnout, že mě baví Linux a Windows nebo Android sleduji jen z povzdálí, nakousnutého jabkouna už vůbec. Tady to bez Cčka opravdu nepůjde a protože chci vědět jak systém funguje, nelze jinak (pokusy o OS v Pascalu nebo v Adě jsou spíše testovací projekty). Ptal jsem se na klub taky proto, neb většinou vidím u začátečníků Javu nebo dnes spíše ten Python a když se upřímně juknu na aplikace, které mě zajímají, tedy prostředí Trinity desktop, astronomické Stellarium nebo mapový QGIS, C++ bude třeba (a např. pomocí zajímavého Treefrog frameworku si sáhnu i na ty dnes tak oblíbené aplikace pro web). IDE jsou dle mého názoru na úrovni Javy (teď koukám, že nový QT Creator už má i svůj Marketplace, všichni se tak krásně vopičí) a i přes snahy nahradit C++ třeba Javou, Go nebo Rustem tenhle vesele žije a stále se vyvíjí, což je skvělý ukazatel jeho kvalit, ono to s tou jeho složitostí také nebude tak horké, když právě pochopím princip.

Bezva, díky za zaslané zkušenosti, půjdu zase tvořit a študovat dál.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 14. Květen 2020 - 20:07
Hru stále tvořím, teď to jde krapet pomaleji, kromě toho, že máme dětičky stále doma pomáhám s testováním nové Pythoní knížky, tvořím web pro MŠ a začaly individuální jízdy na koních plus příprava táborů, na Orla dvojku ale nezapomínám a postupně budu pokračovat dále. Už se moc těším, až vydám plně hratelnou verzi.
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 14. Květen 2020 - 21:03
Jasně, držím palce! A už jsem alespoň v té fázi posledních 20 % programování, které trvá 80 % času?
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 19. Květen 2020 - 10:06
He, he, tak to na mě sedí. Ale hru dokončím, i kdyby trakaře padaly, jen je to s ratolestmi doma časově náročnější plus všechny koňské akce z března a dubna se vesele valí. Ale nevadí, scénář je již dávno hotový, už "jen" vše doprogramovat. Každopádně vycházejí stále nové textovky, moc se těším, až vyzkouším Nové Kainovo dobrodružství, ale až po práci. Za chvíli jedeme zase na řechtácích a poté hlídám dcérenku, zítra už zase budu pokračovat, už se těším.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 15. Červen 2020 - 12:16
Krásné ránko přeji,

tvorba se pomalu, ale jistě chýlí ke konci, už mám jen dva týdny, než začne letní tábor a pak už opravdu neudělám nic. Téměř denně jezdíme, ale vždy ve volné chvíli pokračuji v tvorbě, koncem příštího týdne těsně před nástupem táborníků hru vydám - i třeba bez kompletní nápovědy (využiji tu stávající a pokud budu moci, lehce upravím), počítání skóre nebo bez tipů (s těmi ještě uvidím, naštěstí není problém je časem dokončit), hlavně aby šla hrát a hráče alespoň trochu bavila. Tvorbu rozhovorů už jsem docela pobral, takže by neměl být problém, ještě s nimi propojím pár klíčových předmětů a akcí, závěrečné testování a bude možno hrát, naštěstí určité zkušenosti s OOP už díky Tobě,  Javě a Pythonu mám, takže OK.

Moc jsem si oblíbil QT Creator, po táborech se pořádně vrhnu na C a především C++. Zjistil jsem totiž, že drtivá většina programů, které využívám, představuje kombinaci C++ a QT5 (QTads, QCad, FocusWriter, LyX, QGis, Stellarium, VLC), případně Pythonu a QT5 (Callibre, PGAdmin, Jupyter QT Console) a protože Linux na dlouhou dobu určitě neopustím, není co řešit plus pro mé starší stroje se jedná o jistě parádní řešení. I když zkouším různá IDE, QT Creator mě oslovuje čím dál více (nejen pro TADS, ale u C++ určitě využiji parádní UML modeláře, profiler a bezvadnou offline dokumentaci) a nedivím se, že jste se pro něj rozhodli v kombinaci s grafickou knihovou SDL (ta je pokud se nemejlim i u Pedrova TXT Engine) i na Kapse. Jak vidno, QT opravdu frčí a dnes už nejen na klasických desktopech a i přes zpoplatnění LTS verze (podobně jako u Javy, obě firmy naprosto chápu, musejí vydělávat) mi přijde jako velmi zajímavá kombinace. Když vidím to obrovské množství parádních příkladů a návodů právě z QT Creatoru, je vidět, že aplikace, které budu chtít vytvářet/upravovat toto kombo krásně pokryje.

Máš nějaké zkušenosti s vývojem v QT5, nezkoušeli jste s ním pracovat i na Kapse (je mi jasné, že práce s SDL bude určitě snadnější, ale co kdyby)? Je zde i starší zajímavý fork QT3 s názvem TQT3 využívaný v prostředí Trinity, ten je ale spíše udržovaný, než vyvíjený (což samozřejmě nemusí být na škodu) a moc bych rád slyšel názor od někoho, kdo s C++ léta pracuje.

Zatím se loučím a jdu zase pokračovat

Název: Re: Kroužící orel 2
Přispěvatel: panprase 15. Červen 2020 - 18:12
No supr, už se těším na indiány zase :) píšu si - příští týden nic nevydávat. A´t se to nemíchá.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 16. Červen 2020 - 12:07
Máš recht, indiánů i koní si užiješ dosytosti. Druhý díl se stejně jako první odehrává v parném létě, ten třetí už zasadím do pořádné zimy, ať se pomalu připravíme na východní frontu. Moc mě zajímá jak bude TADS přijat vedle parádního TXT engine i dalšími textovkáři, mě se jeho OOP styl líbí čím dál víc a jeho možnosti využiju tak sotva z poloviny.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 19. Červen 2020 - 12:05
Kroužící orel 2 - vydání nedokončené hry

Je mi moc líto, ale do začátku prázdnin naprosto nemám šanci hru vydat, i když jsem v to doufal - vzhledem k neustále se měnícím situacím tohoto roku plus opravdu nejsem schopen u pro mě tak rozsáhlého projektu se zatím malými vývojářskými zkušenostmi odhadnout čas tvorby. Do začátku táborů musím vyřešit strouhání kopyt koní (3 kopytáři v okrese vypadli), původně zářijové školní soustředění u koní se přesouvá na příští týden kvůli změně programu a já budu mít na tu nejnutnější závěrečnou přípravu táborů pouze 3 dny (naštěstí to nejdůležitější už je připraveno), takový je život.

Ale abych neskuhral, ideální řešení pro tuto chvíli se mi zdá vydat hru tak jak je včetně scénáře, doprovodných textů a zdrojových kódů. Vše jsem co nejpřehledněji rozdělil a níže popisuji, co se v přiloženém archivu nachází. Atmosféru hry si lze užít už nyní, kdo má zájem, může se začíst do téměř 100 stránkového scénáře a prozkoumat zdrojové kódy. V tvorbě budu zase pokračovat po letních táborech, kdy je na počítačové záležitosti vždy více času, má-li však kdokoliv zájem s vývojem pomoci, je velmi vítán.

TADS3 přestavuje opravdu regulérní programování ála C++ nebo Java (jen manuály vydají na parádně silnou vývojářskou bichli), kdo zná konstrukce např. z těchto jazyků, bude se zde cítit jako doma. Já jako začínající vývojář musím nad mnoha konstrukcemi dlouho dumat a vývoj se tak prodlužuje, to je ale daní za velmi komplexní jazyk (a musím uznat, že opravdu špičkový). Vyvíjím v Linuxu (Arch Linux, interpretr frobtads 1.2.4, editor Pluma z grafického prostředí MATE nebo QT Creator, pro hraní využívám QTads nebo řádkový frobtads, zjistil jsem, že starý dobrý windowsí TADS Workbench už téměr nevyužívám). Všechny txt soubory jsem pro jistotu převedl do Win kódování. Inspirací je mi především Základna na Asteroidu, Dobrodružství Heidi a moje prvotina Exoter, více info zde na fóru nebo na stránkách www.tads.cz .



Následuje slíbený popis adresářů seřazený abecedně:

Informace k tvorbě - zde je k mání návod na TADS3 od Gaspody, nastavení editoru QT Creator a technické informace ohledně kódování nebo mluvnice

Mapa - mapa vytvořená v programu Trizbort, který z ní dokáže vytvořit kostru lokací mimo jiné i pro TADS3

Scénář - pdf soubory představují vlastní scénář i s nástinem světových stran (zde jsem však využil Trizbort), popis předmětů a návod k úspěšnému projití hry. Důležitý pro aktuální vývoj je soubor 2 díl - Indiánská vesnice vč. světových stran.txt, právě ten slouží k vývoji nedokončených místností, předmětů a situací. Na první pohled veliký, jedná se ale především o nedokončené rozhovory a akce, které už nestihnu doprogramovat

Spustitelná hra - zde je t3 binární soubor spustitelný v některém z interpretů

Testy situací - adresář s minimálním počtem místností, kde testuji situaci, kterou právě programuji (rozhovor, reakce postav, akce s předměty apod.). Zde jsem řešil vše, nač jsem se ptal na fóru, je to můj způsob testování vždy jen konkrétního úseku hry, který poté, co projde, přidám do hlavních zdrojových kódů

Zdrojové kódy - tyto lze pomocí příkazu t3make nebo ve Workbenchi bez chyb zkompilovat a získat t3 binárku, v soboru Makefile.t3m jsou všechny uvedeny. Zvolil jsem velbloudí notaci, nacházejí se zde místnosti, postavy a jedna externí třída, kterou využívám pro popis a akci s oděvy.



Snad jsem na nic podstatného nezapomněl, pokud někomu i tento nedodělek udělá radost, splnil svůj účel. Jakékoliv dotazy zodpovím, chce-li se někdo zapojit do vývoje, bude to paráda, jinak budu pokračovat během září. Máte-li kdokoliv v nejbližších dnech v plánu vydat jinou textovku, určitě s chutí do toho.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 31. Srpen 2020 - 16:22
Zdravím na textovkách,

prázdniny dopadly parádně, většina táborníků spokojena a tak to má být. Nyní se, jak jsem slíbil, mohu zase vrhnout na vývojařinu, vidím, že si pár lidí scénář i zdrojáky stáhlo. Znovu jsem si nastavil QT Creator (tohle prostředí se mi líbí čím dál více, kromě parádně integrované dokumentace také pro podporu Language server protokolu, takže kromě Cčka krásně funguje Java i Python) včetně testů, vývoj teď už půjde rychle. Ještě testuji druhou novou knížku o Pythonu a začátkem října mě čeká to samé s Javou, TADS má ale zatím přednost, ať dokončím, co jsem začal.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 16. Září 2020 - 12:50
Tvorba krásně pokračuje, projekt takové textovky je ale pro mě opravdu rozsáhlý a jeho skutečnou velikost si uvědomuji až při samotné tvorbě (jo, jo, říkal jsem si "textovka, to nic není", to ale v současném TADSu opravdu neplatí). Paralelně študuji Javu, nedá se nic dělat, už mám naplánované termíny školení i lektoraci nové knížky, to ale vůbec nevadí, oba jazyky jsou si velmi podobné a zkušenosti nasbírané v jednom z nich využiji i v tom druhém.

Pro větší přehlednost jsem celý projekt vystavil na Githubu:

https://github.com/krouziciorel/Krorel2

a tam budu postupně zanášet další změny. K mání je to podstatné, zdrojové kódy a binárka, mapa, návod a příběh ke hře.

Svět IT je holt dnes moc rozsáhlý a i když mě zajímají nejrůznější technologie (různé Linuxy a UNIXy, jazyky C, C++, Ada, Java, Python, TADS. rozhraní QT, GTK, objektový Pascal a Lazarus, Javascript a webové technologie apod.), není v mých silách vše zmáknout, takže jsem se uklidnil a v Arch Linuxu budu nyní pracovat s Javou, TADS3 a následně s Pythonem, získat programovací gró je to hlavní.

Také jsem se donutil opravdu pečlivě číst originální dokumentaci od Eveho a vyplatí se, např. nyní v Getting started in TADS3 jsem si konečně u vytváření rozhovorů uvědomil výhodu OOP před vývojem procedurálním (str. 94).  To je OK, Java, TADS3 i Python s podobnou metodikou počítají a i když určitě není dokonalá jako nic jiného na světě, přehlednost konečně vidím na konkrétním příkladě a to je jen dobře.

Při každé další větší aktualizaci zase zveřejním report, každopádně jak jsem již uváděl před prázdninami, hra je plně hratelná už teď.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 23. Listopad 2020 - 23:30
Tak děti nám konečně již brzy půjdou do školy a místo řádění v MS Teams a učitelování mohu pokračovat ve vývojařině. Vždy, když se na dílko juknu po nějakém čase, napadají mě nejen novinky, ale také věci, které je třeba opravit - podle popisu lokací a předmětů z tads.cz jsem sjednotil názvy předmětů i místností, tím se hra i zdrojové kódy zase o něco zpřehlednily.

Vím, že tvorba mi jde neskutečně pomalu, kromě domácích záležitostí ale vše kombinuji s objektovými jazyky, teď už jsem ve fázi, že je mi vcelku fuk, zda něco vytvářím (mnohem častěji však upravuji) v C++, Pythonu nebo v Javě, teoretické zkušenosti z těchto jazyků parádně vidím v praxi přesně tak jak popisuje GETTING STARTED IN TADS 3 v kapitolách PROGRAMMING PROLEGOMENA a FURTHER PROGRAMMING CONCEPTS AND CONSTRUCTS. A to je ono, bezvadně vytvořený OOP jazyk TADS3 všechny konstrukce parádně ukazuje v praxi a přesně tato výuka mi sedne.

Z vynikajícího QT Creatoru jsem zatím přešel na VSCode s velmi základním TADS3 rozšířením, zde mohu využít alespoň nějakou kompletaci textu a rozhraní mi přijde drobet přehlednější. Na druhou stranu až budu tvořit něco v C++ a QT, vesele se vrátím zpátky, je bezva, že každý editor je vhodný na něco jiného a dnešní výběr je obrovský.

Na Github jsem umístil aktuální zdrojáky včetně plně funkční hry a budu zase pokračovat, naštěstí pomalu začíná zimní sezóna a v kombinaci s dětmi ve škole se zase dostanu dále. Vidím, že tvorba ve výborném TXT Enginu pokračuje mílovými kroky a to je dobře, po práci si zase rád něco zahraji. Už mám ale plány na třetí závěrečný díl, který budu koncipovat trošku jinak, soustředit se pouze na vyprávění a především komunikaci s postavami s minimem hlavolamů tak, jak Gaspoda uvádí v úvodu svého manuálu, mě stále více láká.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 14. Leden 2021 - 21:10
Už raději nebudu psát termíny, dnešní už téměř rok trvající veselá doba rodiče a majitele řechtáků parádně prohání. Stále pročítám obrovské pdf texty dokumentace k TADS3, jak vidno, OOP věci typu polymorfizmus, vícenásobné dědění apod. zde autor popisuje také, jen je toho opravdu moc. Našel jsem i diagram TADS3 tříd (snad aktuální), pro zajímavost posílám v příloze.

Po získání základních zkušeností s architektorou, Pythonem a Javou jsem se vrhnul na staré dobré klasické C, to si projedu pořádně, abych pochopil jak a proč se jazyky vyvíjely (a sranda je, že i zde se dá programovat objektově, i když upřímně řečeno zase tak markantní rozdíl mezi strukturovaným a OOP stylem nevidím). Mezitím budu stále řádit v TADSu, ale to nějaký čas potrvá, ještě, že tu máme parádní hry v TXT engine, já však TADS nemohu opustit, díky němu jsem se vývojařiny dostal a jeho možnosti časem využiji mnohem více. O dalším postupu ve hře budu jako vždy informovat, malé změny zde jsou (a díky těm obrovským manuálům už jsem zvládnul i střídání dne a noci, hurá). Takže to vypadá na kombo C, C++, Python a taky ta Java (pro kterou však mám jen malé využití, opravdu spíše do firem) plus TADS, tohle v kombinaci s Archem už konečně představuje to, kam se mám vydat.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 8. Únor 2021 - 23:39
Studium "základního" C čka se opravdu vyplácí, člověk hnedle vidí jak ty linuxy fungují a také proč se autoři modernějších jazyků rozhodli pro GC a snaží se nás pokud možno netrápit těmi zlobivými ukazateli...

Ale zpátky k TADS, teď už konečně mnohem lépe chápu, proč věci uvnitř fungují tak jak mají. V jednom z minulých příspěvků jsem psal o tom, že bych rád hru rozšířil na denní a noční lokace, jen jsem nevěděl kudy kam. Teď po nabrání dalších zkušeností už je to jasné, i v manuálech je krásně psáno, že pro temnou místnost mohu definovat třídu DarkRoom, ale klidně i OutdoorRoom s využitím vlastnosti brightness - jasně, DarkRoom dědí z Room a brightness si nese sebou. A protože stále čtu o neopakovacím principu DRY, není zrovna vhodné tvořit vždy dva druhy místností, světlou a tmavou s velmi podobnou definicí. Vlastnosti jsou tu konec konců proto, aby se měnily, to už byl jen skok k příkladu, který jsem našel v jedné starší hře:

brightness = (nahrdelnik.isWornBy(me) ? 1 : 3)

Pro případné zájemce zasílám v příloze oba testovací soubory, kterých se změna týká, hra tedy bude zohledňovat den a noc dle původního plánu. Po taneční slavnosti a získání jednoho důležitého předmětu, který pak nebude možné svléknout a tedy ani položit, se herní svět ponoří do tmy, tuhle vychytávku budu sakra často využívat i u dalších her.

Takže tvorba se zase posunula kousek dál, teď zpětně vidím, že TADS3 bych jako jediný programovací jazyk nedal, potřeboval jsem se podívat i jinam. Jen pro představu, pokud někdo chcete v TADSu pracovat, jeho počet tříd je téměř stejný jako u mého oblíbeného QGISu, což je projekt jako poleno, takže tady se bez pořádných zkušeností člověk opravdu nechytá. Už chápu, proč tolik lidí TADS opustilo, můj druhý oblíbený TXT engine bude určitě mnohem stravitelnější. Ale ty možnosti TADSu a nyní už i velmi logické OOP, ach jo...

Název: Re: Kroužící orel 2
Přispěvatel: panprase 9. Únor 2021 - 20:47
Mno to je zajímavý tohlecto, noc - den, déšť - slunce, léto - zima. Asi tuším jak bych to vyřešil v TXT :)  a Wolf si píše do todo, funkce weather :) tedy až po tom co dorazí dvě věci co rok slibuje!
Název: Re: Kroužící orel 2
Přispěvatel: KaiN 10. Únor 2021 - 21:29
No, nechci být ošklivý, ale k čemu tohle je? Postavy mých her v noci spí, za deště nevycházejí ven a svá dobrodružství stihnou během několika málo dnů, pokud ne během dne jediného.  :) Ostatně taková Hra o trůny, nebo jak se to jmenovalo, tam snad od prvního dílu všichni povídají, že přichází zima, a trvá jí to zřejmě několik let, než konečně přijde. :)
Název: Re: Kroužící orel 2
Přispěvatel: pedromagician 10. Únor 2021 - 22:45
Hra o trony fakt pobavila ;) znie to zaujimavo ale co to znamena pre hraca ked prsi? Co znamena noc? npr. nevidi predmety?

Odoslané pomocou Tapatalku
Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 10. Únor 2021 - 23:22
Co znamena noc? npr. nevidi predmety?

Nemohu mluvit za Orla, co přesně má za záměr. Někdy stačí zmínit podmínky jen ve vyprávění, někdy udělat nějaké dekorace,...

Ale když odpovím obecně o TADSu a z té technicistní stránky, tak rozlišuje několik úrovní světla, která vydává objekt (0-4).  Třeba pokud je v místnosti tma (např. sklep), tak aby sis mohl rozsvítit baterkou ev. abys mohl schodišti, po kterém jsi přišel, říci, že je ve tmě vidět, i když jiné předměty ne apod.

On TADS má poměrně dost těchhle nástrojů, které pro někoho až moc detailně simulují "fyziku světa", ale v konečném výsledku nejde o to hráče ohromit, co všechno jak detailně se simuluje, ale naopak se prostě jen chovat přirozeně, tj. tak, jak hráč čeká, tedy vyhnout se zjevně nesmyslným reakcím typu že by hra řekla, že nic nevidíš a když řekneš prozkoumej, tak jsi mohl prozkoumat cokoliv nebo že by hra řekla, že se ocitl v temné místnosti a ty se nemohl vrátit. Pro programátora to znamená, že dá místnosti jas 0, schodišti 1 a baterce 3, o zbytek se postará knihovna automaticky.
Název: Re: Kroužící orel 2
Přispěvatel: pedromagician 11. Únor 2021 - 09:14
To znie zaujimavo. Co urobi predmet so svetlom 2, siri ho aj na ine predmety? Aký je rozdiel medzi 2 a 3? Diky ;)

Odoslané pomocou Tapatalku

Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 11. Únor 2021 - 09:30
0: Objekt nevydává vůbec žádné světlo.
1: Objekt je sám vidět, ale neosvítí nic jiného.
2: Objekt vydává trochu světla, takže osvítí sebe i blízké věci, ale jen málo. Dost abys je viděl v hrubých obrysech, ale ne dost na některé akce typu čtení, které vyžadují více světla. Také neprojde přes překážku, resp. médium, které světlo snižuje.
3: Objekt vydává střední množství světla, takže se dá i číst, ale světelné překážky redukují na úroveň 2.
4: Objekt vydává silné světlo. Překážky snižují osvětlení na 3.
Název: Re: Kroužící orel 2
Přispěvatel: pedromagician 11. Únor 2021 - 09:36
Zaujimave, pisem si do ToDo diky :)

Odoslané pomocou Tapatalku

Název: Re: Kroužící orel 2
Přispěvatel: gaspoda 11. Únor 2021 - 16:05
Dobře, jsem rád, že zaujalo. Příště si můžeme probrat, jak se po TADSovské hře šíří smrad :-)
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 11. Únor 2021 - 22:08
Zdravím Vás, pánové,

děkuji za postřehy, parádně jste mě pobavili. Přesně jak píše Gaspoda, tenhle jazyk se snaží vopravdu simulovat skutečný svět a to tím stylem, že člověku voči přecházejí z těch možností. Jen jsem se musel hecnout a alespoň zčásti profrčet všechny manuály:

Getting started in TADS3 - 184 stran
Learning T3 - 341 stran
T3 Tour Guide - 340 stran
Technical manual - 339 stran
a abychom se my systémáci nenudili, do pdf jsem zkonvertoval i TADS 3 System Manual se sympatickými 824 stranami plus počet tříd se blíží, jak uvádím v předchozím příspěvku, obrovskému QGISu, jehož možnosti jsou asi stejně nekonečné

Tady najdete nejen popis všech možných vychytávek pro hru, ale i návody typu Ahoj světe, datové typy, podmínky, dědičnost, polymorfyzmus a podobně, což teď po naučení se základům Javy a Pythonu konečně pobírám (jo, i tyhle jazyky mají tak krásně tlusné učebnice, uff, ještě, že mám rodinu a koně, kteří mě umějí parádně usměrnit). A před těmi málo šílenci, co tohle vytvořili a skvěle zdokumentovali, smekám svou novou liščí čapku. Jen škoda ta minimální podpora v různých IDE, kdyby autoři použili třeba Javu, Cpp nebo i Python, programovalo by se sakra líp.

Oč mi jde a k čemu tohle je (jen mi Kaine neříkej, že Tvoje chlípné postavy v noci chrní :P) - hra začíná ve dne, ale pořádná slavnost, ke které příběh spěje, se provádí v noci, takže po ní bych rád hru překopal právě do této doby. Protože někteří autoři učebnic určitě správně argumentují tím, že bych se měl držet metodiky DRY, nerad bych každou místnost tvořil 2x. A tady mi TADS parádně vychází vstříc, použiji jedinou třídu Room/OutdoorRoom s vlastností brighness s možnostmi, které hezky popisuje Tomáš. Mě jde teď o to, aby hra po provedené slavnosti přešla do nočního módu - stejné lokace, ale s jiným popisem a vidět bude mnohem méně, díky OOP mohu, ale nemusím využít třídu DarkRoom. Pokusím se také slunce nahradit měsícem, to by zde neměl být problém.

Další hra Otěžemi zimní noci bude právě opačná, začneme v noci a pokračování bude ve dne a třeba potom zase noc, uvidíme. Je to stejné jako v Bad Nightu, který se odehrával také v noci a až po porážce milého Dragirose hráč vyšel ven na světlo, TADS mi ale nabízí mnohem víc a to přímo ve hře. Taky divoká vánice v zimních nočních horách bude krásně popsaná, protože systém umožňuje prozkoumat, popsat a reagovat opravdu na vše, co potřebuji.

Stal jsem se totiž, a proč to nepřiznat, vobjetí příliš velikého projektu, který jsem si na sebe ušil, zase přesně tak jak se píše v chytrých knížkách. Předělávku Exotera za mě vlastně naprogramoval Tomáš, protože jsem krom základního popisu místností nedal téměř nic. A dobře mi tak, jinak bych se dál nedostal. A Orel 2 trvá tak dlouho mimo jiné i proto, že já trouba furt vejrám do výše uvedených manuálů, kde se dozvím zase nějakou novou vychytávku, kterou bych rád zkusil (a raději hned, protože už vidím její využití v další hře). Viz poslední příspěvek Toma, smrádeček má na starost třída Odor, případně SimpleOdor a schválně si ve výše uvedených manuálech můžete najít, co umí. Což mě přivádí na další hříšnou myšlenku, ve hře je kvalitně kadící poník a i když koblihy mých miláčků moc cejtit nejsou (no, jenom zpočátku, ale na druhou stranu pokud je táborník lapne do pařátu ještě čerstvé, vyslouží si poctivých 20 bodů), tuhle třídu prostě nelze opomenout.

Denní dobu tedy prosím zaimplementýrovat i do bezvadného TXT Engine plus cokoliv dalšího z TADS, jen bacha, aby to moc nenabobtnalo. Pro lepší přehled, co tahle legrácka nabízí, doporučuji juknout do T3 Tour Guide alespoň na osnovu. Já si taky někdy říkám, že bych časem TADS přepsal třeba do Javy, velmi rychle se ale uklidním a raději tvořím :-[.

Suma sumárum hru světla a tmy, čichové a zrakové vjemy, pocity, věci okolo typu hory a měsíc, práce s provazy a všemožnými kontejnery a především naprosto parádní dialogy budu postupně objevovat a dávat i do dalších her, které mám v plánu, po Otěžích a třetím dílu Orla bych rád něco z Tolkienova světa, třeba elfí putování Temným hvozdem (a zimními horami tohoto hvozdu, já jako fanda do Východní fronty prostě tu zimu musím) nebo bělouše a rudouše z ruské občanské války, no, nuda nebude.
Název: Re: Kroužící orel 2
Přispěvatel: KaiN 18. Únor 2021 - 15:52
Tak to s tou baterkou ve tmě je zajímavé, ale já si přeci jen ve svých hrách vystačím s "binárním" přístupem, tj. "tma = nevstupovat, světlo = vstup povolen". Umím si představit, že bych temnou ale přístupnou místnost realizoval v TXT přes #Visibility objektů v místnosti, kterážto vlastnost by se hromadně zapínala/vypínala přes #setObject v závislosti na tom, zda je v místnosti zapnutý zdroj světla (baterka, pochodeň, zapnutý vypínač u lustru...), ale je fakt, že tento přístup se nedá aplikovat na předměty v inventáři, tam by se asi muselo krapet krkolomně dát do presetu objektů do #examineverify ověření, zda nejsem v temné místnosti bez světla... No nic, tady je blog o TADS a tohle je tudíž off topic.  :)

Chlípné postavy v mých hrách? Vůbec nevím, o čem mluvíš, orle.  :) Že ty jsi nehrál hru "Modrokněžník Holzonne vrací úder", když takto mluvíš? Že je to tak? :)

Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 24. Únor 2021 - 12:35
Výborně, vůbec nevadí, že tu máme blog o TADSu, pokud se z Tebe stane světlo/temno noš a uvedenou funkcionalitu implementýruješ do TXT (případně jeho ctěný autor), bude to paráda. A poté mohou pokračovat další věci, TXT je bezva a určitě stojí za to jej rozšiřovat. Narozdíl od TADSu se stále vyvíjí, což je jeho obrovská výhoda. TADS jako jazyk dnes už ne, ale stále přibývají nové funkce, nově např. dohání TXT v mapování:

https://intfiction.org/t/tads3-cartographer-extension/49401/2

pokud jde o paměťové nároky, QTADS se spuštěnou hrou zabere téměř to samé, co WINE s TXT, takže tady je to zcela fuk.

Mimochodem, neuvažuješ po té obrovské spoustě let uvolnit zdrojáky své Trilogie nebo Dizzyho? Pokud si dobře vzpomínám, jsou napsány ve starém dobrém Pascalu, zkusil bych je rozjet v novém Freepascalu, pak s nějakým tím klikátkem v Lazarusu a třeba by se dalo vymyslet nějaké to spojení s Javascriptem:

https://wiki.freepascal.org/pas2js

Mě se tenhle engine vždy hrozně líbil a moderní Pascal, i když na něj často slyším ne zcela košér věci, se stále vyvíjí, proč jej neuvyžít.


Jo, s hraním her to mám teď drobet náročnější, situace je stále veselá a musím řešit jiné věci, jsem rád, že se občas dostanu k programování. První díl šlechtické dvoulogie jsem nakonec dohrál, ale u Modrokněžníka jsem se zasekl (podle poslední uložené pozice v druhé půli října, to to letí), Tux, Textovka a další lahůdky budou muset zatím počkat. Ani dnes, když jsem hru zkoušel, nevím kudy dále, mohu poprosit o malou nápovědu jak dál - zlobivý vlk mě hnedle dostane, chlapeček rybolovec nic nechce a ta ďoura v zemi láká, ale nic kloudného jsem nevymyslel (dat soubor je v příloze)? Obrázek indiána na stránkách je super, takže se nemohu dočkat, až objevím to cudné tajemství...
Název: Re: Kroužící orel 2
Přispěvatel: KaiN 24. Únor 2021 - 15:11
Zkusím to v tom TXT udělat, ale spíš to bude úkol pro Pedra.  :)

Mám celkem obavu, že ty zdrojáky už nedohledám; možná toho Dizzyho, ale vidím to tak 30:70.

No, jestli tě ta jáma láká, tak prozkoumal jsi ji? A promluvil sis s tím člověkem, co v ní uvízl? (Dle úložky to vypadá, že ne.)
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 26. Únor 2021 - 09:27
Moc děkuji za nakopnutí, jak vidno, musím zadat příkaz "mluv clo", "mluv s clovekem" nebo "mluv" a následně "člověk" nefunguje, tady právě TADS krásně pomáhá (ale jeden zase nemá tu správnou radost, když kombinaci konečně uhodne).

He, he, ta dědičnost tříd teda sedla, s vtípky na vobjektové vejvojáře se zrovna nesetkávám. A jak vidno, Vinetoua ze své mysli prostě vyškrtnout nedokážeme, taková vopičárna, ale líbí se dodnes, mír Oldovi Šetrhendovi při jeho věčném odpočinku. Druhý zásek byl s dcérenkou vlkobijkou, furt jsem hledal vlka, na kterého se oba v objetí posadíme a za veselého vytí pofrčíme hvězdnou nocí a vono zase nic, ta potvora mě prostě svedla ani jsem nevěděl jak. Zlaté stepní klisničky, říkal jsem si, ale kdež, lakotky a jaká hrůza, i soudružky siuxky už nejsou jako zamlada, všude hřích a nic, než hřích, to je hnus, velebnosti. Řehtáka pozdravuju, určitě mě má rád, když se mi podařilo sundat mu sedlo, zamlouvám si první pokoroňáčkovou vyjížďku.
Omluva se přijímá, hra by možná nebyla tak bájo nebejt mého Vorla dvojky, kruciprdel, příště prostě nesmím zveřejňovat zdrojáky dřív, aby mi nebyly tak elegantně, ale nesmírně vtipně ukradeny (jsem hodnej vopeřenec, takže to napíšu ještě jednou a slušně - přemístěny). Třetí díl prostě muší bejt, to se vrrr.

TXT vesele rozšiřujte, už jen to, jak bájo hry v něm vznikají, o něm mluví samo. Pokud zdrojáky Dizzyho dohledáš, bude to paráda a pokud ne, ničevó, svět se nezboří. Dnes máme spoustu možností včetně textovek na webu (i když já raději tu klasickou příkazovku), mimo webový TADS (kde stále nejsem schopen rozchodit webový server, s novějšími balíčky Archu se na míle vzdaluji těm původně plánovaným) je tu právě třeba výše popsaný Lazarus, Java se s webem také kamarádí a jak vidím, i Python v kombinaci např. s Brythonem nebo webovým frameworkem by uměl to samé.

Tak konec hraní, další hry si nechám na později, mám tu jeden školní Pythoní projekt a společně s ním budu zase vařit něco chutného v TADSu.
Název: Re: Kroužící orel 2
Přispěvatel: KaiN 26. Únor 2021 - 20:10
No, "mluv s někým" nefunguje, s tím by měl Pedro něco udělat. Já používám "oslov někoho" a to je bez problému.

Počkej, počkej, jaké ukradení? Vždyť já tvoje zdrojáky vůbec nečetl. Četl jsem tady ten tvůj blog, a to, jak jsi tu podrobně rozebíral tu "orlí díru" a "podívej se do stop", tak z toho jsem si udělal ve hře trošku legraci, to je fakt. A také jsem použil jméno Řehták, resp. řehták. Pokud tam jsou nějaké další shodné věci, tak to je fakt jen naprostá náhoda.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 1. Březen 2021 - 12:08
Paráda, budu si pamatovat, že alespoň prozatím bude třeba využívat příkaz oslov.

Jé, vůbec nejde o ukradení, asi jsem ze srandy zvolil nepřesné vejrazivo, mě naopak poctilo, že jsi tak parádně využil mých orlodírových potíží a zahrnul je do hry. Moc se omlouvám, pokud to vyznělo hrubě, právě naopak, využívej ze zdrojáků vše jak je libo, tohle se mi na otevřeném SW asi nejvíce líbí.

Dnešní škola je za námi, jdu vesele přesouvat koňské akce z března na jiné termíny a pak s dětmi ven. Další tvorba bude samozřejmě pokračovat.
Název: Re: Kroužící orel 2
Přispěvatel: KaiN 12. Březen 2021 - 13:46
Tak to jo. Už jsem myslel, že budu muset vyrazit přes pár okresů na trestnou výpravu. Tak tedy pušku pověsím zpátky na zeď.  ;)
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 16. Březen 2021 - 15:40
Jé, tak to mám štěstí, s puškou bych si snad i poradil, bál jsem se, že přiletí dron a do začouzeného otvoru v týpí mi vhodí veselý dáreček.

Našel jsem si parádní kurs, který je jiný a jak jsem zjistil, mnohem stravitelnější, než knížky, Týmový začátečnický kurs Pythonu a pro zajímavost uvádím i odkaz:

https://naucse.python.cz/2021/online-jaro/

a tam nás krásně provětrávají domácími úkoly. Teď teprve vidím, co bych z knížky nepobral, je hezké si zkoušet cykly for, while, proměnné, řetězce apod., ale dát do algoritmem dohromady a připravit třeba hru Kámen - nůžky - papír, Oko bere nebo Šibenici už taková sranda není. Takže se zatím zaměřím sem, lektoři jsou bezva a člověk je nucen opravdu makat, po těhle lekcích budou vnitřnosti TADSu a nejen jeho mnohem průhlednější.

Pak si dám i Tuxe a Textovku, restů je mraky, ale to v dnešní době máme asi všici.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 24. Srpen 2021 - 10:03
Zdravím po prázdninách,

vidím, že stále makáte, Zchudlý šlechtic, TUX, Na život a na smrt, Indiana Jones a aktuální TXT engine jsou super. I já zase mohu pokračovat, největší akci letošního roku mám za sebou a před pár dny vyšla šikovná věcička, na kterou se klepu už dlouho, TADS3 Language Server pro VSCode:

https://intfiction.org/t/vscode-tads3tools-extension-alpha-release/52188

Zatím se spoustou chyb, někdy je nutno projekt znovuotevřít v editoru, aby se spustila rutina ParsingSymbols pro načtení všech *.t souborů, jindy pomůže zavřít všechny otevřené soubory projektu a restartovat IDE, jindy dokonce musím přesunout adresář s projektem na jiné místo a až poté se otevře, s těmito omezeními mám však konečně k dispozici nástroj podobný Javovskému či Pythonímu language serveru včetně dalších vymožeností (tvorba map ála Trizbort nebo stahování rozšíření z IFDB).

Když připočítám stále vyvíjený Frobtads (nyní ve verzi 2.0) a parádní QTADS, je vidět, že TADS stále žije a mohu v něm tvořit dále, autor používá stejně jako já Linux a pokud přidá ten dlouho očekávaný debugger a možnost sestavení a spuštění projektu ve VSCode, netřeba nic dalšího. VSCode se mi líbí stále víc, dnes už jej používám kromě Pythonu i na Javu (zatím s menšími omezeními především u Gradle projektů, na druhou stranu potěší podpora parádního GraalVM) a aktuální už i na TADS (kde jsem zase přešel z QT Creatoru, ach jo, furt se to mění).

Momentálně lektoruji novou knížku od pana Pecinovského pro začátečníky v Javě (překvapivě mimo textovou hru využívá starého dobrého robota Karla, he, he, s tím jsem začínal na IQ-151 a vidět dvorek s pohybujícímo se roboty v JShellu je bezva retro) a souběžně budu zase pracovat v TADSu, až se posunu dále, dám vědět, moje tvorba je šíleně na dlouho, dřív se ale vývojařina naučit nedá.
Název: Re: Kroužící orel 2
Přispěvatel: Kroužící orel 27. Září 2021 - 09:42

Zdravím všechny textovkáře,

rozšíření pro VSCode pro tvorbu v TADS se nám utěšeně vyvíjí, já se ale v nejbližší a možná i vzdálenější době době na další tvorbu nevrhnu, kromě koní mám před sebou dlouhodobý kontrakt na testování informačního systému a účetnictví v Javě a JavěFX, takže se nakonec musím vrhnout na tento jazyk. Python jsem alespoň dočasně musel odsunout do pozadí a na tvorbu textovek v TADSu mi čas opravdu nezbude - nezvládal bych již nic dalšího, i kdybych seděl u počítadla celý den.

Ještě jednou zasílám poslední zdrojáky na githubu, kdyby se na TADS chtěl přeci jen vrhnout někdo další:

https://github.com/krouziciorel/Krorel2

plus budu aktualizovat web tads.cz, s tím není příliš práce.

Příjemné hraní textovek a to samozřejmě v jakémkoliv systému přeje

Orel