Portál AbcLinuxu, 26. dubna 2024 21:49

Textová adventura v Pythonu

24.5.2009 11:36 | Přečteno: 3287× | Linux | poslední úprava: 1.6.2009 21:09

Kdysi na ATARI 800XL jsem napsal v basicu dvoudílnou textovku Emgeton Story. A protože mě jeden příznivec textovek trošku vyhecoval, začal jsem pracovat na remake. Jako programovací jazyk jsem použil Python.

Dlouho jsem hledal nějaký vhodný engine pro českou hru, ale narážel jsem na problémy s diakritikou. Nakonec mi padla do oka knihovna pyparsing, která přímo v sobě obsahuje malý příklad enginu pro textovou adventuru. Takže jsem tento základ použil a dále rozvinul. Po počátečních potížích opět s diakritikou a unicode je nyní engine ve stavu použitelnosti - postupně píši příběh té původní hry z roku 1991.

Engine je plně multiplatformní a jsou vyřešeny problémy s diakritikou a unicode. Překvapilo mě, že např. Windows XP stále používají cp852. Otestováno je to v pythonu 2.x na Linuxu, Windows XP a na Mac OS X. Engine má samozřejmě dost nedostatků, v hlavičce si píši TODO - zatím jsem např. nerozlousklnul jak na SAVE a LOAD, ale směrem by melo být pickle, se kterým zatím experimentuji. Kód jsem se snažil okomentovat, aby byl srozumitelný. Je mi jasné, že kvalita kódu není na úrovni profesionálního programátora, že tam je dost věcí které by šli napsat jinak a lépe.

Hra se ovládá pomocí příkazů například prozkoumej koš, použij lopatku atd. Více vám poví příkaz help.

Má-li tedy někdo chuť pomoci, ozvěte se. Asi nejvíce mě trápí nefunkčnost konstrukce použij předmět s jiným_předmětem, tam nějak to parsování nefunguje ani v tom původním kódu. A také samozřejmě to load a save. Super by bylo i to kdyby to nejak jednoduše šlo i např. v GTK okně pomocí pyGTK nebo Qt pomocí pyQt. Dá se tam toho hodně vylepšovat, více je v tom TODO.

Update: rozjel jsem projekt na Sourceforge.

       

Hodnocení: 94 %

        špatnédobré        

Anketa

Znáte nebo hrajete textové adventury?
 (6 %)
 (15 %)
 (71 %)
 (7 %)
Celkem 84 hlasů

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

24.5.2009 13:11 Mige_Amour | skóre: 12 | Benešov
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin

Stojíš u horkovodu.
Vidíš tu rozvaděč, páru a silnici.
Můžeš jít na sever a na východ.
> seber páru
Beru...
> seber silnici
Beru...
> inv
Prohlížím inventář...
Máš somračku, zmuchlaný papír, brašnu, páru páru a silnici.

Opravdu má jít sebrat ta pára a silnice? :D

24.5.2009 13:20 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
nema, proto pisu ze to neni jeste dokonceno :-)
24.5.2009 13:23 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
navic v TODO jeste pisu, ze s tou parou je nekde problem, nevim proc ale objevuje i v mistnosti kde nema co delat... asi vitr :-)
24.5.2009 14:42 Kvakor
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Pamatuju na jednu úchylnou francouzkou hru (nebyla to textová, ale klikací adventura), kde podobné věci šly dělat :-)
=^..^= AmigaPower® avatar 24.5.2009 19:28 =^..^= AmigaPower® | skóre: 30 | blog: BLB | Praha
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Já zas teď hraju Menelgame, je to překládaný z němčiny, takže "klikni na otevřené kolo" znamenaj "klikni na číslo" a podobný věci. :-D
=^..^= AmigaPower® avatar 24.5.2009 19:47 =^..^= AmigaPower® | skóre: 30 | blog: BLB | Praha
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
...jo, ještě bych zapoměl dodat, že kliknutim na ten link pomůžete mému bezdomovci na jeho těžké ceste k bohatství, díky! :-D
hikikomori82 avatar 24.5.2009 15:16 hikikomori82 | skóre: 18 | blog: foobar | Košice
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin
A neni to skoda nespravit to rovno ako online (html) textovku?
Slobodný font na technické kreslenie
24.5.2009 16:01 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Online to bude taky, ne jako obycejne html, ale s pomoci ajaxu, uz mam otestovano. Bude to vypadat nejak takhle. Trpelivost prosim :-)
oroborus avatar 24.5.2009 16:00 oroborus | skóre: 20 | blog: Bulanci
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin

