23. Říjen 2017 - 11:46

Autor Téma: Seriál o programování textových her v TADS 3  (Přečteno 7617 krát)

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #60 kdy: 17. Květen 2017 - 09:28 »
Tady jsem našel diskuzi ohledně řešení přivazování provazu a také zajímavou definici akcí TAction – přesně tu bych využil při definici nové akce typu „přivaž“, „přepiluj“ apod., pokud jí dobře chápu. Také uvedené příklady dobjFor se hodí. Budu studovat a juknu se zase do Library reference a definici tříd a objektů

http://rec.arts.int-fiction.narkive.com/zp9ZA3sU/tads-3-attaching-problem

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 98
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #61 kdy: 19. Květen 2017 - 19:57 »
Zatím jsem nezvládnul použití lana, které potřebuji pro vstup do studny, bude to nějaká akce a jak píšeš, naprogramovat realisticky se chovající lano nebude jednoduché. Nikde v manuálech ani tutoriálech na webu jsem nenašel příklad s přivázáním lana, to by mi parádně pomohlo a ani v Základně podobná akce pokud vím není, takže zde budu ještě bádat. Oficielní manuály moc hezky popisují šplhání po skalách, škoda, že vynechali právě to lano.

Teď pár týdnů budu mít málo času, tak odpovídám po kouskách. Realistická lana patří k těm nejsložitějším věcem k simulování a já vlastně ani nevím, jak se lano v Exoterovi používá. Ale hodil jsem na web překlad jedné demonstrační hry Attachable třídy. Kdysi dávno jsem ji přeložil, ale byly tam po staru zadané názvy a slovníky objektů. Teď jsem ji oprášil a připravil k publikování, je na http://www.tads.cz/cs/demonstracni-hra.

Ten odkaz je super, dostala mě hlavně ta hláška ohledně suda v Geeks And Non-Geeks. Netušil jsem, že používáš i javovský Spring, tu už je asi jiná třída.

Né, nepoužívám, jen čtu Geek and Poke...

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 98
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #62 kdy: 21. Květen 2017 - 22:08 »
Pád z výšky do sena / na dlažbu – zde bude nějaká konstrukce if else. Napadlo mě použít:
 dobjFor(Enter) - method of ThroughPassage in travel.t[2618],
případně přesměrování, zatím jsem však nebyl úspěšný. Budu dále studovat nebo zkusím metodu jinou.

Možnosti a způsoby přesunů postav jsou docela rozsáhlé, spíš bys mohl použít v místnosti metodu enteringRoom, která tě informuje o vstupu postavy:
Kód: [Vybrat]
    enteringRoom(traveler)
    {
        if(traveler == me && nejake dalsi podminky)
        {
            "Něco... ";
        }
    }

V ní si otestuješ, o jakou postavu se jedná a jakékoliv jiné podmínky a něco uděláš. Pokud postavu nezabiješ, tak se výstupy zobrazí před rozhlédnutím v nové místnosti.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #63 kdy: 22. Květen 2017 - 08:17 »
Krásné ránko přeji,

paráda, hru Attachable jsem si stáhnul, binárka je v pohodě, jen zdroják attachment-20170519-1.zip bude asi poškozený, po rozbalení vidím jen prázdný adresář Attachable, můžu poprosit ještě jednou o nahrátí na server? Na řešení toho lana se moc těším, snad najdu inspiraci.

Taky mám teď spoustu práce, celý víkend koně a dnes kroužky s dcérenkou, vždy se ale alespoň o něco posunu dále. Se strážcem zatím ještě bojuju, budu dále zkoušet a podívám se na ten pád do sena - v místnosti sv_nadvori přidám metodu enteringRoom s podmínkami, zda je/není seno v místnosti, až se pohnu, dám sem výsledek.

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 98
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #64 kdy: 22. Květen 2017 - 20:18 »
Pardon, už je to spravené.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #65 kdy: 25. Květen 2017 - 12:16 »
Vrhnul jsem se na pád z výšky do kupky sena, přiznám se, že si nejsem jist, kde mám metodu enteringRoom(traveler) použít – zda ve druha_mistnost_vrchol_vez nebo v sv_nádvoří, u obou případů jsem nedosáhl kýženého výsledku. Ale po juknutí se do zdrojáků Heidi a Tvého Attachment mě napadlo ještě jedno, nevím zda ouplně správné systémové řešení:

