Dokumantace k zpotovmu programu Jana Nmce (zimn semestr 1997/98)
st druh : pruka programtora
(kontakt na autora jnem6403@barbora.mff.cuni.cz)

Obsah:
I) Veobecn poznmky
II) Popis jednotlivch modul

ad I. Zdrojky jsou napsan v Borland C++ verze 3.1, mli by bt
 kompatibiln i s vymi verzemi pekladae. Je teba vytvoit soubor
 projektu. Program vyuv standardn grafickou knihovnu (v projektu 
 nastavit !). Pro spn chod zkompilovanho programu je nutn nakoprovat
 soubory figury.fgr, font.cs a teorie.teo do aktulnho adrese.
 Akoliv je zdrojk v C++, velk sti (vtina jednotek) rozen jazyka
 C vbec nevyuv.

ad II) Poznmka: chcete-li pln vet dleitch funkc, pette si
 hlavikov soubory.

 coty.h
Soubor obsahujc zkladn typy a konstanty veobecnho pouit. Nem tedy
odpovdajc cpp soubor.

 csgraph.cpp
 csgraph.h
Zajitn textovho vstupu v grafickm reimu eskm fontem (Kamenci).

 dialogs.cpp
 dialogs.h
Objektov orientovan knihovna. Edlina, OK - dialog, ANO - NE dialog,
 dialog pro uloen nebo oteven partie, pro naten dky textu
 a dal (promna pce, atd...).
 K tmto objektm existuj odpovdajc funkce, take msto
	tdialog dialog;
	dialog=new tdialog(parametry);
	if (dialog->run()) ...; else ...;
	delete dialog;

 sta zavolat if (rundialog(parametry)) ...; else ...;

 grafika.cpp
 grafika.h
 Vechno mon s grafikou. Nastartovn a ukonen, zobrazen polka i
 cel achovnce, zobrazen figury... Obsahuje tak funkci editujc pozici,
 nebo oba smry konverze textov/binrn zpis tahu. Binrn je pro vnitn
 potebu a textov se uv nap. v partii. Objekt partie je tak v tto
 jednotce.

 hrac.cpp
 hrac.h
 Zadn tahu hrem. Kontroluje vechny mon chyby nahls vas. (Sta
 stisknout <ENTER> na figurce, kter nem tah a program se ozve.)
 
 idiot.cpp
 idiot.h
 Jdro achovho programu, myslc algoritmus. Jde o algoritmus hrub sly,
 alfa-beta metodu. Je dan doba, za n mus program odpovdt. Program
 zkou alfa-beta do hloubky 1, pak 2, pak 3 atd. a jeden propoet
 nestihne. Vdy pot nejlep tah z pedchozho prchodu jako prvn,
 je-li toti nejlep i v dal iteraci, z se interval (alfa,beta),
 a propoet nsledujcch tah bude pravdpodobn vrazn rychlej.
 Statick ohodnocovac funkce je velmi jednoduch. Posuzuje hlavn materil,
 pozici pc a v matov koncovce i postaven krle. Pi hodnocen materi-
 lu uv bn hodnoty D=950, V=550, S=330, J=320, P=100. Postoupiv
 pci jsou mrn preferovni.
 Propoet do tich
 pozice ani inteligentnj ohodnocovac funkce se neuvaj. Ne proto, e
 jsem je nenapsal, ale proto, e v nkterch pozicch zpomalily algoritmus
 natolik, e ani nedopotal do hloubky 2 a mohl si tedy nechat nasadit i
 mat 1. tahem.
 poznmka: achista 4. vkonostn tdy by ml nad programem snadno,
           zvtzit, nikoliv vak bn lovk. Libovoln mj kamard - 
           neachista byl programem bez problm poraen.
 menu.cpp
 menu.h
 Objektov orientovan knihovna s vstinm nzvem.

 pressoub.cpp
 pressoub.h
 Knihovna pro komunikaci s jinm programem. Probh to pes 2 soubory.
 vstup 1. programu = vstup 2. programu a naopak.
 Ozname B program hrajc za bl a  program hrajc za ern. 
 b.txt je vstup 1. programu (co asi bude c.txt ?)
 pklad partie:
C ek na existenci b.txt
B zalo b.txt, zape tam f2-f4 a ek na existenci c.txt
C si pete b.txt, smae jej, zalo c.txt nape tam e7-e6 a a ek na c.txt
B si pete c.txt, smae jej, zalo b.txt nape tam g2-g4 a a ek na b.txt
C si pete b.txt, smae jej, zalo c.txt nape tam Dd8-h4 a tm partie
 skonila, protoe bl dostal mat. 
B si pete c.txt a smae ho a i tm komunikace skonila.
Zapisujc program nemus pst jen tahy, ale i tzv. povely (vdy ale prv
jedno). Povely zanaj dvojtekou a obvykle souvis s ukonenm partie.
 Krom matu me partie skonit i z jinch dvod.
1. "achov" remza (50 tah, ti stejn pozice, pat) (dn povel)
2. vzdn se - povel :v
3. obecn peruen (nap. chybn tah soupee) :k
4. remza dohodou - nvrh :r a pijet :p , nepijet (druh z jedinch
   dvou korektnch odpovd) :n
 Ve vech techto ppadech smae na zvr bl c.txt a ern b.txt,
 existuj-li.
 Je tedy mon druh program run simulovat (je to ale nezivn).
Poznmka: Uv se tzv. dlouh notace tj. nikoliv Jc6, ale Jb8-c6. Roda
 je O-O-O (velk) a O-O (mal). Bran mimochodem nen nutn zvl᚝
 zdraznit. Pklad promny pce: e7-e8D.

 rutiny.cpp
 rutiny.h
 Zkladn achov rutiny. Tah, tah zptky, nalezen tah, zjitn, zda je
 polko napadeno, kontrola ach, atd, atd...
 Velmi dleit je ve zmnn funkce naleztahy. Spov v projit vech
 polek, otestuje se, co na nich stoj, je-li to figura thnouc barvy,
 naleznou se pro ni tahy a vykrtaj se ty neppustn (vlastn krl
 v achu). Tuhle funkci jsem mnohokrt vylepoval a pedlval, aby byla
 rychlej, protoe se opakovan vol v rekurzivnm myslcm algoritmu.

 seznam.cpp
 seznam.h
 Partii je teba prbn ukldat nejen kvli vracen tah, uloen hry 
 na disk atd., ale i z ryze achovch dvod - pravidlo 50 tah nebo
 3xstejn pozice => remza.

 stavbar.cpp
 stavbar.h
 To je ten obdlnk, kde se pe, jakm tahem se prv algoritmus zabval,
 do jak hloubky pot atd.

 teorie.cpp
 teorie.h
 Knihovna zahjen, sp knihovnika. Pozice jsou v linernm spojovm
 seznamu a ne se spust alfa-beta metoda, program se podv, jestli to,
 co by potal nen v knihovn. Je uloen v souboru teorie.teo a nen
 nezbytn nutn k chodu programu. Kdy ale program zane 1. a4, tak m to
 urelo.
 
 var.cpp
 var.h
 Obecn uiten promnn, kter se k niemu konkrtnmu nev, a tak jsou
 ve svm vlastnm modulu.