Mmm, hned som si spomenul sa server www.textovky.cz , skoda, ze v sucastnosti uz nie je aktivny a funguje ako archiv. Admini robili co mohli, ale zrejme za to mohla zla odozva od citatelov, mensie nezhody a crackerske (nechem napisat hackerske) utoky na phpBB forum ( to bol zrejme posledny klinec do rakvy )

kouzer avatar 24.5.2009 17:59 kouzer | skóre: 11 | Mladá Boleslav
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin

Mě to tedy na win v pythonu nefunguje. Mam verzi 3.0.1.

 

  File "C:\Documents and Settings\kouzer\Plocha\adventureEngine.py", line 35
    alphas = u'aábcčdďeěfghiíjklmnňoópqrřsštťuůúvwxyýzž'
                                                                     ^
SyntaxError: invalid syntax

Linux user #448944.
24.5.2009 18:05 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
ve trojce jsem to netestoval, je to psano ve verzi 2.x
24.5.2009 18:10 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
kdyz odstranite to u pred uvozovkami, prestane se objevovat chyba na tomto radku?
kouzer avatar 24.5.2009 18:14 kouzer | skóre: 11 | Mladá Boleslav
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Ono tomu vadí i jiné věci..

 

Linux user #448944.
24.5.2009 18:17 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Zkratka python 3.x neni zpetne kompatibilni s 2.x. Zkuste verzi 2.6 a nezapomente na pyparsing.
kouzer avatar 24.5.2009 18:21 kouzer | skóre: 11 | Mladá Boleslav
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Nebylo by lepší psát to rovnou pro Python 3? Nemyslím kvůli mě, ale do budoucna a tohle je čestvý, tak by se to asi vyplatilo (mluvím jen za sebe).

Linux user #448944.
24.5.2009 18:27 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Ve fedore 11 bude python 2.6, kde je sada konverznich pomucek, prave jsem to nasel tady a tady.
24.5.2009 18:29 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
V kolika distribucich linuxu je dneska python 3.x ?
kouzer avatar 24.5.2009 18:37 kouzer | skóre: 11 | Mladá Boleslav
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Nemam tušení.

Linux user #448944.
24.5.2009 18:40 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
prave... ve vetsine je verze 2.x, takze pro ni to pisu. Ale jinak s verzi pro 3.x je to dobry napad, diky
24.5.2009 20:05 JS
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin

Nechapu, proc jste nepouzil nejaky jazyk pro tvorbu textovek, treba Inform nebo TADS (pokud vim, oba Unicode umi). Ale jinak proti Pythonu nic nemam. :-)

24.5.2009 20:17 xyz
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Unicode sice umí, ale s počeštěním to je dost problém. Osobně jsem trošičku zkoušel počeštit TADS3, a docela jsem pohořel. Ne že by to nešlo, ale moc snadné to není. Pokročilé systémy jako INFORM7 navíc pracují s jazykem na poněkud vyšší úrovni, včetně například syntaktických pravidel. Takže počeštění je (podle mě) ještě mnohem obtížnější. Osobně bych velice rád nějaký rozumný systém s plnou lokalizací víc než přivítal. Žel bohu jsou textové adventury v ČR totálně okrajovou záležitostí.

24.5.2009 20:24 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
jj s tads a inform mam podobne zkusenosti
24.5.2009 21:30 JS
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Aha, diky za odpoved, to jsem nevedel.

24.5.2009 20:41 xyz
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin

Hele, jestli to doděláš včetně věcí v TODO, tak máš můj nehynoucí obdiv. Což ti sice bude nejspíš k ničemu, ale bylo by to super :-) A asi by to chtělo soubor s dobrodružstvím natahovat zvlášť mimo parsovací engine.