druha_mistnost_vrchol_vez: Room 'Druhá místnost na vrcholu věže' 'do druhé místnosti na vrcholu věže'
    "Jsi v místnosti na vrcholu věže. \bMůžeš jít na východ, dolů. "
    east = mistnost_vrchol_vez
    down : TravelMessage
          {  ->sv_nadvori
              "Spadl jsi přímo doprostřed kupky sena, která ideálně ztlumila tvůj pád. "
                canTravelerPass(traveler) {return kupka_sena.isIn(sv_nadvori); }
              explainTravelBarrier(traveler)
         { "Zabil jsi se pádem z výšky. "; finishGameMsg(ftDeath, [finishOptionUndo] );}
    }
;

Pomocí metody  TravelMessage jsem dosáhl toho, že pokud se kupka sena nachází v sv_nadvori, hráči se nic nestane a v opačném případě zahyne přesně tak jako v Exoterovi.

Mimochodem teprve dalším studiem zdrojáků Heidi jsem se dozvěděl, že ve hře lze i křičet a tento křik může zanikat ve větru, to minimálně u předělávky a dalším pokračování Kroužícího orla musím využít. Opravdu bezva systém, líbí se mi čím dál tím více.
 
Na tomto místě jsem zjistil, že po smrti hráče hra vypisuje ZEMŘELO JSI. - u definice hráčovy postavy me však nemohu využít striktní definici rodu typu *1, setkal jsi se s tím také u tvorby Základny?

V místnosti se studnou jsem pomocí zdrojáku Attachment a výše uvedené kombinace  TravelMessage zkusil něco podobného, zatím ale bez kloudného výsledku:

jz_nadvori: Room 'Jihozápadní část nádvoří' 'do jihozápadní části nádvoří'
    "Stojíš na nádvoří. \bMůžeš jít na sever, na východ, na jih, dolů. "
    north = sz_nadvori
    east = jv_nadvori
    south = brana
    down : TravelMessage
          {  ->ve_studni
              "Sešplhal jsi dolů za pomoci přivázaného lana. "
//                canTravelerPass(traveler) {return provaz.moveinto(studna); }
        canTravelerPass(traveler) {!provaz.isConnectedTo(studna); }
              explainTravelBarrier(traveler)
         { "Studna je moc hlubová na to, abys do ní skočil jen tak. "; }
    }
;

+ studna : Attachable, Thing, Heavy 'studna' 'studna' *3
    @jz_nadvori
    "Hluboká studna, nyní však již zcela vyschlá. "
    specialDesc = "Je tu stará kamenná studna. "

    canAttachTo(obj) {return obj == provaz;}
    handleAttach (other)
    {   provaz.moveinto(studna);
       "Spustil jsi jej dolů. ";
     }

     gcName = 'studnu, studni, studna, studni, studnou'
     gcVocab = 'studnu/studni/studnou'
;

Také doprovodné hlášky zatím nejsou zrovna ideální:

>prozkoumej studnu
Hluboká studna, nyní však již zcela vyschlá.
Studna je připevněna k provazu.

>d
Je tu příliš velká tma, než abys vidělo na cestu.


Zde asi TravelMessage nepoužívám správně, zkusím si ještě jednou projet zdroják a v Library reference prozkoumat používané metody. Tak jako tak mi provaz zůstane po připevnění ke studni v ruce, takže zde budu muset upravit změnu stavu.

Každopádně uvázání provazu a boj se strážcem/drakem/psem jsou poslední dva zádrhele, až tyhle rozseknu, tvorba se bude chýlit ke konci.

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 98
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #66 kdy: 25. Květen 2017 - 12:36 »
Abych nehádal, prosím napiš mi, jak má vypadat ideální výstup ze hry s provazem i kupkou sena, tj. příkazy hráče a odpovědi hry na ně.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #67 kdy: 25. Květen 2017 - 12:57 »
Sakra, ty jsi ale rychlík, ještě jsem zapomněl dát sem aktuální zdroják.

Projel jsem celou současnou hru tak, že napoprvé spadnu do sena, pak zkouším vlézt do studny pomocí provazu, seberu seno a druhým pádem na dlažbu hra končí.

A ještě mě napadlo upravit Tebou přeložené příkazy. U studny mohu použít "připevni provaz", ale ne už "přivaž provaz". Upravil jsem soubor cs_cz.t v adresáři /usr/share/frobtads/tads3/lib/adv3/cs_cz i v tom samém pod Wine a hurá, možnost "přivaž" už interpretr zná. Takže pokud se nepletu, mělo by zafungovat přidání slova "přepiluj" tam, kde máš uvedeno odemkni, to zkusím příště.

