projekt Partie
Obsah
Minimßlnφ a doporuΦenß konfigurace
---------------------------
O strßnce
Tato strßnka je kompletnφ dokumentacφ k projektu Partie, jejφ aktußlnφ verzi najdete na internetu, kde je navφc ke sta₧enφ nejnov∞jÜφ verze. Najdete zde jak technickΘ informace o projektu, tak i nßpov∞du k programu (je i v programu samotnΘm). Krom∞ toho si m∙₧ete z denφku p°eΦφst, jak v²voj projektu probφhal.
O nßs
Jmenuji se Libor Tinka (na fotce vlevo) a jsem programßtorem a vedoucφm naÜeho sout∞₧nφho t²mu. U projektu jsem se staral samoz°ejm∞ o ·hledn² a stabilnφ k≤d programu, ale takΘ jsem navrhnul prost°edφ hry. Studuji na gymnßziu Vφde≥skß v Brn∞.
M∙j bratr se jmenuje Jakub Gr≤s. M∞l na starosti grafiku a desing, ale takΘ mi velice pomohl a poradil ve svφzeln²ch situacφch. Studuje gymnßzium v UherskΘm HradiÜti.
O projektu
èachov² program s mo₧nostφ hry proti poΦφtaΦi, stopovßnφm Φasu
a trojrozm∞rnou Üachovnicφ. SouΦßstφ programu je takΘ prßce
s partiφ (naΦφtßnφ,uklßdßnφ), hernφ pozicφ a nastavenφ
u₧ivatelskΘho rozhranφ (to lze takΘ nahrßvat a uklßdat).
Program se ovlßdß v²hradn∞ pomocφ myÜi, mß podobnΘ rolovacφ
nabφdky jako prost°edφ Windows. B∞₧φ na platformßch MS-DOS a
MS-WINDOWS 98/ME (na jin²ch nebyl program testovßn).
Minimßlnφ a doporuΦenß konfigurace
Program by m∞l b∞₧et na vÜech typech PC, byl testovßn na 486DX, doporuΦuji vÜak rychlejÜφ procesor, hlavn∞ z d∙vod∙ vykreslovßnφ grafiky, tedy n∞jakΘ Pentium (>75 MHz).
Program vyu₧φvß grafick² m≤d 640x480 p°i 16 barvßch. K b∞hu programu je tedy zapot°ebφ VGA karta. StejnΘ po₧adavky platφ pro monitor.
Pro ovlßdßnφ programu je nezbytnß myÜ, tato periferie je pro program dokonce d∙le₧it∞jÜφ ne₧ klßvesnice (lze ovlßdat pouze myÜφ).
Program vyu₧φvß pouze zßkladnφch 64KB pam∞ti, ale maximßlnφ velikost spouÜt∞nΘho programu (EXE) musφ b²t minimßln∞ 213,414 byt∙, nepoΦφtßm-li spouÜt∞nφ externφch program∙ (intro, 3D Üachovnice); je tedy t°eba poΦφtat tak s 363 KB volnΘ pam∞ti pro spouÜt∞nφ.
Rozpis soubor∙
PARTIE.B00, PARTIE.B01, PARTIE.B02 - banky obrßzk∙ ke h°e
PARTIE.BMP - ·vodnφ obrazovka (barvy palety jsou na poΦßtku ΦernΘ kv∙li "rozsvφcenφ")
PARTIE.CFG - soubor s aktußlnφm nastavenφm programu
PARTIE.CT - centralizaΦnφ tabulka (informace pro poziΦnφ oce≥ovßnφ situace na Üachovnici)
PARTIE.DEF - soubor s nem∞nn²m standardnφm nastavenφm programu
PARTIE.EXE - vlastnφ program
PARTIE.HLP - nßpov∞da programu (k≤dovßnφ LATIN2)
PARTIE.HTM - struΦn² popis programu
PARTIE_D.HTM - dokumentace (tato strßnka)*
PARTIE.ICO - ikona programu (pro Windows)*
PARTIE.JPG - foto autor∙*
PARTIE.KOM - komunikaΦnφ soubor (p°edßvßnφ parametr∙ externφmu programu)*
PARTIE.LAT - struΦn² popis programu (k≤dovßnφ LATIN2)*
PARTIE.LNG - jazykov² balφΦek (obsahuje Φesk² a anglick² jazyk do programu)
PARTIE.MSK - "masky" pro tvorbu trojrozm∞rn²ch figurek
PARTIE.PAL - paleta ·vodnφ obrazovky pro jejφ "rozsvφcenφ"
PARTIE.PGN - ukßzkov² textov² zßznam ÜachovΘ partie (kompatibilnφ s programem)*
PARTIE.POS - ukßzkov² soubor se Üachovou pozicφ (kompatibilnφ s programem)*
PARTIE.SGP - zdrojov² k≤d hlavnφho programu*
PARTIE.TXT - struΦn² popis programu (k≤dovßnφ WINDOWS)*
PARTIE_K.BMP - fotka grafika
PARTIE_L.BMP - fotka programßtora
PARTIE3D.EXE - externφ program s 3D Üachovnicφ (nespouÜt∞t samostatn∞!), tato souΦßst je nestabilnφ
PARTIE3D.SGP - zdrojov² k≤d zobrazenφ 3D Üachovnice*
* lze smazat bez omezenφ funkΦnosti programu
Nßpov∞da k programu
PARTIE
Novß - zahßjφ novou partii
- zahßjenφ partie znamenß nastavenφ v²chozφ pozice na Üachovnici, vyΦiÜtenφ
partiß°e; na tahu je bφl²
NaΦφst - naΦte partii nebo hernφ pozici z disku
- zobrazφ se seznam soubor∙, ze kterΘho lze zvolit
- podle hernφho m≤du se bu∩ naΦte celß partie nebo hernφ pozice
Ulo₧it - ulo₧φ partii nebo hernφ pozici na disk
- zobrazφ okΘnko s dotazem na nßzev souboru
- podle hernφho m≤du se ulo₧φ bu∩ partie nebo hernφ pozice
- je nutnΘ zadat sprßvnou p°φponu (.PGN/.POS)
Konec - konec prßce s programem
VOLBY
Vzφt zp∞t - vrßtφ jeden tah a posune pozici v partiß°i o tento tah zp∞t
- nelze provßd∞t v turnajovΘm m≤du
Dop°edu - provede nßsledujφcφ tah a posune pozici v partiß°i o tento tah
vp°ed
- nelze provßd∞t v turnajovΘm m≤du
Prohodit strany - soupe°i si vym∞nφ svΘ pozice (na tahu je druh² hrßΦ)
- nastavenφ hry se nijak nem∞nφ
Vzdßt se - hrßΦ na tahu vzdß hru a prohrßvß, hra konΦφ
Nabφdnout remis - hrßΦ nabφdne svΘmu soupe°i remφzu a ten zvolφ, zda ji
p°φjme (nerozhodn∞), nebo ne (hra normßln∞ pokraΦuje)
Hra/Tvorba pozice - p°epφnßnφ mezi hernφm m≤dem a editaΦnφm m≤dem, kter² se
vztahuje na editaci hernφch pozic
- po provedenφ zm∞n na Üachovnici se sma₧e partiß°, tak₧e nenφ mo₧nΘ
hru ulo₧it; je to kv∙li zachovßnφ "integrity", proto₧e ulo₧enΘ hry
mohou b²t zahajovßny pouze z v²chozφ pozice
NASTAVEN═
Animace figur - p°epφnß mo₧nost figur pohybovat se po Üachovnici plynule
- toto nastavenφ se vztahuje jak k tah∙m poΦφtaΦe, tak k tah∙m, kterΘ
provßdφ Φlov∞k, pokud nemß nastavebo p°etahovßnφ figur
P°etahovat figury - p°epφnß mo₧nost pohybovat s figurami myÜφ ("ch≥apat")
- p°i p°etahovßnφ figur se figurka "uchopφ" a p°esune na po₧adovanou pozici
na Üachovnici; potΘ se teprve pustφ tlaΦφko myÜi
PoΦφtaΦ hraje za bφlΘho - p°epφnß stav bφlΘho hrßΦe (Φlov∞k/poΦφtaΦ)
PoΦφtaΦ hraje za ΦernΘho - ekvivalentφ
- takto lze nastavit i hru dvou poΦφtaΦ∙
Vyhledßvßnφ.. - nastavenφ zp∙sobu vyhledßvßnφ a obtφ₧nosti hry
- jsou t°i zp∙soby vyhledßvßnφ:
- p∙ltahy - program propoΦφtß vÜechna potencißln∞ dobrß pokraΦovßnφ
do danΘ hloubky a vybere to nejv²hodn∞jÜφ, resp. nejmΘn∞
ztrßtovΘ
- Φasov² limit - platφ pro poΦφtaΦ; program poΦφtß tak dlouho, dokud mu
nevyprÜφ Φas (jedna sekunda p°ed vyprÜenφm), potΘ
provede nejlepÜφ tah, kter² vypoΦφtal
(implicitnφ hloubka je zde 5 p∙ltah∙)
- turnajov² m≤d - ΦasovΘ omezenφ pro ob∞ strany, pokud jedna strana
nesplnφ limit, tah jφ propadß
- nekoneΦn² v²poΦet - program poΦφtß tak dlouho, dokud nenφ p°eruÜen
u₧ivatelem
Ulo₧it nastavenφ - ulo₧φ aktußlnφ nastavenφ na disk
- k nastavenφ pat°φ kompletn∞ nastavenφ prost°edφ + prodlevy pro animace a
po kliknutφ myÜi
NaΦφst nastavenφ - naΦte nastavenφ z disku (automatickΘ p°i spuÜt∞nφ programu)
Onovit p∙vodnφ nastavenφ - naΦte standardnφ nem∞nnΘ nastavenφ
JinΘ.. - ostatnφ nastavenφ (prodleva po kliknutφ, rychlost animace)
ZOBRAZEN═
3D Üachovnice - spustφ externφ program s nßhledem Üachovnice ve t°ech
dimenzφch
- Üachovnice se otßΦφ pomocφ kurzorov²ch Üipek
- p°ibli₧ovßnφ a oddalovßnφ (zoom) se provßdφ klßvesami +,-
- pohyb Üachovnice se provßdφ klßvesami 4,8,6,2
- !POZOR! Tento modul nebyl v testu stabilnφ!
Fisherovy hodiny - zobrazφ/schovß hodiny stopujφcφ Φas bφlΘho a ΦernΘho hrßΦe
- Fisherovy hodiny majφ dva cifernφky (pro ka₧dΘho hrßΦe zvlßÜ¥),
sekundovou, minutovou a hodinovou ruΦiΦku
Partiß° - zobrazφ/schovß seznam tah∙
- Φφsla na partiß°i oznaΦujφ celΘ tahy, do kter²ch se poΦφtß posun figur obou
stran
- kurzor ukazuje poslednφ tah
Ocn∞nΘ uzly - zobrazφ/schovß displej s poΦtem koncov²ch uzl∙
- p°i v²poΦtu tahu do v∞tÜφch hloubek se hernφ strom stßle v∞tvφ;
poΦet "list∙" tohoto stromu, tedy tah∙ v nejv∞tÜφ poΦφtanΘ hloubce
jsou prßv∞ koncovΘ uzly
ZajatΘ figury - zobrazφ/schovß seznam sebran²ch figurek
- umo₧≥uje hrßΦi ud∞lat si materißlnφ p°edstavu o n∞kdy dost nep°ehlednΘ
situaci na Üachovnici
PGN informace - zobrazφ/schovß informace pro hlaviΦku souboru s partiφ/pozicφ
- tyto informace pat°φ do hlaviΦky PGN nebo POS souboru a napomßhajφ lepÜφ
klasifikaci partiφ/pozic
Prost°edφ.. - okno s nastavenφm u₧ivatelskΘho rozhranφ
- sem pat°φ volitelnΘ grafickΘ prvky na obrazovce, vΦetn∞ nastavenφ barev
╚esky/English - p°epφnßnφ dvou jazyk∙
- angliΦtina se ve h°e nevztahuje na tuto nßpov∞du
INFORMACE
VÜe - nßpov∞da v²pisem
jednotliv²ch funkcφ
O projektu - okno s licenΦnφm ujednßnφm a kontaktem na autory
Historie
3.6.2002 - zahßjenφ projektu
Dneska mi koneΦn∞ doÜlo, ₧e jestli chci na sout∞₧i dosßhnout n∞jak²ch valn²ch v²sledk∙, musφm u₧ te∩ zaΦφt s programem. Proto₧e budou nßsledovat prßzdniny a jß nebudu mφt zas a₧ tak tolik Φasu, chci dokonΦit cel² engine v Pascalu do konce Φervna. Sedl jsem si k poΦφtaΦi a zaΦal psßt. Kupodivu se mi poda°ilo n∞jak vymyslet, jak bude pracovat vyhledßvaΦ tah∙ - rekurzφ. Ale bude v∙bec rekurze v Baltazarovi mo₧nß? Musφm to jeÜt∞ promyslet. Stejn∞ tak alfa-beta odsekßvßnφ v mΘm algoritmu, kterΘ znaΦn∞ zvyÜuje sφlu programu z blbce na zaΦßteΦnφka. Poda°ilo se mi dokonΦit funkci na urΦovßnφ, zda je nebo nenφ Üach. Nevφm, jestli spolehliv∞ funguje, ale snad ano...
5.6.2002 - algoritmus je asi hotov
Vzhledem k tomu, ₧e se nechci pouÜt∞t v Baltazarovi do rekurze, pot°ebuji n∞jak² slo₧it∞jÜφ (rekurze v tomto p°φpad∞ zjednoduÜuje) algoritmus. KoneΦn∞ se mi poda°ilo dßt n∞co do hromady. Napsal jsem n∞jakΘ vedlejÜφ funkce a procedury, ale jinak jsem neud∞lal nic zvlßÜtnφho. U₧ vφm, jak budu vyhledßvat a vyÜkrtßvat tahy tak, aby se program nerekurzivn∞ dostal alespo≥ na Φty°i p∙ltahy (·rove≥ rekreaΦnφho hrßΦe, mo₧nß i lepÜφ). NejspφÜ se bude sestavovat pole variacφ, kde se bude hledat tah s nejlepÜφm hodnocenφm na zßklad∞ hodnocenφ tah∙ nastßvajφcφch.
10.6.2002 - prvnφ pokroky s tahy
VΦera a p°edevΦφrem (vφkend) jsem se domluvil s bratrem Kubou na spoluprßci. On bude d∞lat grafiku (figurky, polφΦka Üachovnice, logo...) a jß to ostatnφ. Prvnφ sadu figurek u₧ mßme nakreslenou v BaltEditu a na dalÜφch alespo≥ devφti sadßch brßcha nynφ pracuje. Mn∞ se koneΦn∞ poda°ilo vychytat mouchy, blechy, vÜi a jinou hav∞¥ z programu, tak₧e jsem mohl zaΦφt s vyhledßvaΦem tah∙. Nenφ to ·pln² vyhledßvaΦ, tφm myslφm podprogram, kter² by naÜel tah protivnφka, ale pouze procedura, je₧ zjistφ vÜechny p°φpustnΘ tahy bφlΘho/ΦernΘho. Po hodin∞ prßce se mi poda°ilo, aby procedura nalezla tahy p∞Üc∙ a jezdc∙. V nejbli₧Üφ dob∞ se pokusφm o zbytek figur, co₧ u₧ bude brnkaΦka. Ne₧ vÜak zaΦnu s vlastnφm vyhledßvaΦem tah∙ poΦφtaΦe, budu muset dokonΦit i mo₧nost roÜßdy a p°em∞ny p∞Üce (vlastn∞ se bude ke ka₧dΘmu tahu zapisovat struΦnß informace o stavu na Üachovnici, tedy: hodnocenφ, Üach/mat/pat ... to jeÜt∞ musφm promyslet).
11.6.2002 - vyhledßvaΦ tah∙ z pozice je skoro hotov
Netrvalo to dlouho a vyhledßvaΦ mo₧n²ch tah∙ z urΦitΘ pozice je skoro hotov². Funguje pro vÜechny figury, nepoΦφtß vÜak s roÜßdou a jak jsem si vÜiml, ani s branφm p∞Üci. To jsou vÜak takΘ celkem jednoduchΘ v∞ci, tak₧e by m∞li b²t hotovΘ do pozφt°ka. Taky jsem trochu naΦal minimaxov² algoritmus, ale ten p°esto₧e funguje, mß sφlu jen jeden p∙ltah (d∞lß tahy, kterΘ v aktußlnφ pozici p°inesou nejv∞tÜφ zisky) a neznß ani Üach ani mat, tak₧e i kdy₧ jsem si s nφm zahrßl n∞kolik partiφ (nap°. 1.e4 Ja6 2.Sc4 Vb8? 3.Df3 Va8?? 4. Dxf6 mat), nestßlo to za °eΦ. P°i jednom p∙ltahu sφly je sice o n∞co lepÜφ, ne₧ kdyby hrßl ·pln∞ nßhodn∞, k≤d je p°φmo trivißlnφ, ale porazφ ho i naprost² zaΦßteΦnφk, kter² se zrovna dnes seznßmil s pravidly Üachu. Ne₧ se tedy pustφm do minimaxu a alfa-beta odsekßvßnφ, budu muset po°ßdn∞ otestovat vyhledßvaΦ tah∙, jestli opravdu spolehliv∞ funguje. Jakßkoliv chybiΦka by se pak zm∞nila ve velkou chybu, kterou by bylo opravdu t∞₧kΘ hledat. Do zφt°ka navrhnu algoritmus ve form∞ v²vojovΘho diagramu a pokud zφtra B∙h dß, bude u₧ program koneΦn∞ schopen vyvφjet sluÜnΘ tahy (a mo₧nß bude i hotov²).
12.6.2002 - vyhledßvaΦ tah∙ je tak°ka u konce
Asi jsem se vΦera p°ecenil, proto₧e jsem netuÜil, jak dlouho mi potrvß implementace obyΦejnΘ roÜßdy. Tu jsem dokonΦil prßv∞ dnes a myslφm, ₧e je to p°edposlednφ souΦßst vyhledßvaΦe tah∙. To vÜak neznamenß, ₧e se na podprogramech jeÜt∞ nebude pracovat, proto₧e je p°ed p°episem do Baltazara podrobφm optimalizaci a p°i testovßnφ se v₧dycky pßr much najde. Nynφ je t°eba jeÜt∞ zkontrolovat vyhledßvaΦ tah∙ (pro r∙znΘ situace) a implementovat jeÜt∞ p°em∞nu p∞Üce (p°edpoklßdßm, ₧e program bude mφsto p°em∞n p∞Üc∙ na dßmy uva₧ovat, zda by nebyla v²hodn∞jÜφ jinß varianta; m∙₧e toti₧ nastat situace, kdy ...e8J! mat je zßsadn∞ lepÜφ ne₧ ...e8D - m∙₧ou vÜak nastat i situace s hlubÜφmi d∙vody). Minimaxov² algoritmus u₧ mßm na papφ°e a zb²vß jen p°epis (nebude to tak snadnΘ). Zφtra bych m∞l alespo≥ stihnout rozpracovat minimax.
13.6.2002 - s problΘmy jeÜt∞ nenφ konec!
U₧ nebudu d∞lat ₧ßdnΘ progn≤zy do zφt°ka, proto₧e dnes jsem se jeÜt∞ zab²val hledßnφm chyby v roÜßd∞ a po zbytek podveΦera jsem implementoval p°em∞nu p∞Üce. Tφm vznikl dalÜφ problΘm, proto₧e poΦφtaΦ musφ po p°em∞n∞ p∞Üce poΦφtat se Φty°mi p°φpady p°em∞n. nicmΘn∞ jsem tento problΘm vy°eÜil (jednoduÜe se vygenerujφ Φty°i tahy v p°φpad∞ poΦφtaΦe, v p°φpad∞ Φlov∞ka si m∙₧e Φlov∞k samoz°ejm∞ vybrat). S prom∞nou p∞Üce jsem jeÜt∞ neskonΦil, tak₧e zφtra to u₧ SNAD utnu a budu se moci v∞novat minimaxu....
15.6.2002 - m∙₧e se zaΦφt s minimaxem
Nynφ u₧ jsem implementoval i prom∞nu p∞Üce, tak₧e jsem vyΦerpal vÜechny mo₧nΘ tahy z pozice a m∙₧u se pustit do minimaxu. Podle schΘmatu by m∞l minimax fungovat dob°e, ale p°i p°episu nejspφÜ dojde k n∞jak²m problΘm∙m. Nechßm se p°ekvapit zφtra.
16.6.2002 - problΘmy s implementacφ minimaxu
Dnes jsem snad zcela dokonΦil rozhranφ pro u₧ivatele (hry hrßΦ-hrßΦ, hrßΦ-poΦφtaΦ, poΦφtaΦ-hrßΦ a poΦφtaΦ-poΦφtaΦ) a nahrubo napsal k≤d pro minimax i s alfa-beta odsekßvßnφm. Nevφm jak, ale poda°ilo se mi ud∞lat o mnoho kratÜφ a elegantn∞jÜφ schΘma. Ve starΘm schΘmatu, kde se linky r∙zn∞ k°φ₧ily a tvo°ily jakousi logickou sple¥, jsem se nedokßzal orientovat, a u₧ v∙bec ne to p°epsat do Pascalu. I kdyby se mi to povedlo, objevila by se v programu nßv∞Ütφ, co₧ je pohroma pro dalÜφ p°epis (v∞zte, ₧e elegantnφ algoritmy nßv∞Ütφ v∙bec nepot°ebujφ, staΦφ jim podprogramy). ZaΦal jsem tedy znova a povedlo se. Implementaci a dokonΦovßnφ p°edeÜl²ch rest∙ s minimaxem jsem v∞noval cel² den a myslφm, ₧e zφtra bych u₧ m∞l KONE╚N╠ algoritmus zcela dokonΦit. Nynφ mß program velikost 16 288 byt∙ a jß se stßle vφce obßvßm p°episu do C. N∞kterΘ struktury do Baltazara prost∞ nevφm jak dostanu, tak₧e je budu muset interpretovat jako podprogramy v C. Moje nßroky vÜak jsou, aby byl program co nejvφce v BaltazarovskΘ stromovΘ struktu°e. Druhou strßnkou je vlastnφ p°epis do C, kter² znamenß nastudovßnφ n∞kter²ch pasß₧φ z uΦebnice, ale to by nem∞l b²t problΘm. Zatφm netuÜφm, jak to ud∞lßm s podprogramy, kterΘ volajφ podprogramy, ale to zkusφm nastudovat z uΦebnice "CΘΦka" a Baltazara b∞hem mojφ dovolenΘ (3.7.2002). Voln² Φas do dovolenΘ vyu₧iji bu∩ k pokus∙m s 3D grafikou v Pascalu a editorem na figurky (nem∞l by to b²t zas a₧ tak velk² problΘm), anebo u₧ se pokusφm o p°epis (zatφm p∙jde o surovou textovou podobu, jejφ₧ funkΦnost je vÜak klφΦovß).
17.6.2002 - poslednφ chybiΦky
Minimaxov² algoritmus z papφru skuteΦn∞ funguje, ale dnes jsem nem∞l dost Φasu ho otestovat. Z knφ₧ky jsem si vytßhl jednu skv∞lou pozici pro testovßnφ minimaxu (p°i r∙zn²ch hloubkßch d∞lß r∙znΘ tahy) a vyzkouÜel ji. Bohu₧el p°i normßlnφ ÜachovΘ partii se mi progrßmek n∞jak zakousl, tak₧e doufßm, ₧e to nebude alfa-beta odsekßvßnφm a jeÜt∞ to po°ßdn∞ otestuji. NicmΘn∞ jsem si nechal vypisovat ·pln² strom do hloubky t°φ p∙ltah∙ (vypisovaly se mi vÜechny tahy a jejich hodnocenφ). Program skuteΦn∞ d∞lal co mß a opravdu proÜel cel² strom, ale chyba byla a momentßln∞ stßle je v p°edßvßnφ hodnoty a₧ ke ko°enu (hodnota tahu se poΦφtß v zßvislosti na hlubÜφch tazφch a problΘm byl v tom, ₧e hodnoty "nevyplavaly" a₧ na povrch). Nem∞l by vÜak b²t velk² problΘm ji opravit, to vÜak nechßm na zφtra. Algoritmus u₧ KONE╚N╠ kompletn∞ pracuje na hloubce 1 p∙ltah, co₧ je sice mizernΘ, ale alespo≥ n∞co. Obßvßm se, ₧e jsou tu jeÜt∞ malΘ problΘmy jako: maty a paty (proΦ se nedetekujφ?), pravidlo o padesßti tazφch (brnkaΦka, pravidlo o t°ech tazφch u₧ mßm hotovΘ) a brßnφ en-passant (to bude mo₧nß chtφt malou ·pravu). Nakonec bude pot°eba to vÜechno zkontrolovat (nap°. jestli Φern² ned∞lß dvakrßt roÜßdu).
18.6.2002 - koneΦn∞ u₧ hraje!
Po odstran∞nφ chyb v minimaxu (odstran∞nφm t∞chto chyb vznikly dalÜφ chyby v ·pln∞ jin²ch Φßstech programu, tak₧e dalo docela prßci cel² program "stabilizovat") jsem mohl vyzkouÜet hru p°i v∞tÜφch hloubkßch, kterß pro m∞ v∙bec nebyla zklamßnφm. Tomu p°edchßzelo mnoho prßce s vypisovßnφm celΘho stromu a nachßzenφm spousty chyb (s n∞kter²mi jsem se u₧ dlouho/v∙bec nesetkal). Minimax sice pracuje, jak mß, ale stßle jsou to naprosto suchΘ tahy a je pot°eba dßt tomu Ü¥ßvu. Jak na to? Nejprve budu muset jeÜt∞ implementovat ten en-passant a projφt vÜechny mo₧nΘ druhy situacφ, kterΘ mohou nastat (uff), p°iΦem₧ se urΦit∞ objevφ pßr chybek, co budou chtφt oÜet°it. Nem∞lo by to b²t tak straÜnΘ, tak₧e by mi m∞l zb²t n∞jak² Φas na "osv∞₧enφ" hry poΦφtaΦe. P°edevÜφm jeÜt∞ omrknu alfa-beta odsekßvßnφ, proto₧e mßm neblah² pocit, ₧e nefunguje (p°i Φty°ech p∙ltazφch jsem na tah Φekal p°es deset sekund). DalÜφ dost d∙le₧itou ·pravou bude zabrßn∞nφ opakovßnφ tahu (p°i h°e poΦφtaΦ-poΦφtaΦ obvykle dochßzφ k remφzßm kv∙li opakovßnφ stejnΘho tahu) a taky oce≥ovßnφ pohyblivosti figur (dost d∙le₧it² faktor, ale na prvnφ mφsto dßvßm materißl). Mßlem jsem zapomn∞l,. ₧e tu byla jeÜt∞ malß moucha s p°em∞nou p∞Üce (Φlov∞k si nem∙₧e vybrat a poΦφtaΦ si volφ jezdce mφsto dßmy). Rozhodl jsem se ostatnφ dod∞lßvky (nap°, ΦasovΘ omezenφ p°i p°em²Ülenφ poΦφtaΦe) dod∞lat a₧ v Baltazarovi a v∙bec p°epsat k≤d do Baltazara co mo₧nß nejd°φv. Jeliko₧ jedu s rodinou na dovolenou, pot°eboval bych na cestu n∞jak² notebook (:-).
20.6.2002 - Üpatnß zprßva
Kdy₧ jsem tak p°em²Ülel o alfa-beta odsekßvßnφ, uv∞domil jsem si, proΦ je vlastn∞ program tak pomal². Je to tφm, ₧e pro ka₧d² uzel nejprve vyhledßm vÜechny mo₧nΘ tahy a ty pak oce≥uji. P°i programovßnφ jsem si v∙bec neuv∞domil, ₧e nejvφc Φasu se neÜet°φ jen neoce≥ovßnφm tam, kde to nenφ t°eba, ale hlavn∞ tφm, ₧e "zbyteΦnΘ" tahy se v∙bec nemusejφ provßd∞t. Program tedy neocenφ vÜechny tahy, ale vÜechny je provede, Φφm₧ nestoudn∞ vzroste pom∞r Φasovß nßroΦnost ku hloubce prohledßvßnφ. ╪eÜenφm je p°ekopat cel² program (grr). V²hodou bude prostÜφ a efektivn∞jÜφ k≤d. Op∞t by bylo jednoduchΘ nasadit rekurzi, ale tΘ se sna₧φm vyvarovat. NaÜt∞stφ dneÜkem prakticky konΦφ uΦenφ a navφc bude vφkend, kter² zasv∞tφm dokonΦenφ ÜachovΘho programu (ne cel², p°esto₧e mßm Φasov² skluz jak hrom).
24.6.2002 - jde to zt∞₧ka
Nemohu uv∞°it, ₧e mi to jde tak pomalu. Kv∙li rychlejÜφmu algoritmu jsem musel cel² program napsat prakticky znova (n∞kterΘ struktury, jako t°eba vykreslenφ Üachovnice, jsem prost∞ zkopφroval), tak₧e asi proto se tak brodφm... Dnes jsem (doufßm) dokonΦil hru dvou lidsk²ch hrßΦ∙ a dynamick² prohledßvacφ algoritmus je na sv∞t∞ (dokonce u₧ je implementovßna jeho zßkladnφ Φßst). Budu taky muset zakomponovat vracenφ tah∙, kterΘ ve "statickΘ" verzi nebylo, no a taktΘ₧ nastavenφ hloubky prohledßvßnφ a hrßΦe. To vÜe b∞hem hry, tak₧e bude nejspφÜ zapot°ebφ n∞jakΘ menu. Na to se kouknu b∞hem zφt°ka a dnes zkusφm naΦφt n∞jakou tu 3D grafiku (zatφm t°eba jen vykreslenφ Üachovnice). NaÜt∞stφ mßm jeÜt∞ svΘ starÜφ strßnky, kterΘ se okolo 3D grafiky toΦφ..
25.6.2002 - pokroky s dynamickou metodou
P°esto₧e se mi podle nßΦrtk∙ a zdrojßku (ten jsem si pro p°ehlednost vytiskl) zdß vÜechno naprosto jasnΘ, v∙bec nevφm, jak budu vÜechny ty "obraty" v programu p°episovat, ale asi si s tφm n∞jak poradφm. Ostatn∞, budu na to mφt i s grafikou necel² m∞sφc, co₧ je Üeredn∞ mßlo (nepoΦφtßm zhruba dvout²dennφ rezervu na nßvrhy a vÜechny ty v∞ci, kde se nedß ani velmi nep°esn∞ urΦit, jak dlouho budou trvat). StaΦφ u₧ jen mßlo ·prav ve zdrojßku a program by m∞l p°em²Ület rychleji ne₧ p°edtφm u₧ jen pro fakt, ₧e provede podstatn∞ mΘn∞ operacφ, ne₧ u "statickΘ" verze. B∞hem dneÜnφho veΦera si p∞kn∞ v klidu ud∞lßm nßvrh na dokonΦenφ programu (pfff), projdu si cel² zdrojßk na papφ°e (kdy₧ jsem si ho chvφli prohlφ₧el, hned jsem naÜel dv∞ zßsadnφ chyby), proto₧e v textovΘm Pascalu, by¥ i v VGA - 50-ti °ßdkovΘm m≤du, je k≤d pro v∞ΦnΘ listovßnφ dost nep°ehledn² (nevφm jak vy, ale jß se u₧ ve dvacetikilovΘm progrßmku obΦas chvilku hrabu, ne₧ najdu to pravΘ mφsto). Co se t²Φe nßvrh∙ na 3D Üachovnici, zlobila m∞ deformace Üachovnice p°i rotaci, ale p°esto₧e jsem tuto chybu neodstranil, znßm u₧ jejφ p°φΦinu, kterou odstranφm snadno. Je to dßno nastavenφm perspektivy. Objekt mi moc ubφhß do st°edu obrazu, a tak jsou body jaksi stahovßny a nedr₧φ se na Üachovnici rovnΘ linie (ne, ₧e by to nevypadalo nezajφmav∞). Prvnφm problΘmem je zde tvorba 3D editoru (nic nezvlßdnutelnΘho) a vlastn∞ taky zp∙sob vykreslovßnφ objekt∙ figurek na Üachovnici v libovolnΘm ·hlu (taky prakticky vy°eÜeno - p°iÜel jsem na to na autobusovΘ zastßvce p°e cestou UherskΘ HradiÜt∞ - Brno). Jsem rßd, ₧e se mΘ ·silφ pomalu vyplßcφ a taky, ₧e budu moci koneΦn∞ podat zprßvu o dokonΦenφ programu.
1.7.2002 - ovoce z dynamickΘho prohledßvßnφ
P°esto₧e zφtra u₧ odlΘtßm na jin² kontinent, sna₧il jsem se dnes dohnat, co se dalo. Bohu₧el jsem po°ßdn² Üachov² k≤d do konce Φervna ani nedokonΦil, tak₧e mßm obavy, zda to vÜechno v∙bec do konce prßzdnin stihnu. NejlepÜφ by bylo sehnat do t²mu n∞jakΘho Baltazaristu, kter² by dokßzal podle m²ch pokyn∙ a v²vojßk∙ napsat k≤d, ale nev∞°φm, ₧e jeÜt∞ n∞koho takovΘho se₧enu. Dnes se mi poprvΘ poda°ilo p°im∞t program, aby prohledßval dynamicky do hloubky 1 p∙ltah a podle Φφsel se zdß, ₧e zvlßdne i v∞tÜφ hloubky, ale je tu jeÜt∞ jedna moucha, kterß by vyplavala na povrch v p°φpad∞, ₧e program "uΦeÜu". Te∩ u₧ v∙bec nemßm Φas, tak₧e si cel² program prost∞ vytisknu a p°φpadnΘ chyby zkusφm najφt pomocφ trasovacφch tabulek (to je snad nejstarÜφ metoda, jakou znßm). Velikost programu je k mΘmu ·divu asi o 6 KB v∞tÜφ, ne₧ velikost jeho "statickΘho" brßÜky, ale d∙le₧itß je rychlost. Mßm dojem, ₧e jsou v programu zbyteΦnΘ pasß₧e, ale ty budu muset najφt na papφ°e. Vypadß to, ₧e u₧ vÜe sp∞je ke konci, tak₧e hned po dovolenΘ (dva t²dny v cizin∞, kde si vÜak p°edevÜφm odpoΦinu od prßce a Ükoly) se pustφm do optimalizace k≤du a koncem m∞sφce musφ b²t kompletnφ alespo≥ zßklad v Baltazarovi, jinak tu nenφ ani pramalß Üance na ·sp∞ch. Zatφm je to drama.
14.7.2002 - dva dny po dovolenΘ
Ne, ₧e bych toho na dovolenΘ tolik stihl (pßr oÜkliv²ch vÜφ jsem v k≤du naÜel), ale dnes se mi po skoro dvoudennφ prßci poda°ilo docφlit toho, ₧e program prohledßvß do hloubky 3 p∙ltahy. Zatφm je to jen Φist² minimax (₧ßdnΘ odsekßvßnφ), ale funguje naprosto perfektn∞. V testovacφ pozici podle knihy nalezl pro hloubky 1,2 a 3 p°φsluÜnΘ tahy i se sprßvn²m ohodnocenφm, tak₧e p°edßvßnφ hodnot uzl∙ ve stromu u₧ mßm koneΦn∞ za sebou. Upravil jsem i pßr nedod∞lßvek ohledn∞ en-passant a branφ p∞Ücem, ale stßle jeÜt∞ musφm do°eÜit roÜßdu (jde o to, ₧e poΦφtaΦ by si Üpatn∞ pamatoval stav roÜßd ve h°e a nemusel by s nimi v∙bec poΦφtat). Vy°eÜil jsem zakonΦenφ hry: poΦφtaΦ si velmi cenφ remφzy (matu jsem p°id∞lil hodnotu 10000, patu 9000), pokud tedy nenφ v dohledu mat, poΦφtaΦ bude usilovat o remφzu. Zφtra se pokusφm program "uΦesat" a zprovoznit i pro u₧ivatele (zatφm byl jen v experimentßlnφm stadiu, p°esto₧e u₧ivatelskΘ rozhranφ u₧ bylo ΦßsteΦn∞ dokonΦeno), co₧ bude znamenat i zakomponovat pravidlo o t°ech a padesßti tazφch (v podstat∞ jen vÜe p°epφÜu ze starÜφ - "statickΘ verze"). Mßm dobrou nßladu, proto₧e ·silφ se vyplatilo. Do konce tohoto m∞sφce musφ b²t hotov² zßklad v Baltazarovi, Φemu₧ brzkΘ dokonΦenφ algoritmu v Pascalu jen pom∙₧e, ale p°esto bude p°epis t∞₧k² z hlediska odliÜnΘho programovacφho jazyka (C) a hlavn∞ struktury programu (stromovß).
15.7.2002 - rvaΦka s alfa-beta
V₧dycky, kdy₧ n∞co programuji a zdß se, program je bez chyb, p°idßnφm n∞jakΘ komponenty se spousta souΦßstφ jakoby zhroutφ a je nutnΘ je vÜechny modifikovat, aby to celΘ dohromady fungovalo. Tahle zkuÜenost ve m∞ vyp∞stovala to, ₧e nev∞°φm v bezchybnost programu; spokojφm se vÜak s tφm, ₧e to n∞jak funguje (ale bez d∙kladn²ch test∙ nepova₧uji ₧ßdn² program za ukonΦen²). DalÜφ komponentou (tenhle pojem nepou₧φvßm ve spojitosti s objektov∞-orientovan²m programovßnφm, myslφm tφm jen dalÜφ p°φdavek do programu; Partie bude programovßna strukturovan∞, jinak to zatφm v Baltazarovi nejde) je alfa-beta odsekßvßnφ, od kterΘho jsem si sliboval velkΘ urychlenφ programu. P∙l dne mi trvalo, ne₧ se mi alfa-beta poda°ilo zprovoznit. Kdy₧ jsem si zobrazoval hernφ strom, zjistil jsem, ₧e alfa-beta funguje p°esn∞, jak mß, ale odsekan²ch v∞tvφ bylo p°φliÜ mßlo. Porovnßval jsem si poΦet proÜl²ch uzl∙ p°i r∙zn²ch hloubkßch u modernφho programu. Tento program propoΦφtßval podstatn∞ mΘn∞ uzl∙, p°esto se vÜak jejich poΦet v porovnßnφ se schopnostmi mΘho programu shodoval alespo≥ °ßdov∞. Uv∞domil jsem si, ₧e cizφ program nehodnotφ tahy jen podle materißlovΘ bilance (rozdφl hodnoty m²ch figur proti soupe°ov²m), ale hodnota tahu se upravuje dalÜφmi oce≥ovacφmi kritΘrii, jako je nap°φklad pohyblivost figur (mΘ figury musφ mφt co nejv∞tÜφ poΦet polφ, na kterΘ mohou tßhnout; naopak soupe° by m∞l mφt voln²ch polφ co nejmΘn∞) anebo centralizace (snaha ovlßdnout centrum Üachovnice nap°. obsazenφm p∞Üci - souvisφ to vÜak s pohyblivostφ). Ani nemluvφm o zavedenφ dalÜφch pravidel, kterΘ do Partie asi ani zavßd∞t nebudu (nemßm na to nervy). Pat°φ do obecn²ch znalostφ ka₧dΘho Üachisty, pat°φ sem t°eba dr₧enφ p∞Üc∙ v jednΘ °ad∞ Φi snaha dostat krßle do bezpeΦφ nejlΘpe roÜßdou. Myslφm, ₧e docela bude staΦit zavΘst pohyblivost, tak₧e jen t∞₧ko se najde hodn∞ tah∙ se stejnou hodnotou. Tφm by se m∞l (teoreticky) zefektivnit algoritmus alfa-beta. TakΘ jsem si vzpomn∞l na post°eh jednoho mΘho kamarßda z gymnßzia. Povφdal n∞co o odsekßvßnφ stejn²ch tah∙. Mluvil spφÜe o vyhledßvßnφ jednΘ strategie, co₧ je pro m∞ nadlidsk² ·kol, ale motivoval m∞ k jednomu nßpadu, kter² se ukßzal jako skv∞l² (Ülo o jistou ·pravu alfa-beta -- program s touto ·pravou skuteΦn∞ odsekal spousty tah∙ a dokonce vy°eÜil testovacφ pozici na v²bornou; bohu₧el nem∙₧u p°ijφt na to, jak to vlastn∞ funguje a proΦ). NaÜt∞stφ jde vÜe podle plßnu, p°esto pomaleji, ne₧ bych cht∞l.
16.7.2002 - ne a ne to skoncovat
Dnes jsem skuteΦn∞ bleskurychle ud∞lal oce≥ovßnφ na pohyblivost figur, kterΘ zßm∞rn∞ upravuje stßvajφcφ hodnoty tah∙ velmi jemn∞. Na prvnφm mφst∞ je samoz°ejm∞ materißl. Figurkßm jsem nedßvno upravil koeficienty, kterΘ jsem vyΦetl z knihy: p∞Üec 1.00, jezdec 3.25, st°elec 3.50, v∞₧ 5.00, dßma 9.00 a krßl 1000.00 (musφ to b²t vφc, ne₧ je souΦet hodnot vÜech figur, aby poΦφtaΦ krßle nikdy nezkouÜel m∞nit a zßrove≥ o soupe°ova krßle usiloval). Dnes jsem si zavedl dalÜφ konstantu, tedy hodnotu pole, kterou jsem si podle sebe nastavil na 0.0001. Oce≥ovacφ funkce ke stßvajφcφ hodnot∞ podle materißlu (-40.50 a₧ +40.50) p°ipoΦφtßvß jeÜt∞ poziΦnφ v²hodu (ta je v intervalu 0.0000 a₧ ▒0.0062). Tahy jsou tedy v mΘm programu hodnoceny na Φty°i desetinnß mφsta, co₧ mß sv∙j v²znam prßv∞ v tom, ₧e se dßvß p°ednost materißlu p°ed poziΦnφ v²hodou dφky v∞tÜφ ΦφselnΘ hodnot∞ a p°i stejnΘm materißlu jsou urΦujφcφ prßv∞ dv∞ poslednφ desetinnß mφsta. Po aplikaci tohoto oce≥ovßnφ naÜt∞stφ nenastaly ₧ßdnΘ problΘmy a program skuteΦn∞ vyhledßval rychleji a stejn∞ efektivn∞. Myslel jsem si, ₧e u₧ se koneΦn∞ dostane s poΦtem ohodnocen²ch uzl∙ do tolerance jistΘ tabulky z knihy (alfa-beta odsekßvßnφ mß mφt takovou ·Φinnost, ₧e p°i n minimaxem prohledßvan²ch tazφch staΦφ ve skuteΦnosti prozkoumat jen asi p∞t krßt odmocnina z n s naprosto stejn²m v²sledkem). Omyl. Do hloubky Φty° p∙ltah∙ se sice program dostal za necelΘ t°i sekundy, co₧ mi staΦφ (Φty°i p∙ltahy staΦφ na 99% rekreaΦnφch hrßΦ∙ a navφc se na tah nemusφ vylo₧en∞ Φekat), ale i jednoduch² ukßzkov² Üachov² program v Q-Basicu to dokßzal v lidskΘm m∞°φtku hned. U p∞ti p∙ltah∙ jsem si mohl i odskoΦit na malou, ne₧ poΦφtaΦ koneΦn∞ naÜel tah. Marn∞ jsem v programu hledal chybu, vÜe se zdßlo sprßvn∞. Tak jsem to vzdal a pokusil jsem se zprovoznit rozhranφ pro u₧ivatele (zadßvßnφ tah∙, hra s poΦφtaΦem). Pak m∞ ale mohl trefit Ülak, kdy₧ cosi ve vyhledßvacφ procedu°e zasahovalo do pam∞¥ov²ch mφst, kde to nem∞lo co d∞lat, tak₧e z toho byly "neplatnΘ operace" a program padal. Dost m∞ to naÜtvalo, tak₧e jsem toho pro dneÜek nechal. Nechßpu, proΦ oce≥ovacφ procedura vypovφdß slu₧bu v cyklu, kde se volß jen jednou a samostatn∞ volanß pracuje ... sprßvn∞? Ne - Üpatn∞! Kdy₧ jsem ze zßkladnφ pozice nechal poΦφtaΦ poΦφtat do hloubky p∞ti p∙ltah∙, po skonΦenφ vyhledßvßnφ na Üachovnici p°ibyli dva p∞Üci. Z toho plyne, ₧e n∞co musφ b²t Üpatn∞. Nßsledujφcφ postup tedy bude takov², ₧e budu optimalizovat, odvÜivovat a "vymetßvat pavuΦiny" v celΘm programu, kter² mß te∩ velikost 32 234 byt∙. Spoustu mφst pro budoucφ optimalizaci jsem si oznaΦil specißlnφm znamΘnkem v komentß°i, tak₧e se nebude nic hledat. To, co jsem neoznaΦil a bude urΦit∞ upraveno, jsou do oΦφ bijφcφ homogennφ struktury, kde se dß leccos "povyt²kat", jak tomu °φkßm jß. V programu nebudou ₧ßdnΘ vno°enΘ funkce a procedury, ani prom∞nnΘ, nic lokßlnφho. Je to z d∙vodu pozd∞jÜφho p°episu. Stßle pφÜu pozd∞jÜφho, ale moc Φasu u₧ nenφ. Kolik problΘm∙ je pot°eba jeÜt∞ vy°eÜit? Kolik p°ekß₧ek jeÜt∞ zb²vß k cφli? No, motivace mi nechybφ. Prßv∞ m∞ napadlo n∞co pro mnohem rychlejÜφ oce≥ovßnφ...
17.7.2002 - lov na chyby byl ·sp∞Ün²
Dnes jsem v∞noval celΘ dopoledne optimalizaci a opravßm chyb, kterΘ se v programu vyskytovaly. KoneΦn∞ jsem implementoval roÜßdu a en-passant, u₧ivatelskΘ rozhranφ je kompletnφ (program rozpoznß konec hry), bylo optimalizovßno zjiÜ¥ovßnφ Üachu (soupe° se mohl proti Üachu brßnit Üachem svΘmu soupe°i) a mnoho dalÜφho. V zßv∞ru dne jsem si zkusil zahrßt s poΦφtaΦem zkuÜebnφ partii. PoΦφtaΦ hrßl p°i sφle 3 p∙ltahy, ale hned ve t°etφm tahu se cosi zvrtlo. No, urΦit∞ to nebude nic vß₧nΘho, jen se budu muset vrßtit k trasovßnφ vyhledßvßnφ tah∙. Pak budou nßsledovat cviΦenφ na mat a remis a v ·plnΘm zßv∞ru aplikace algoritmu hrubΘ sφly (to je skuteΦn∞ termφn pro minimaxov² algoritmus). JeÜt∞ jednou jsem si toti₧ podrobn∞ proΦetl Φlßnek o alfa-beta v knize a uv∞domil jsem si, co mi v programu chybφ. Vlastn∞ p∙jde jen o modifikaci v∞tÜφ Φßsti k≤du, ale to by nem∞lo zabrat vφc jak dv∞ hodiny (jak se znßm, zabere to cel² den). Na papφ°e mi tento algoritmus sluÜn∞ fungoval, te∩ to jen aplikovat. V²sledkem by m∞lo b²t mΘ vysn∞nΘ Φty°i p∙ltahy a mo₧nß i vφc.
19.7.2002 - rychlejÜφ ale pomal²
Od vΦerejÜka do dneÜka jsem jßdro programu dost pozm∞nil, tak₧e odpadla oce≥ovacφ funkce, kterß se rozΦlenila do t°φ Φßstφ, kterΘ jsou p°φmo ve vyhledßvacφm algoritmu. Co se t²Φe aplikace brutßlnφ sφly, v∙bec to nezabralo. Program sice odsekßval v∞tÜφ mno₧stvφ tah∙, ale zbyteΦn²ch. Na Φty°i p∙ltahy se nynφ Φekß sice kratÜφ dobu, ale to je p°esto pro m∞ moc mßlo. Sna₧il jsem se, aby program oce≥oval koncovΘ tahy (v listech hernφho stromu) co nejjemn∞ji, aby pak mohl odsekat vφce v∞tvφ, co₧ docela zabralo, ale u Φty°ech p∙ltah∙ se mi poda°ilo dosßhnout nejlepÜφho v²sledku cca 60 000 koncov²ch uzl∙. To je sice oproti p∙vodnφm asi 200 000 uzl∙ podstatn∞ lepÜφ, ale ve srovnßnφ s dobr²m Üachov²m programem (6 240 uzl∙) to je nic. B∞hem noci si p°eΦtu knφ₧ce o poslednφ mo₧nΘ technice, kterß by mohla zlepÜit souΦasnou situaci programu: hledßnφ klidu (quiescence search). Jednß se o zavrhovßnφ jist²ch ·dern²ch tah∙ a optimalizuje alfa-beta odsekßvßnφ. Pro dneÜek jsem jeÜt∞ zkusil zjemnit oce≥ovßnφ zavedenφm hodnocenφ centralizace figur, ale to nem∞lo p°φliÜ valn² v²sledek. Rßno moud°ejÜφ veΦera.
2.8.2002 - po krßtkΘm odkladu se jede naostro
Po devatenßctΘm Φervnu u₧ jsem na programu nijak moc nepracoval, spφÜ jsem se staral o "papφrovou" prßci. Zφtra si vÜe d∙le₧itΘ (k≤d v Pascalu, nßvrhy, knφ₧ky) beru s sebou do UherskΘho HradiÜt∞, kde bratr vypracoval grafickou Φßst. Tam se pokusφm b∞hem dvou, maximßln∞ t°φ t²dn∙ spojit Jakubovu grafickou Φßst s k≤dem, kter² napφÜu v Baltazarovi. ProblΘm je prßv∞ ve strukturßch psan²ch v C a v celkovΘ stromovΘ koncepci Baltazara. S knφ₧kami, kterΘ mßm (UΦebnice jazyka C - vÜe srovnßvß s Pascalem, p°φruΦka k Baltazarovi 5.0, uΦebnice Baltazara 3.3), by vÜe m∞lo jφt docela hladce. P°i psanφ k≤du vÜak budu muset d∞lat ΦastΘ kontroly, proto₧e tu bude spousta zm∞n (nap°. booleovskΘ v²razy/pole - C mß pevnou dolnφ hranici pole; index nula). ÄadnΘ odklady u₧ nejsou p°φpustnΘ a bylo by dobrΘ mφt vÜechno hotovΘ do dvou t²dn∙, co₧ je s m²mi souΦasn²mi podklady zvlßdnutelnΘ. Bohu₧el se mi nepoda°ilo dostat algoritmus do dost velk²ch "otßΦek", aby propoΦφtal Φty°i p∙ltahy pod jednu sekundu, ale do vysn∞n²ch Φty° se dostal v pro m∞ sluÜnΘm Φase, a to mi staΦφ. Druhß v∞c je, co na to °eknou nßvÜt∞vnφci BVV p°i p°φpadnΘm postupu do semifinßle.
5.8.2002 - prvnφ spoluprßce
Kupodivu se mi poda°ilo ud∞lat hodn∞ prßce v relativn∞ krßtkΘm Φase. Mo₧nß to jen tak vypadß, proto₧e Ülo p°edevÜφm o grafickou Φßst, na nφ₧ m∞l z valnΘ Φßsti podφl Kuba. Taky jsem se n∞jak dostal do programovßnφ v C a vlastn∞ celΘm Baltazarovi, nebo¥ to byla dost dlouhß doba, co jsem v n∞m naposledy d∞lal. Mßme u₧ skoro hotovΘ ·vodnφ intro s titulky a celou Üachovnici s mno₧stvφm sad kamen∙. Nadeklaroval jsem n∞jakΘ zßkladnφ prom∞nnΘ, ale co se t²Φe vlastnφho algoritmu tak nic moc. V PascalovskΘm k≤du je t°eba jeÜt∞ ud∞lat d∙le₧itou rychlostnφ ·pravu, a sice zavΘst tabulku s pozicemi krßl∙, co₧ znaΦn∞ urychlφ nejpou₧φvan∞jÜφ funkci, kterß zjiÜ¥uje Üach. Mo₧nß to bude mφt skuteΦn∞ dopad na rychlost a do Φty° p∙ltah∙ se program dostane v jeÜt∞ p°ijateln∞jÜφm Φase, ne₧ kdykoliv p°edtφm.
7.8.2002 - moc se to vleΦe
Zdß se, ₧e p°epis do Baltazara mi ned∞lß v∞tÜφ problΘmy (na problΘm Φasto narazφm, ale poslΘze najdu °eÜenφ n∞kde v knihßch Φi nßpov∞d∞). P°epis do C je v podstat∞ podobn² p°eklßdßnφ z jednoho jazyka do jinΘho. S Kubou jsme ud∞lali pokroky v grafice a jß jsem p°epsal zavedl vÜechny pot°ebnΘ prom∞nnΘ. Stojφm te∩ p°ed p°ekß₧kou, na kterou se asi musφm trochu p°ipravit. Je toti₧ pot°eba zaΦφt s interaktivnφ Φßstφ programu. Zatφm mßm hotovΘ jen to, ₧e program zjistφ, zda je na tahu Φlov∞k nebo poΦφtaΦ (zatφm jsem nastavil bφlΘho i ΦernΘho na Φlov∞ka) a pak bu∩ vypoΦte a provede tah, nebo dß slovo u₧ivateli. ProblΘm je v tom, ₧e pokud provedu n∞jak² tah, musφ se zavolat funkce, kterß ov∞°φ sprßvnost tahu a teprve potom je mo₧nΘ tah provΘst. Tato ov∞°ovacφ funkce je jednφm z pilφ°∙ p∙vodnφho programu a pot°ebuje ke svΘmu fungovßnφ jeÜt∞ jednu, o n∞co jednoduÜÜφ funkci, kterß zjiÜ¥uje Üach. Hra dvou lidsk²ch hrßΦ∙ tedy vy₧aduje p°epis dvou dost velk²ch funkcφ, u nich₧ si v mnoha Φßstech jejich t∞l asi nebudu p°i p°episu moc jist², ale p°epsat je musφm. TakΘ m∙₧u zkusit nejprve prostΘ pohybovßnφ figurkami, co₧ by vlastn∞ bylo takΘ mo₧nΘ, ale pak nevφm, jak rozsßhlΘ ·pravy bude pot°eba ud∞lat. Hm, ale ka₧dopßdn∞ se vyplatφ zaΦφnat p∞kn∞ od zßklad∙, proto₧e p°φpadnΘ chyby (a t∞ch je i u p°episu jak mßku) by se pak h∙°e hledaly (pokud vφm, tak Baltazar nemß funkci pro trasovßnφ programu. DalÜφ postup je tedy prozatφm jasn².
10.8.2002 - konec p°episu
Teprve dnes se dß °φci, ₧e vÜechny funkce programu v Pascalu ·sp∞Ün∞ p°elo₧il do C (Baltazara) a ₧e jsou alespo≥ ΦßsteΦn∞ funkΦnφ. Jejich spolehlivost odhalφ a₧ hlubÜφ testovßnφ programu m²m bratrem, ale ka₧dopßdn∞ mi spadl kßmen ze srdce, nebo¥ jsem se vzhledem k mojφ nezkuÜenosti s jazykem C (pozapomenutΘ zßklady z DDM) obßval, ₧e to nedokß₧u. Ukßzalo se vÜak, ₧e vÜe dopadlo dob°e. Do konce prßzdnin u₧ zb²vß n∞co p°es t°i t²dny, tak₧e je nejvyÜÜφ Φas p°idat, abychom m∞li s bratrem vÜe hotovΘ. Mohli bychom pak poslat finßlnφ verzi programu (Partie 1.00 beta) e-mailem rovnou do SGP, kterΘ sφdlφ prßv∞ tady, v UherskΘm HradiÜti. Musφme se vÜak vyvarovat jakΘhokoliv p°φmΘho kontaktu s touto spoleΦnostφ, nebo¥ ta z myslφm jasn²ch d∙vod∙ ponechala jak zφskßvßnφ tak i posφlßnφ jak²chkoliv informacφ ohledn∞ sout∞₧e na internetu. Co se t²Φe grafiky, mßme u₧ dßvno hotovΘ vÜechny sady figur pro 2D + pozadφ Üachovnice. DalÜφ elementy, jako pozadφ Fisherov²ch hodin nebo digitßlnφ Φφslice na pseudo-displeji jsme dokonΦili nedßvno. Spoustu prßce mßm te∩ jß, jako programßtor. VÜe mßm sice hezky p°epsßno a spoustu komponent programu jsem oÜet°il (dokonce jsem naÜel hrubou chybu, kterß byla ve starÜφm programu - pro u₧ivatele bylo mo₧nΘ p°eskakovat vlastnφ figury), ale program psan² Φist∞ v "CΘΦku" nenφ pro porotu sout∞₧e Baltφk+Baltazar 2002 to pravΘ o°echovΘ. Cht∞jφ ΦistΘ a hezky formßtovanΘ strukturogramy (elegantnφ stromov² zp∙sob reprezentace algoritmu). To jim budu moci poskytnout, ale bude to rvaΦka s Φasem a trp∞livostφ (zatφm mß toti₧ ka₧dß funkce programu jen jeden p°φkaz, kter² reprezentuje vlastn∞ celΘ t∞lo funkce). P°edtφm ale musφm rozd∞lit funkci pro test tahu (zjiÜt∞nφ jeho "zp∙sobilosti" v∙Φi pravidl∙m Üachu), nebo¥ d∞lß zbyteΦnΘ kontroly proh°eÜk∙, kterΘ poΦφtaΦ stejn∞ ned∞lß, ale u₧ivatel m∙₧e ("blbuvzdornost" programu je takΘ souΦßst hodnocenφ, ale °φkß se jφ stabilita programu). Jakmile toto dokonΦφm, po n∞kolika testech tyto funkce zapojφm do programu. Teprve a₧ bude vÜe fungovat, jak chci, zaΦnu d∞lat druh² p°epis. Nakonec jeÜt∞ musφm vytvo°it 3D Üachovnici, kterou si znaΦn∞ zvyÜuji Üance na sout∞₧i (slo₧it∞jÜφ projekt, lepÜφ grafika). No, a ve chvφlφch mΘho odpoΦinku bude pracovat m∙j bratr v roli grafika a dotvß°et vzez°enφ celΘho programu (ikona, tlaΦφtka, pozadφ...).
17.8.2002 - kruh se bude uzavφrat
Vzhledem k tomu, ₧e zφtra se vracφm do Brna, svou prßci si ulo₧φm na diskety a budu v nφ pokraΦovat doma. ╚ekal jsem, ₧e za ty dva t²dny toho stihnu o moc vφc, ale zdß se, ₧e jsem se p°ecenil. P°esto je cel² engine p°epsßn a kostra programu zpracovßna, tak₧e neΦekßm n∞jakΘ dalÜφ komplikace. Projekt jsem porovnßval s jin²mi programy, kterΘ byly v sout∞₧i B+B prezentovßny. Pro klid svΘho puntφΦkß°skΘho ducha jsem cht∞l, aby m∙j program vynikal mezi ostatnφmi, aby m∞l v∙bec Üanci prodrat se mezi deset prvnφch. Podle lo≥skΘho a p°edlo≥skΘho roΦnφku sout∞₧e by to nemusel b²t takov² problΘm. P°edloni byl toti₧ prezentovßn Üachov² program, kter² se dostal do semifinßle a m∙j a bratr∙v projekt ho podstatn∞ p°evyÜuje. Srovnßval jsem vÜak s t∞mi nejlepÜφmi (finalistΘ), tedy programem pro editaci HTML dokument∙ a simulßtorem jφzdy autem (3D). Pokud se mi poda°φ do dalÜφch dvou t²dn∙ (do jednoho, ten druh² je te∩ rezervnφ) dokonΦit projekt podle plßn∙, bude se moci m∞°it i s t∞mito programy. To by znamenalo jist∞ ·sp∞ch (program na CD tv∙rce Baltazara), mo₧nß semifinßle a snad i finßle (ale to je samoz°ejm∞ relativnφ a je naprosto zcestnΘ se zase p°ece≥ovat, p°esto₧e by si m∞l ka₧d² ·sp∞Ün² autor v∞°it). V souΦasnosti ₧ßdnΘ problΘmy s programem nejsou, vÜe jde hladce. Bohu₧el tu je p°eci jen zßdrhel, se kter²m jsem ani tak nepoΦφtal. Vzhledem k tomu, ₧e ze strukturogramu (zßpis k≤du v Baltazarovi) je vygenerovßn k≤d v C a ten pak zkompilovßn do tzv. p-k≤du, je program celkov∞ podstatn∞ pomalejÜφ, ne₧ kdyby byl kompilovßn do nativnφho (p°irozenΘho) k≤du (binßrnφ Intel x86). V odpov∞di na m∙j mail do SGP krom∞ tΘto informace o zp∙sobu kompilovanφ stßlo, ₧e rychlost je bohu₧el nejv∞tÜφ slabinou Baltazara, kterß by vÜak m∞la b²t v p°φÜtφm roce pryΦ spolu s novou verzφ tohoto v²vojovΘho nßstroje (zatφm je °eΦ o verzi 5.0 profi). Pr² je tento nedostatek z hlediska sout∞₧φcφho °eÜiteln² jen kompilßtorem, kter² je vÜak vytvo°en v Baltazarovi (tady nenφ problΘm, proto₧e kompilßtor by sice nebyl sßm o sob∞ rychl², ale generoval byl rychl² program). Tento kompilßtor by vytvo°il EXE, je₧ by se spouÜt∞lo z Baltazara, tak₧e program by b∞₧el extern∞. Nemusφ jφt o cel² program, jen jeho kritickou Φßst. TΘto metody pr² bylo vyu₧ito v jednom p°edlo≥skΘm projektu (jednoduch² kompilßtor kompiloval z assembleru). Pro m∞ to znamenß, ₧e prost∞ vyhledßvacφ algoritmus nepob∞₧φ dost rychle na to, aby se program dostal do t°φ p∙ltah∙ (!), co₧ je poni₧ujφcφ vzhledem ke star²m PC-AT 386, kde se zvlßdalo i p∞t p∙ltah∙. Ani nejnov∞jÜφ verze sout∞₧nφho ÜachovΘho programu z p°edlo≥ska nedokßzala vyhledßvat tahy. Vlastn∞ jsem si p°i p°episu vyhledßvacφho algoritmu myslel, ₧e mßm v rukßvu dv∞ esa: 3D Üachovnici a hru poΦφtaΦe. Te∩ se budu muset op°φt o 3D modul, se kter²m jsem vlastn∞ ani po°ßdn∞ nezaΦal. Je vÜak jenom m∙j problΘm, ₧e jsem se pouÜt∞l do ÜachovΘho programu a neumφm sestavit kompilßtor, a vlastn∞ ani neumφm assembler (je vid∞t, ₧e sout∞₧ bude pro m∙j program s bratrovou grafikou tvrd² o°φÜek). ObΦas mßm pocit, ₧e jsem si dal vlajku trochu moc vysoko. P°esto si myslφm, ₧e kruh se uzavφrß. Je jen pot°eba dokonΦit jednotlivΘ funkce programu od vracenφ tah∙ p°es uklßdßnφ partiφ do PGN, sestavovßnφ pozic a₧ po tisk partie a zmφn∞n² 3D modul. 3D Üachovnice vlastn∞ bude jedinß komplikovanß zßle₧itost, kterß m∞ Φekß. VÜechno ostatnφ je docela trivißlnφ, akorßt je toho dost na to, abych si za ten nßsledujφcφ t²den "mßknul". Pokud se mi program poda°φ brzy odevzdat, budu mφt alespo≥ Φas na po°ßdnΘ testovßnφ a opravenφ p°φpadn²ch chyb do konce korespondenΦnφho kola (6.9.2002 - p∙lnoc).
18.8.2002 - malΘ ·pravy a pßr nßvrh∙
Rozhodl jsem se, ₧e zφtra se u₧ koneΦn∞ poposunu trochu dßl a do konce t²dne snad projekt dokonΦφm. Bude to chtφt hodn∞ prßce, a taky nßvrh∙, na kterΘ se jeÜt∞ dnes vrhnu. jedinΘ, co jsem dnes po p°φjezdu do Brna ud∞lal, byla Φßst nastavenφ, ale jeÜt∞ to chce dokonΦit, co₧ by nem∞l b²t zas a₧ tak velk² problΘm. Zφtra se ukß₧e.
21.8.2002 - pomal² postup
Prvnφ t²den dokonΦovßnφ pomalu konΦφ, je vid∞t, ₧e se to trochu pohybuje, ale bohu₧el konec prßce p°ed sebou jeÜt∞ nevidφm. V∞°te mi, n∞co takovΘho se poznß. Od pond∞lφ jsem ud∞lal spoustu nov²ch prvk∙, kompletnφ nastavenφ (i naΦφtßnφ a uklßdßnφ nastavenφ), n∞jakΘ hlßÜky a vychytßvky, p°esto jeÜt∞ zb²vß spousta dalÜφch ·prav. Nejv∞tÜφm problΘmem je stßle 3D Üachovnice, do kterΘ se pustφm hned po dokonΦenφ hry poΦφtaΦe (aplikace vyhledßvacφho algoritmu).
22.8.2002 - zl² sen
Z poslednφho t²dne toho moc nezb²vß (je Φtvrtek) a jß, p°esto₧e jsem v∞tÜinu dne strßvil pracφ na programu, nemßm ₧ßdnΘ valnΘ v²sledky. Jedinou dobrou zprßvou je, ₧e se hned p°i dalÜφ etap∞ (zφtra) mohu pustit do zavedenφ hry poΦφtaΦe. èpatnß zprßva je, ₧e Baltazar mß na mΘm poΦφtaΦi omezenφ pam∞ti pro kompilaci, tak₧e mßm stßle strach, ₧e najednou se mi p°i spuÜt∞nφ programu objevφ p°ed oΦima hlßÜka, ₧e program je p°φliÜ velk². Nevφm, jestli si mßm d∞lat starosti, proto₧e cizφ sout∞₧nφ program, kter² se kv∙li svΘ velikosti nezkompiloval m∞l asi 200KB a m∙j n∞co p°es 100, p°esto (p∞kn² r²m :) mßm obavy. Cizφ program se ale n∞jak zkompilovat musel, tak₧e by bylo nejlepÜφ v p°φpad∞ problΘm∙ odejmout nepot°ebnΘ funkce, program dod∞lat, p°enΘst na jin² poΦφtaΦ, funkce obnovit a zkompilovat. U₧ te∩ je sice projekt m∞ a mΘho bratra zp∙sobil² sout∞₧e, ale p°esto mi ta hra poΦφtaΦe a 3D Üachovnice nedajφ spßt. Mo₧nß budu pot°ebovat i ten rezervnφ t²den, ale nedej bo₧e to. M∞l bych pak sice jeÜt∞ Φas do ÜestΘho zß°φ (konec korespondenΦnφho kola) na poslßnφ p°φpadn²ch oprav, ale to u₧ bude Ükola, kde chci mφt od poΦφtaΦe klid. Po t∞ch t²dnech prßce hlavou u₧ toho mßm tak akorßt. Myslφm si, ₧e vlastnφ sout∞₧ u₧ je jen prochßzka r∙₧ov²m sadem, nejv∞tÜφ sout∞₧ se odehrßvß tady u m∞ doma, kdy₧ sestavuji program. Jakmile je vÜechno hotovΘ, Φlov∞k u₧ jen sv∙j program p°edvßdφ, p°ipravφ si n∞jakou tu °eΦ - poklona - odm∞na - a je to. Jedinß mo₧nost, jak vÜe do konce t²dne stihnout, je opravdu mßknout na h°e poΦφtaΦe a pak hned na 3D Üachovnici. Nejd∙le₧it∞jÜφ je mφt kostru programu obalenou trochu masem a zbytek u₧ je jen piplßnφ, kterΘ se dß d∞lat i p°i televizi.
23.8.2002 - pßteΦnφ rozΦarovßnφ
Dnes mßm opravdu dobrou nßladu. Od pravΘho poledne jsem d∞lal na projektu a o p∙lnoci se mi to vyplßcφ. Mßm v podstat∞ hotovou hru poΦφtaΦe, p°esto₧e je t°eba dod∞lat v∞ci jako vracenφ tah∙, nabφdka remφzy a ΦasovΘ omezenφ, ale jinak jsem rßd, ₧e u₧ poΦφtaΦ hraje a detekuje konec hry (mat/pat). èkoda jen, ₧e jsem musel vypustit problematickΘ en-passant, co₧ m∞ taky trochu Ütve. Bu∩ to ve zbylΘm Φase jeÜt∞ dod∞lßm (po dokonΦenφ a odeslßnφ projektu), neb tenhle nedostatek zapφÜu do manußlu. Proto₧e tento vφkend nemßm a₧ tak moc voln² (snad zφtra odpoledne a v ned∞li v∙bec), zase se pokusφm rozvrhnout si n∞jak dalÜφ postup (nap°. 3D Üachovnice). A₧ te∩ jsem si uv∞domil, ₧e je program dost rozsßhl², aby se ten pomysln² kruh zaΦal uzavφrat. Dokud prost∞ poΦφtaΦ nezaΦal hrßt, nev∞°il jsem, ₧e to program n∞kam dotßhne (p°esto₧e cizφ sout∞₧nφ Üachov² projekt hru poΦφtaΦe nem∞l, dostal se do semifinßle). Na semifinßle si v∞°φm. Nakonec m∞ napadlo ud∞lat program dvojjazyΦn² (nechci p°eklßdat celou nßpov∞du, jen menu, poznßmky atp.), na kompenzaci hernφ sφly poΦφtaΦe. TakΘ budu muset rozΦlenit jednu funkci, kterß se hrozn∞ rozv∞tvila a jejφ strukturogram zabφrß pro Baltazara neulo₧itelnΘ mno₧stvφ dat. Co se t²Φe kompilace, asi to bude nat∞sno. Nebudu vyjmenovßvat, kolik mi toho jeÜt∞ zb²vß dod∞lat, ale to u₧ jsou jen takovΘ ty "hodinovky", kde se tolik nep°em²Ülφ. Po vφkendu Φekßm bratra Jakuba, kter² se mnou oslavφ dokonΦenφ projektu (pokud n∞jakΘ bude) a snad mi i pom∙₧e s n∞jakou grafikou (nebo t°eba zvukem?!). S nφm zajdeme k naÜemu nevlastnφmu otci, s jeho₧ laskav²m svolenφm po°φdφme naÜe digitßlnφ foto do intra hry.
26.8.2002 - skluz
M∙j bo₧e! Jsem v t²dnu, kter² jsem si vyhradil jako rezervu, kdybych n∞co nestφhal a p°itom jeÜt∞ nemßm d∙le₧itΘ Φßsti programu. Je to hroznΘ, proto₧e si myslφm, ₧e projekt nestihnu do konce srpna dokonΦit. Je to hrozn² pocit, ale kdybych m∞l vφce Φasu... Zφtra mßm trochu Φasu b∞hem dne, pak odpoledne ve st°edu a p∙lku zb²vajφcφ Φßsti t²dne. Jestli mßm stihnout dod∞lat partiß°, PGN, naΦφtßnφ/uklßdßnφ/tisk partie, skßkßnφ na tahy, radu od poΦφtaΦe, nabφdku remφzy, invertnφ Üachovnici, 3D Üachovnici, nßpov∞du, "about" a intro (to pouze dokonΦit, titulky jsou u₧ hotovΘ), musφm se do prßce po°ßdn∞ op°φt. Bratr mi dnes pomohl upravit figurky tak, aby vypadaly na vÜech polφΦkßch Üachovnice v²razn∞, ale jinak je 95% zbylΘ prßce na m∞. V∞tÜina funkcφ programu u₧ je legrace, ale ta zatracenß 3D Üachovnice, a te∩ i partiß° (problΘmy se zkrßcenou notacφ - vy₧aduje nßvrh) cht∞jφ den prßce. Proto₧e chci mφt ·sp∞ch, nesmφm dopustit, aby byl projekt nekompletnφ vzhledem k tomu, co jsem si naplßnoval p°ed prßzdninami. Tehdy to byl Üφlen², zdßnliv∞ neprovediteln² plßn, ale nakonec se ukßzalo, ₧e to nenφ zas a₧ tak pravda. SkuteΦn²m d∙kazem toho pro m∞ ale m∙₧e b²t jenom dokonΦenφ projektu v termφnu. Pokud ho toti₧ odevzdßm pozd∞ji, tedy a₧ v zß°φ, kdy je absolutn∞ poslednφ mo₧nost, nebude ₧ßdn² Φas na opravy.
31.8.2002 - nabral jsem druh² dech?
Samoz°ejm∞ by v tuhle dobu u₧ ka₧d², kdo se chce sout∞₧e z·Φastnit, m∞l u₧ mφt sv∙j program hotov², nebo d∞lat poslednφ ·pravy. Jß program sice jeÜt∞ hotov² nemßm (!!!), ale u₧ to bude co nevid∞t za mnou. M∞l jsem obrovskΘ starosti s 3D Üachovnicφ, kterou jsem vΦera p°eprogramoval do Baltazara, a kterß byla jen zpola funkΦnφ. Posouvala se toti₧ o obrovskΘ kusy (tak t°i Φtvrt∞ obrazovky) a p°i rotaci se body, je₧ m∞ly b²t v jednΘ linii skupily do k°ivek.Celß Üachovnice se p°i tom deformovala a po chvφli manipulace vypadala jako zmaΦkan² papφr. To je sice hezkΘ (10KB progrßmek s 3D zmuchlan²m kusem papφru, na kterΘm je z obou stran nakreslenß Üachovnice), ale jß pot°ebuji p°esnost. Uv∞domil jsem si, ₧e budu pot°ebovat zm∞nit sv∙j vzorec pro perspektivu:
x3d = x + sin( z * Pφ / 3600 ) * ( 320 - x ) ) )
Netrvalo to dlouho a m∞l jsem v²bornou nßhradu.
x3d = 320 - f * ( 320 - x ) / z ) ),
kde f je "jemnost" a z hloubka (t°etφ osa). No, nebudu tu jednoduchou v∞c d∞lat slo₧it∞jÜφ, prost∞ jsem to vyzkouÜel a fungovalo to. Te∩ do toho jeÜt∞ vlo₧it figurky. Druh² a asi nejhorÜφ problΘm, s jak²m jsem se setkal byl nedostatek pam∞ti. Tedy ne, ₧e bych m∞l v poΦφtaΦi mßlo pam∞ti na program, ale kompilßtor Baltazara verze 5 prost∞ nezchroustß nic, co je v∞tÜφ ne₧ 64KB. Nev∞d∞l jsem, jak se z tΘ Ülamastyky dostat, tak₧e jsem zase napsal do SGP. Ti mi dali najevo, ₧e bych m∞l k≤d zkusit razantn∞ zkrßtit (nap°. opakujφcφ se struktury -- jen₧e oni nemajφ o mΘm programu p°edstavu), nebo nic. Ale taky p°ece m∙₧u pou₧φt externφ soubory! Podle pravidel se mohou pou₧φt externφ soubory (exe), kterΘ vÜak musφ b²t napsßny v Baltazarovi a je nutnΘ do sout∞₧e dodat i jejich zdrojovΘ k≤dy. To nenφ problΘm. Prost∞ ud∞lßm pro kritickou funkci zvlßÜtnφ program, kter² se bude spouÜt∞t z hlavnφho programu a parametry se budou p°edßvat p°es soubor (p°es pam∞¥ to neumφm, alespo≥ jsem to nikdy ned∞lal). Mo₧nß bude staΦit "externalizovat" vyhledßvaΦ tah∙ (cca 13KB) a 3D Üachovnici, ale to se uvidφ.
2.9.2002 - velkß Φasovß tφse≥
Je sice hezkΘ, ₧e jsem dnes dokonΦil trojrozm∞rnou Üachovnici, ale jakmile se jeden problΘm vy°eÜφ, nastupuje dalÜφ. Tentokrßt je to p°evod vyhledßvacφ funkce do externφho programu. VÜechny funkce a prom∞nnΘ, kterΘ bude vyhledßvaΦ pot°ebovat mu poskytnu, ale p°edevÜφm si musφm zmapovat p°esn∞ kterΘ prom∞nnΘ a funkce jsou pot°eba, aby v hlavnφm k≤du nebyly n∞jakΘ zbyteΦnosti. Taky musφm znßt vÜechny spoleΦnΘ prom∞nnΘ, proto₧e ty budou p°edßvßny souborem. Mßm vÜak te∩ ze vÜeho hrozn² pocit. Jsem spokojen², kdy₧ je program Φist∞ napsan² a kdy₧ je stabilnφ. Kdy₧ chci nap°φklad spustit zobrazenφ 3D Üachovnice, vÜe funguje r∙zn∞ dlouhou dobu. Po chvφli mi Windows oznßmφ neplatnou operaci a jß nem∙₧u nic. N∞kdy je to d∞lenφ nulou, jindy zase operace v pam∞ti, kde program nemß co d∞lat. M∙₧ou to b²t chyby v programu, kde se d∞lφ nulou a p°istupuje za hranice polφ, ale proΦ se potom tyhle chyby objevφ v₧dy ve chvφli, kdy 3D Üachovnici spouÜtφm extern∞? U₧ nevφm co mßm d∞lat, aby byl program trochu stabilnφ. To by toti₧ mohlo vÜechno b∞₧et perfektn∞, ale na sout∞₧i na jinΘm poΦφtaΦi v jinΘm systΘmu by program hned zkraje spadl. To p°ece ne! No, mo₧nß je to opravdu t∞mi zableÜen²mi 64KB, tak₧e musφm hodn∞ p°idat a DNES, p°esto₧e zφtra jdu do Ükoly a brzy vstßvßm, jeÜt∞ dnes dokonΦφm "externalizaci" vyhledßvaΦe st∙j co st∙j. Prost∞ musφm. Anebo NE! Ud∞lßm to tak, ₧e si cel² program vytisknu a vÜechno ud∞lßm na papφ°e, jako jsem to d∞lal v Tunisu. Zφtra to pak rychle, ale hodn∞ rychle p°eÜupu (to bude ·ter²) a dod∞lßm jak vyhledßvaΦ, tak 3D Üachovnici, tak koneΦn∞ zbylΘ pot°ebnΘ funkce. Zb²vß nßpov∞da. Tu budu b∞hem veΦera (noci) v klidu psßt a ·ter² je pryΦ. St°edu v∞nuji test∙m, test∙m a zase test∙m, optimalizaci, ·prav∞ k≤du, komentovßnφ k≤du, odstranφm zbylΘ soubory a ve Φtvrtek vÜe poÜlu hezky do SGP. To vÜak jeÜt∞ nenφ v∙bec konec! ╚tvrtek budu zase v∞novat testovßnφ a jestli najdu n∞jakΘ chyby, okam₧it∞ k≤d znovu posφlßm jako opravu, proto₧e v pßtek je poslednφ Üance na odeslßnφ.. pak u₧ jen Φekat. Zdß se to snadnΘ, ale budou to hroznΘ dny, proto₧e do toho p°ijdou jeÜt∞ novΘ Ükolnφ povinnosti. Po dokonΦenφ tohoto projektu si koneΦn∞ po m∞sφcφch namßhßnφ svΘho mozku odpoΦinu. Zdß se, ₧e pracovat ob den na poΦφtaΦi je legrace, ale jß myslφm na sout∞₧ snad ka₧d²ch dvacet sekund (to je skoro stejn∞ Φasto, jako na sex u v∞tÜiny lidφ). Taky mßm v plßnu v∞novat se trochu jin²m v∞cem, ne₧ poΦφtaΦi. Od bratra jsem slyÜel, ₧e jeden nejmenovan² sout∞₧φcφ, kter² chodφ na stejnou Ükolu jako on, na sout∞₧i B+B n∞kolikrßt byl a jednou dokonce vyhrßl prvnφ cenu (notebook). Je to pr² Φlov∞k, kter² je schopen prosed∞t u poΦφtaΦe cel² den a ₧e pokud na n∞Φem makß, tak na tom opravdu makß bez p°estßvky. Bojovat proti takovΘ odhodlanosti musφ b²t opravdu t∞₧kΘ, zvlßÜt∞ kdy₧ proti vßm stojφ n∞kolik set horliv²ch nadÜenc∙ od 9 do 99 let..
6.9.2002 - zßkladnφ verze dokonΦena a odeslßna
Nakonec se mi poda°ilo moji prßci dokonΦit a odeslat do sout∞₧e, jen jsem musel program trochu osekat (nap°. jsem ubral socißlnφ funkce a prßci s partiß°em). Taky jsem v programu nechal chyby, kterΘ pro m∞ nejsou ₧ivotn∞ d∙le₧itΘ, ale do dalÜφho termφnu (kter² jsem dote∩ p°ehlφ₧el: 13.9.) - do uzßv∞rky odevzdßnφ jak²chkoliv oprav nebo dopl≥k∙ k programu poÜlu do SGP sv∙j projekt s opraven²mi chybami a snad p°idßm i zmφn∞nΘ funkce. Momentßln∞ probφhß na BVV Strojnφ veletrh (do 20.9.) a po n∞m nßsleduje tou₧ebn∞ oΦekßvan² INVEX. Domnφvßm se, ₧e po uzßv∞rce termφnu na ·pravy se teprve poÜlou pozvßnky na semifinßle, nebo zprßvy typu: "VßÜ program za nic nestojφ.". Tu druhou mo₧nost m∙₧u taky oΦekßvat, proto₧e krom∞ u₧ivatelskΘho rozhranφ, chaotickΘho enginu a spousty chyb vlastn∞ nemßm nic ·₧asnΘho. Projekt upravφm tak, aby vyhovoval mn∞ samotnΘmu a teprve potom z n∞ho budu mφt dobr² pocit.
7.9.2002 - jakΘ ·pravy budou v projektu?
Rozmyslel jsem si, jakΘ ·pravy v projektu jeÜt∞ ud∞lßm, ne₧ poÜlu dopl≥ujφcφ verzi. Nejprve odstranφm chybu p°i naΦφtßnφ ulo₧enΘ partie a taky umo₧nφm konßnφ roÜßdy a en-passantu (bohu₧el vÜak jen ze strany u₧ivatele). Pokud tyto chyby opravφm, staΦφ jen p°idat od≥atΘ funkce programu, hlavn∞ prßci s partiß°em a socißlnφ funkce (vzdßnφ se, nabφdka remis atp.). D∙le₧itΘ bude taky ud∞lat n∞co s vyhledßvacφm enginem, jeho₧ k≤d je cel² Φist∞ v C a pro p°ehlednost programu by se hodilo p°ed∞lat ho do strukturogramu. Mo₧nß jeÜt∞ trochu rozÜφ°φm nßpov∞du a jinak snad p°idßm nastavenφ barev na 3D Üachovnici.
8.9.2002 - u₧ ₧ßdnΘ chyby
Dnes se mi docela rychle poda°ilo opravit dv∞ chyby a to chybu p°i naΦφtßnφ hry a potom problΘm s roÜßdou. Zφtra se pokusφm p°idat funkce pro prßci s partiß°em a socißlnφ funkce. Pro zv²Üenφ p°ehlednosti k≤du bude nejlepÜφ p°evΘst vyhledßvacφ funkci na strukturogram co nejd°φve, tak₧e to zkusφm taky b∞hem zφt°ka. Bohu₧el u₧ ve Ükole zaΦφnß po°ßdn² nßpor a jß mßm Φas jenom do pßtku, tak₧e to musφ b²t efektivnφ prßce a pokud dokonΦφm naplßnovanΘ zßle₧itosti - u₧ se nebudu sna₧it o nic dalÜφho. Snad jen po°ßdnΘ testy...
9.9.2002 - poslednφ den programovßnφ?
Ano, u₧ je to tady. Kdy₧ jsem si dnes vyzvedßval elektronickou poÜtu, byly tam dva novΘ maily. Oba byly od Φlov∞ka, kter² mß na starosti kontrolu program∙. Tyto zprßvy byly v rozmezφ dvou dn∙ a v obou bylo upozorn∞nφ na jistΘ problΘmy. Nap°φklad byl problΘm s 3D Üachovnicφ, kterß spadla i v DOSu (jak je to mo₧nΘ?) a taky s prodlevou po kliknutφ myÜi. ProblΘm s myÜφ odstranφm (zv²Üφm prodlevu, kterß se dß stejn∞ u₧ivatelsky donastavit a Üachovnici se pokusφm integrovat do hlavnφho programu). Pr² se mßm zam∞°it na pohyb figur, resp. krßle, se kter²m nejde h²bat. To je pravda, tuto chybu jsem u₧ opravil vΦera spoleΦn∞ s roÜßdou a naΦφtßnφm hry. Co zb²vß? Opravdu se mi ulevφ, a₧ budu mφt k≤d vyhledßvaΦe ve strukturogramu, tak₧e se do toho asi pustφm hned. Pak se uvidφ.
Hotovo. Zprvu se v∞ci zdajφ b²t slo₧it∞jÜφ, ne₧ ve skuteΦnosti jsou (n∞kdy je to ale naopak), tak₧e se sßm divφm, jak se mi poda°ilo p°epsat vyhledßvaΦ, extrahovat z n∞j oce≥ovacφ funkci a tu zvlßÜ¥ taky p°epsat do strukturogramu (budu ji jeÜt∞ pot°ebovat).
11.9.2002 - hotovo!
Dnes jsem odevzdal finßlnφ verzi programu (V1.01), kterß u₧ je (doufßm) kompletnφ. Samoz°ejm∞ mß stßle drobnΘ chybiΦky, ale jejich opravami jsem se zab²val dosud a je to nekoneΦnß prßce. VÜechno co jsem v programu cht∞l mφt tam mßm, tak₧e se dß °φci, ₧e jsem se vÜφm spokojen².
Pod∞kovßnφ
Bratru Kubovi za nedocenitelnou grafiku, uÜet°il mi tak spoustu prßce
s nejist²m v²sledkem; za morßlnφ podporu a za zlatΘ u₧ivetlskΘ rady.
Bratru Ev₧enovi, ₧e m∞ nauΦil programovat do takovΘ mφry, ₧e jsem byl schopen
napsat vlastnφ Üachov² engine.
Firm∞ SGP za perfektnφ programovacφ systΘm.
RenΘmu, za digitßlnφ foto do hry.
Tßtovi a mßm∞ za trp∞livost.
Pou₧itß literatura
Pavel Drbal, SGP Baltazar 5.0 Programovßnφ pro d∞ti a rodiΦe
Pavel Drbal, Programovnφ s Baltazarem pro d∞ti i rodiΦe
SGP Systems, SGP Baltazar 3.15 P°φruΦka
Dieter Steinwender, Frederic A. Friedel, èachy na PC
Pavel Herout, UΦebnice jazyka C (1. a 2. dφl)
Karel Pliska, UΦebnice Üachu pro samouky (zaΦßteΦnφci)
Kontakt
Libor Tinka
KurÜova 6
Brno
635 00
Jakub Gr≤s
Sokolovskß 277
UherskΘ HradiÜt∞
686 01
LicenΦnφ ujednßnφ
Tuto verzi programu (1.01) je mo₧nΘ voln∞ Üφ°it
ne vÜak za ·Φelem zisku.
Firma SGP tedy m∙₧e tento program publikovat.
Program slou₧φ k u₧φvßnφ a demonstraΦnφm ·Φel∙m, jakΘkoliv pozm∞≥ovßnφ zdrojovΘho k≤du nebo pou₧φvßnφ
urΦit²ch blok∙ programu samostatn∞ je mo₧nΘ pouze po dohod∞ s programßtorem
hry.
Pozm∞≥ovßnφ grafiky hry prost°ednictvφm k tomu urΦen²mi nßstroji, nebo pou₧φvßnφ n∞kter²ch
grafick²ch Φßstφ programu je mo₧nΘ pouze po dohod∞ s grafikem hry.
Copyright 2002 by Libor Tinka & Jakub Gr≤s