24.5.2009 20:45 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
externi soubor bude... dik za podporu :-)
Daniel Kvasnička ml. avatar 25.5.2009 20:48 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin
No napad peknej, ale valit to vsechno do jednoho souboru, to je solidni humac, ne? ;-)
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
25.5.2009 20:58 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
no nerikam, ze to tak do budoucna zustane :-) nakonec bude engine oddelenej od pribehu :)
AraxoN avatar 26.5.2009 00:13 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin

Hehe, Emgeton story... to si pamätám z Ataríčka! :-D Československých textoviek som mal kúpenú celú kazetu, na dobierku z ČR. Predpokladám, že autori z toho nemali ani halier... Ale aspoň si slávny! Na rozdiel od mojej textovky, ktorá nikomu nestála ani za to, aby ju ukradol... :-(

26.5.2009 00:33 xyz
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Tak nezoufej a zkus se s autorem domluvit a předělat tu svou textovku jako další příběh využívající jeho engine :-)

26.5.2009 08:06 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Budu rad, pokud se to zacne pouzivat a kdyz to nekdo pomuze vylepsit :-) Zrovna vcera jsem jednoho kolegu textovkare provadel zdrojovym kodem pres icq :-) V kodu jsou komentare, tak to lze snadno pochopit jak to funguje.
AraxoN avatar 26.5.2009 22:20 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Čo si to pamätám (cca 18 rokov dozadu), tak to ani na svoju dobu a vo svojej triede (textovky made in ČSSR) nebolo nejaké terno... :-D ... Okolo roku 2000 som sa to pokúšal dostať z kazety do PC, ale rozkódovať to z WAV-u na jednotlivé bity sa ukázalo nad moje sily. Páska asi za tie roky degradovala, bol na nej šum, jednotlivé bity neboli rovnako dlhé (variable bit rate :-D) a bola to skôr tipovacia sútaž, že čo je ešte jednotka a čo už nula. Hlavičku som rozkódoval, ale zbytok nedával zmysel a emulátor Atari z toho zblbol.

26.5.2009 09:21 Robo
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin

no kedysi davno v pocitacovom stredoveku som tiez spravil dve textovky (pre DOS). Asi pred rokom, ked som sa ucil Javu som sa to snazil do Javy prepisat, ale ta javovska konzola na to prilis vhodna neni, a neviem ci by to v pythone bolo lepsie: napr. neslo vymazat riadok, posunut kurzor na hocijake miesto (vertikalne, horizontalne) a tam nieco napisat, menit farby textu viackrat v jednom riadku; slo poslat do konzoly iba jeden cely riadok naraz (nie po znakoch) atd.

26.5.2009 10:38 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Proc posouvat kurzorem? Naco menit barvy? Kvuli zvyrazneni? Proc posilat po znacich? Zkuste to prosim trosku vic osvetlit...
AraxoN avatar 26.5.2009 14:18 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Možno preto, aby to bolo user-friendly, doplňovalo príkazy tabom, a tak... Ale veľmi by som sa divil, keby to Java nevedela, lebo to sa dalo už na hocijako primitívnych počítačoch a v hocijako primitívnych jazykoch.

27.5.2009 10:18 Robo
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

javovska konzola to nevie; asi preto, ze java nebola pisana pre konzolu

AraxoN avatar 27.5.2009 10:59 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu

Tak to som potom rád, že som Javu už dávno vyhodnotil ako nepoužiteľný jazyk. ;-)

Ale teraz vážne: to naozaj nikto z tých hackerov, čo si rochnia v Jave, nebol schopný tam nabindovať ncurses, alebo niečo podobné?

hikikomori82 avatar 27.5.2009 11:08 hikikomori82 | skóre: 18 | blog: foobar | Košice
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Myslim ze to robi aj libreadline
30.5.2009 13:03 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
Odpovědět | Sbalit | Link | Blokovat | Admin
Tak doplnovani TABem zprovozneno, zatim teda jeste nabizi vsechny predmety, ale to jeste osetrim podminkou aby nabizel jen predmety z aktualni mistnosti a z inventare. Uz se blizim ke konci s pribehem. Stahovat muzete na linku uvedenem vyse.
30.5.2009 13:04 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: Textová adventura v Pythonu
pozn.: TAB completion nefunguje zatim ve Windows - zatim jsem nezprovoznil gnu readline v tomto systemu.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.