Vše potřebné zasílám v příloze. Teď za chvíli frčím pro dcérenku do školky, během zítřka nebo nejpozději o víkendu se zase dostanu k Exoterovi, baví mě to čím dál více.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #68 kdy: 26. Květen 2017 - 08:55 »
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

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #69 kdy: 31. Květen 2017 - 09:40 »
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.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #70 kdy: 22. Září 2017 - 15:27 »
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.

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 98
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #71 kdy: 23. Září 2017 - 10:47 »
Jo, jo, omlouvám se, já padl před prázdninami vyčerpáním a tak trochu jsem spoléhal na to, že budeš mít letní akce a nevzpomeneš si na to, že jsem neodpověděl. Musím tam něco opravit v knihovně.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #72 kdy: 25. Září 2017 - 09:18 »
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.

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 98
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #73 kdy: 25. Září 2017 - 11:38 »
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.

Nakonec je to jedno, já jen cítím určité problémy s pochopením, pokud se někdo začne učit programování v prostředí webových stránek, ať už PHP nebo JavaScript, tam je to hodně přiohnuté a pro pochopení základních principů opravdu ne moc vhodné.

Zatím jsem u mix-in třídách, nyní ještě netuším, proč Darkroom není mix-in, ale ShipboardRoom a FloorlessRoom ano

Mix-in třída je taková třída, která není určená k tomu, aby se použila samostatně, tedy aby se přímo od ní samotné vytvořil objekt. Je to proto, že sama nedědí žádnou kompletní fukcionalitu, je to jen malý doplněk, který lze k něčemu přidat. Obvykle se používá pro ty věci, které chceš přidat na více místech v základní hierarchii tříd. Typickou ukázkou je mix-in třída Lockable a její potomci, jako LockableWithKey. Ty definují samotnou funkcionalitu zamykání a odemykání, která je sama o sobě k ničemu, dokud se nezkombinuje s nějakým objektem, třeba dveřmi, nebo kontejnerem. Dveře a kontejner jsou dva hodně odlišné objekty, které jsou v základní hierarchii objektů odvozených od Thing dost daleko od sebe, zejména kontejner má pak i hodně různých potomků s různým chováním, ale sdílejí tu potřebu je občas učinit zamykatelnými. Proto je Lockable mix-in třída, která jde přidat k jednomu či druhému a jde tak vytvořit hodně různých kombinací chování.

U Shipboard i Floorless máš ve skutečnosti obě možnosti:
Kód: [Vybrat]
/*
 *   A shipboard room.  This is a simple mix-in class: it can be used
 *   along with any type of Room to indicate that this room is aboard a
 *   ship.  When a room is aboard a ship, the shipboard travel directions
 *   (port, starboard, fore, aft) are allowed; these directions normally
 *   make no sense.
 *   
 *   This is a mix-in class rather than a Room subclass to allow it to be
 *   used in conjunction with any other Room subclass.  To make a room
 *   shipboard, simply declare your room like this:
 *   
 *   mainDeck: Shipboard, Room // etc
 */
class Shipboard: object
    /* mark the location as being aboard ship */
    isShipboard = true
;

/*
 *   For convenience, we define ShipboardRoom as a shipboard version of the
 *   basic Room type.
 */
class ShipboardRoom: Shipboard, Room
;

Tedy třída Shipboard je mix-in třída použitelná s jakýmkoliv druhem místnosti (a musíš si ji sám s nějakým druhem místnosti namíchat) a pokud žádný speciální druh místnosti nechceš, tak můžeš použít přímo ShipboardRoom, která představuje základní místnost s Shipboard směry.

Proč není stejným způsobem udělaný i Darkroom nevím, zřejmě nepřišlo autorovi důležité to tak udělat. Asi předpokládal, že místnost bez osvětlení budou lidé zřídka kdy chtít kombinovat s něčím jiným (a když, mohou to něco jiného přimíchat k ní). Nehledal bych v tom nějaký hlubokomyslný důvod. Snad jen snahu mít co nejvíce samostatně použitelných tříd a co nejméně mix-inů, které vyžadují o krůček navíc k pochopení.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 112
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #74 kdy: 27. Září 2017 - 10:02 »
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.