==============================================================
             xpexeso -- hra s 64 kartikami
==============================================================
erven 1999                                         Petr Olk

V tto he vyhrv ten, kdo m lep krtkodobou pam na polohu a
obsah kartiek. Program emuluje hru PEXESO, kterou rdi hraj hlavn
dti se skutenmi paprovmi kartikami. Program b pod X Window
System.

Pravidla
========

Hru mohou hrt dva nebo vce hr. V ppad pouit programu xpexeso
me nkterho hre nahradit pota. Hra obsahuje 64 obrzkovch
kartiek. Vdy na dvou kartikch je stejn obrzek, tj. existuje 
32 dvojic kartiek. 

Na zatku hry se balek zamch a rozd na plochu rubem nahoru.
Hri se ve hran pravideln stdaj. Hran jednoho hre zahrnuje
jeden nebo vce tah. Jeden tah spov v otoen dvou rznch
kartiek obrzkem vzhru. Tah je spn prv tehdy, kdy jsou tyto
dv kartiky stejn. V takovm ppad je hr odebere z plochy a
pite si bod. Dle pokrauje dalm tahem tak dlouho, dokud jsou jeho
tahy spn. Je-li tah nespn, hr vrt dvojici otoench
kartiek zpt rubem vzhru na stejn msto, jako byly, a ped hru
dalmu hri. Hra kon, pokud na ploe nezstala dn kartika. Kdo
m nejvc bod, vyhrv. Hri si nesmj bhem hry dlat poznmky do
"externch pamt". Musej se spolehnout pouze na svou vlastn pam.

Vlastnosti programu
===================

Pi startu program zamch kartiky a rozd je rubem vzhru na
grafickou plochu. Implicitn hraje jeden hr proti potai
(automatu). Toto nastaven je mon zmnit v nabdce "Nastaven"
napklad tak, e hraje vce hr. Pitom automat me a nemus bt
jednm z nich. Automat pracuje s oddlenou pamt, kter nen
propojena s procedurou, kter kartiky rozdala a postupn je na ploe
ukazuje. Je tedy zarueno, e automat "nevindluje". Pro automat lze
navc nastavit "intenzitu zapomtlivosti" a tm mu vnutit urit
lidsk faktor. Pi pesnm pouit pamti potae by vtina lid
proti automatu nemla anci.

V nabdce "Nastaven" je mono zadat jmna hrajcch hr.
Jmna oddlujte mezerou. Zan-li jmno hre znakem "@" nebo "*", 
jedn se  o automat. Takovch automatickch hr me hrt i vce. 
Vechny automaty stejnho typu (@ nebo *) pak ale sdlej 
spolenou pam se stejnmi vlastnostmi "zapomnn". Je tedy mon
hrt nejve se dvma automaty rznch vlastost zapomnn.
Pklad (dva hri a dva automaty stejnho typu):

Petr @Hall9000 Mirek @Robotek

Hra se me nastavit i tak, e hraje samotn hr bez soupe. Pak jde
o to, kolik potebuje tah na dosaen konce hry. m mn tah, tm
lpe. 

Kdo je v dan chvli na tahu je zobrazeno (vetn bodovho skre) 
v horn sti obrazovky. Pokud hr zrovna nechce hrt, me kliknout
na tlatko dalho hre, ktermu pedv hru. Tm se vzdv
tahu. Toto je rozen oproti pravidlu v klasickm PEXESU. Hraje-li
teba vce hr a automat, pak se mohou hri teba dohodnout na
nestandardnm schmatu pedvn hry, protoe hrt tsn po automatu
s nastavenou velkou pamt, je pro lovka nevhodn.
Stihnete-li zmknout tlatko jinho hre v dob, kdy se pipravuje 
k tahu automat, kter jet neotoil prvn kartiku, mete vzt tah 
i jemu.

Hr, kter hraje, mus kliknutm "otoit" dv rzn kartiky. Je-li
tah nespn, mus na otoen kartiky kliknout znova (tj. me se na
n dvat tak dlouho, jak uzn za vhodn). Byl-li jeho tah spn,
vezme kartiky tm, e klikne na jakoukoli kartiku a hraje dl.
Je-li na tahu automat, oto tak dv rzn kartiky, pak je nech
zobrazen stanovenou dobu a pi nespnm tahu je oto zpt. Dobu
zobrazen kartiek pi hran automatu je mon nastavit v nabdce
"Nastaven".

Tlatko "Znova" umon vybrat pro dal hru jinou sadu kartiek
(vchoz sada je z pohdek Veernku). Pak mete zahjit dal hru.
Vechny sady obrzk jsou konfigurovny v souboru pexset-cz a jsou
uloeny ve formtu xpm. Chcete-li si vytvoit dal vlastn sadu,
pette si obsah souboru picset-cz.

Vlastnosti automatu
===================

V nabdce "Nastaven" je mono krom seznamu hrajcch hr urit
stupe "zapomtlivosti" automatu, dle zpsob hry a stupe
"ukecanosti" automatu a konen asovou prodlevu mezi otenm kartiek.

"Zapomtlivost" je dna dvma parametry. Prvn parametr "poet pesn
pamatovanch tah" uruje poet tah, kter si udruje automat 
v pamti. erstv tahy si pamatuje a star tahy zapomn. Byla-li
kartika toena ped udanm potem tah a potom u ne, automat o n
bu nev, nebo ji jenom tu. O tom rozhoduje druh parmetr "poet
vech pamatovanch tah". Bv obvykle nastaven na vt hodnotu, ne
prvn parametr. Byla-li kartika otoena ped tmto potem tah,
automat o n vbec nev. Pokud automat polohu kartiky jen tu a
potebuje ji pro doplnn dvojice, pokus se ji vyzvednout 
s pravdpodobnost 1/4. Tsn vedle shne s pravdpodobnost 1/8 a
hlopn vedle s pravdpodobnost 1/16.  Pokud kolem sprvn
kartiky nkter kartiky chybj nebo automat o nich m daj 
v "pesn" pamti, je pravdpodobnost tahu ostatnch kartiek mrn
vy. To pomrn dobe napodobuje lidskou vlastnost. Je-li "poet
vech pamatovanch tah" men, ne "poet pesn pamatovanch tah",
pak jsou oba parametry nastaveny na maximum obou. Pi nastaven tchto
parametr na hodnotu cca 100 vtina lid neme automat
porazit. Naopak, pi nastaven tchto parametr na nulu, se z potae
stv tup genertor nhodnch tah. Poznmka: do potu pamatovanch
tah se zapotvaj jen vechny nespn tahy vech hr. Z kadho
takovho tahu si automat zapamatuje daje o dvou kartikch.

Pklad: Pi "poet pesn pamatovanch tah" = 3 a "poet vech
pamatovanch tah" = 10 si automat pamatuje 3 tahy zpt pesn.
To znamen, pamatuje si daje o esti ne nutn rznch kartikch z tchto
t tah. V dalch sedmi tazch zpt automat polohu kartiky pouze tu.
Toto nastaven je vchoz. Pi nm se d s automatem jet rozumn hrt a
mnohdy jej i porazit.

Automat lze nastavit do reimu otevenho nebo zlomyslnho hran. To
ovlivuje otoen druh kartiky automatem, pokud k t prvn nezn ani
netu dvojici.  Pi oteven he oto v takovm ppad druhou
kartiku nhodn mezi tmi, kter jsou z pohledu jeho "pesn" pamti
neznm. Takov tah me napovdt nsledujcmu hri. Na druh
stran pi zlomysln he ot automat pod stejnou kartiku jako
druhou, aby tmto otoenm nenapovdl protihri nic. Navc si tm
automat spo vlastn pam, protoe rezervovanou polohu pod oten
kartiky si pamatuje zvlṻ a neukld ji pod znova do sv
pamti. Takov tah tedy zabere v jeho pamti jen jednu informaci
(msto bn dvou) a z pohledu potu pamatovanch tah bychom jej
mohli nazvat "pltahem".

Programu je mono nastavit stupe ukecanosti. Volba "Ml" znamen, e
program neotravuje dnmi poznmkami. Volba "Nzvy" zpsob, e
pota bude uvdt nzvy otoench kartiek. Volba "Komentuje sebe"
spust reim, kdy automat prozrazuje, jak hraje (mon komente:
"znm ob karty", "tum ob karty", "nestrefil jsem se", "volm
nhodn", "druhou tum", "druhou znm", "mm tst", "nepovedlo se
to").  Volba "Kibicuje" zpsob, e automat zane kibicovat i hran
lidskch hr (monosti: "o druh nevm", "tu jsme vidli", "druhou
znm", "druhou tum", "to jsem vdl", "to jsem tuil", "to jsem
nevdl", "ta je nov", "k t druhou znm", "k t druhou tum").
Toto kibicovn odpovd nastaven automatu typu "@". Vy ovem mete
nechat kibicovat automat, kter nastavte na vysok hodnoty pamatovn
(100/100), ale nepustte ho mezi sebe do hry. Msto nj budete hrt 
s automatem typu "*".

Krom toho je mon spustit podrobn logovac informace automatu a
prohldnout, jak peml. Viz nsledujc odstavec o parametrech
pkazov dky. Vpisy pamti odpovdaj automatu typu "@". 

asov prodlevy se nastavuj v desetinch sekundy. "Pprava na tah"
je prodleva ped prvnm otoenm kartiky automatu.  "as mezi
otoenm dvojice" je asov interval mezi otoenm prvn a druh
kartiky automatu a tak to je blokovac as proti "nechtnmu
dvojkliku" lidskho hre. Konen "Doba zobrazen dvojice" odpovd
dob zobrazen obou kartiek souasn, ne je automat zane vracet
zpt, nebo ne kartiky odstran ze hry pi spnm tahu.


Parametry pkazov dky
=========================

Krom bnch parametr pro kadou X aplikaci (napklad -fn font)
program te dal parametry.

-log soubor  ... podrobn informace budou uloeny do souboru soubor
-log -       ... podrobn informace budou vypisovny na standardn vstup
-set soubor  ... seznam obrzkovch sad (obvykle: pexset-cz)
-defaultset slo ... poadov slo sady, kter bude povaovna za
                 vchoz (implicitn 1, co je prvn sada v pexset-cz).
                 Je-li -defaultset 0, program zvol vchoz sadu nhodn.
-doc soubor  ... soubor s touto npovdou (obvykle: pexdoc-cz)

-cards SxR   ... S zna poet sloupc a R poet dk. Tmto
                 parametrem mete rozdat jin poet kartiek ne 8x8.

Program je konfigurovn a pro 128 kartiek. Pi poadavku na vce ne
64 kartiek program smch obrzky ze dvou sad. Takto se smch zkladn
sada "Veernek" se "zvaty z Afriky" dle sady "Herb kvtin". 
Toto chovn mete pozmnit pomoc konfiguranho souboru pexset-cz 
anebo pidnm dalch obrzk do sady.

Rozdte-li lich poet kartiek, pak jedna karta (v kad he jin)
nebude mt k sob dvojici a zstane na ploe leet jako "ern Petr"
a do konce hry. Doporuujeme ponechat poet sloupc aspo 8 aby
nedochzelo k chybnmu vypisovn hornho stavovho dku.

Pklad: -cards 16x8 rozd maximln poet kartiek

-picgeometry xV ... pokud nechcete zmny velikost obrzk pi
                 pepnn sad, pak pouijte tento parametr.
                  je ka a V vka jednoho obrzku v pixelech.

Pi pouit tohoto parametru vt obrzky neuvidte cel a men
budou mt kolem sebe velk okraj. Napklad -picgeometry 56x50 se hod
uivateli, kter pouv nzk rozlien a ani nejmen obrzky se mu
na obrazovku nevejdou cel.

Dal parametry umouj pepsat vchoz hodnoty nastaven programu.
Tyto hodnoty me dle v nabdce "Nastaven" mnit uivatel.

-players "seznam hr" ... seznam hr (vchoz: "Ty @Automat")
-m1 slo  ... poet pesn pamatovanch tah pro @ (vchoz: 3)
-m2 slo  ... poet vech pamatovanch tah pro @ (vchoz: 10)
-close-game .. zlomysln hra automatu @ (vchoz: oteven hra)
-second    ... nsledujc -m1 -m2 -close-game se tkaj * msto @
-t1 slo  ... pprava na tah (vchoz: 8 desetin sekundy)
-t2 slo  ... mezi otoenm dvojice (vchoz: 4 desetiny sekundy)
-t3 slo  ... doba zobrazen dvojice (vchoz: 35 desetin sekundy)
-talk slo .. rove ukecanosti (0 - ml, 1 - jmenuje kartiky, 
               2 - komentuje sebe, 3 - kibicuje, vchoz: 0)
-no-move-out . ponechat karty po spnm tahu (vchoz: odebrat)


Technick koniment k programu
===============================

Program je mm prvnm pokusem vytvoit nco pro X Window System.
Urit by to lo napsat lpe, pohodlnji a s efektnjm vsledkem
v njak nadstavbov knihovn. Protoe ale jako uivatel a
administrtor mm patn zkuenosti s kompilacemi program
vyuvajcch nestandardn knihovny, kter stle podlhaj vvoji,
radji jsem zstal u star a vude ptomn X Toolkit Intrinsics a 
X Athena. Obrzky natm pomoc Xpm. Nic vc.

Podntem k napsn programu byl npad mho syna Mirka udlat PEXESO 
v potai. ekl jsem: kdy namaluje v Gimpu 32 obrzk, pak ten
program udlm. Bohuel, on ty obrzky ml za pr dn hotov. Proto
jsem se ponoil do studia knky Alee Limpoucha a pustil se do
dla. Skutenost, e program existoval ve verzi pro svgalib od Petra
Blhy, se nedala vyut, protoe jsme to potebovali pro X. Zdrojov
text jeho programu jsem vbec nepouil a napsal ve znova. Napsat na
prosted nezvisl algoritmy a implementovat lidsk vlastnosti pro
automat bylo to nejjednodu. Ve verzi pro textov terminl (bez
obrzk) byla hra napsna a odladna bhem odpoledne. Dal dva tdny
jsem zpolil s tajuplnmi ppravky a podobnmi obludnostmi X Athena.

Vtinu obrzkovch sad pro PEXESO v potai vytvoili v roce 1994
brati Petr a Pavel Matulovi. Tyto sady jsou distribuovny spolen 
s jejich programem pexeso pro MS DOS. Program je voln dostupn 
(pouze v exe podob) na http://www.fi.muni.cz/~pam/pexeso/.
Implementace grafiky je svm zpsobem famzn, protoe pot i se
starmi typy DOSovch pota a se vemi obrzky dohromady se vejde
do 16 barev. Kad obrzek je pitom vmstnn do plochy 56x56
pixel. S laskavm dovolenm Pavla Matuly je vtina tchto
obrzkovch sad zahrnuta do distribuce programu xpexeso.

Pokud vytvote zajmavou sadu obrzk pro xpexeso, rd ji do
distribuce programu zaadm. Dnes mme k vrob obrzk silnj
nstroje ne v roce 1994 (napklad Gimp) a asi se nemusme omezovat
na 16 barev (dokonce i X servery s 256 barvami jsou dnes vbhov
typ).

Copyright
=========

Program byl napsn pro radost a je en za stejnch podmnek, jako
jsou uvedeny v General Public License. Skenovan obrzky (Josefa Lady
nebo autor veernkovch postav) do tto licence nespadaj a nejsou
v tomto smyslu povaovny za soust programu. Program je funkn 
i bez tchto obrzk, sta, kdy si uivatel vytvo sv vlastn 
obrzky nebo pouije ty, co udlal Mirek.



