home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 December
/
PCWorld_2002-12_cd.bin
/
Software
/
Komercni
/
Baltik
/
katB.exe
/
katB
/
PARTIE
/
PARTIE.SGP
< prev
next >
Wrap
Text File
|
2002-09-26
|
124KB
|
3,113 lines
SGPC 5.05 034#000001035 3.08.2002 16:19:34 StructNo47 47
# include <sgpbalt.h>
// globální prom╪nné
float pesec = 1.0, // hodnoty figur
jezdec = 3.25,
strelec = 3.5,
vez = 5.0,
dama = 9.0,
kral = 1000.0,
pole = 0.0000001, // hodnota volného políƒka τachovnice pro poziƒní ocen╪ní
check = 0.001, // hodnota τachu
placek = 0.00001; // hodnota pole pro centralizaci figur
typedef int RosadaType[4]; // stav roτád
typedef struct { // záznam tahu
double h; // hodnota tahu
int x1,y1,x2,y2; // odkud kam
int z,k,s,p, // sebraná figurka, útoƒící figurka, τach, typ p²em╪ny
dest; // urƒení poƒáteƒní destinace figurky ve zkrácené notaci
RosadaType ros; // zm╪ny roτád
} TahType;
typedef int Sachovnice[12][12]; // matrice pro τachovnici s okrajem
Sachovnice s,p; // základní a pomocná τachovnice (nap². pro náhled)
RosadaType rosada; // stav roτád
int n,ja, // hrრna tahu: 1,-1; "obracítko" toho, kdo hraje
b,c, // bíl∞,ƒern∞ - ƒlov╪k/poƒítaƒ
bz,cz, // záloºní hodnoty pro vyhledávaƒ
i,ii,iii,iv,m, // pomocné
x,y, //pomocné - i mínusové hodnoty kvàli okrajàm τachovnice
h, // aktuální hloubka propoƒítávání
z,o, // pomocné
zajate[2][16], // zajaté figurky
konec = 0, // ukonƒovací prom╪nná
x1,y1,x2,y2, // pomocné
tleve,tprave, // pro myτ
mod, // mód programu (Hra/Editor pozic)
k, // klávesa
ox,oy, // znaƒení p²i táhnutí
matpat, // indikace matu/patu
smaz, // po²adavek na smazání celé plochy
posun,misto, // ...pro pohyb v okn╪ otev²ení souboru
delka,pozice, // délka a pozice v partiá²i
ok, // indikace správnosti posledního tahu
bs,cs, // stav τachu pro bílého (bs) a ƒerného (cs)
xx,yy,xi,yi; // pomocné
char* tah; // tah hráƒe
int skoc; // skok protivníkova kamene
struct {
int abs; // hodnota posledního tahu není provizorní (je absolutní)
TahType nejlepsi,posledni; // informace o v∞znamn∞ch tazích
int x,y,z; // informace o posledním tahu
} v[11]; // varianta (sled optimálních tahà)
TahType nejtah; // záznam nejlepτího tahu
TahType partiar[1000]; // seznam vτech tahà (max. 1000)
long count; // poƒet koncov∞ch uzlà
float ctab[8][8]; // centralizaƒní tabulka
TypSoubor ct, // soubor s centralizaƒní tabulkou
cfg, // soubor s konfigurací
txt, // textov∞ soubor (PGN,POS,LNG)
kom; // komunikaƒní soubor (KOM)
Typ¼as cas_of,cas_f,cas_o,cas,cas_b,cas_c; // ƒasové prom╪nné
float f,fx,fy; // posun v osách p²i automatické animaci
char px,py,zn; // pomocné (nap². sou²adnice u τachovnice)
string str,obsah[512],adresar; // pomocné (nap². otevírání souborà)
TypPoloºkaAdresá²e pa;
TypAnimP²edm╪t kamen; // ..pro animaci kamene
long limit, // ƒasové omezení hráƒe v sekundách
l; // pomocné
struct {
int delka;
string nazev,nabidka[17];
} vyber[2][9]; // [0][n] - menu, [1][n] - konfigurace
int kon[41]; // nastavení programu, které je moºné uloºit
char ch; // pomocné
string pgn[12]; // PGN informace
TypDatum datum; // datum pro zadání ƒasu do informaƒní hlaviƒky
struct {
int R,G,B;
} paleta[15]; // paleta pro úvodní rozsv╪tlení obrazu
int R,G,B; // pomocné poloºky palety
/////////////////////
// Pomocné definice
//
#define NE 0
#define ANO 1
#define ABS(x) ((x)>0?(x):-(x))
#define __CYKLUS(N) __Cyklus(1,N);__Cyklus(0,N); //Hlava cyklu
#define __MPVC_ 100 //Maximální poƒet vno²en∞ch cyklà
int __Cyklus( int Nov∞, int Poƒet )
//Nov∞ > 0: Otev²ení nového cyklu s N opakováními (vƒetn╪ 0)
//Nov∞ = 0: Dalτí pràchod cyklem
//Nov∞ < 0: P²edƒasné ukonƒení cyklu
{ static int I[__MPVC_];
static int i = -1;
if( Nov∞ > 0 )
{ if( ++i >= __MPVC_)
{ TxtPiτⁿet╪zec("P²íliτ mnoho vno²en∞ch cyklà");
while(1) {Tón(1000);};
}else I[i]=Poƒet;
}else if( Nov∞ == 0 )
{ if(--I[i]<0){ i--; return(0);}
else return(1);
}else return(-(i--)); //Vrací zápornou aktuální hloubku vno²ení
} //Cyklus
void ¼ekejNaReakci(void)
//¼eká na sitsk klávesy nebo tlaƒítka myτi
{ VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
¼ekej(NaKlávesu|NaMyτ);
VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
} //¼ekejNaReakci
long ¥¼ti¼íslo ( char* Text )
{ long Vrátit = 0;
GrNastavPozici(272, 0);
Gr¼tiL¼íslo(Text,Vrátit,8,1,0xe);
GrNastavPozici(272, 0);
GrPiτⁿet╪zec( " " );
return Vrátit;
} //¥¼ti¼íslo
long BaltEmuluj( char* Text )
{ long Vrátit = 0;
int Klávesa;
int Konec = 0;
TypP²edm╪t P²edm╪t=1;
VyprázdniFrontuKláves();
GrNastavBarvy( 0x7 ); GrSmaºOkno();
GrPiτⁿet╪zec( Text );
Tón(1000); ¼ekej(10); VypniTón();
while (!Konec)
{ int p;
GrNastavPozici(0, GrV∞τkaZnaku);
GrPiτⁿet╪zec( "ⁿá: "); GrPiτL¼íslo( PoziceBaltazaraY(), 2 );
GrPiτⁿet╪zec( ", Sl: " ); GrPiτL¼íslo( PoziceBaltazaraX(), 2 );
GrPiτⁿet╪zec( ", Sm: " );
int s=Sm╪rBaltazara();
GrPiτⁿet╪zec( s==V∞chod ? "V∞chod" :
s==Jih ? "Jih " :
s==Západ ? "Západ " :
"Sever " );
GrPiτⁿet╪zec( ", Ba: " ); NastavBarvu¼arování( p=NastavBarvu¼arování(0));
GrPiτL¼íslo( p, 2 );
GrPiτⁿet╪zec( ", Ry: " ); RychlostBaltazara(p = RychlostBaltazara(0));
GrPiτL¼íslo( p, 2 );
switch ¼tiKlávesuZFrontyS¼ekáním()
{ case KlDoleva: VlevoVbok(); break;
case KlDoprava: VpravoVbok(); break;
case KlNahoru: Popojdi(1); break;
case KlDolà: ¼aruj(Baltedit()); break;
case KlIns: Vrátit = ¥¼ti¼íslo( "¼íslo: " ); break;
case 'B':
case 'b': NastavBarvu¼arování( ¥¼ti¼íslo("Barva: ") ); break;
case 'C':
case 'c': ¼aruj(¼tverec); break;
case 'R':
case 'r': RychlostBaltazara( ¥¼ti¼íslo("Rychlost: ") ); break;
case KlEnter: Konec = 1; break;
} //switch
} //while
GrNastavBarvy( 0x77 ); GrSmaºOkno();
return Vrátit;
} //BaltEmuluj
///////////////////
// Globální makra
//
-o1-Globals ----------------------------------------------------------------
0 ;prom╪nné
;globální prom╪nné (jsou definovány v globálních definicích Ctrl+G):
;prom╪nné celoƒíselné: gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,gKlávesa;
;dalτí p²eddefinované globální prom╪nné mají vºdy p²edponu g..
;a jejich názvy jsou shodné xaverov lokálními prom╪nn∞mi definovan∞mi níºe,
;nap². gD¼íslo1, gⁿet╪zec atd.
;lokální prom╪nné:
;prom╪nné celoƒíselné:
int a,b,c,d,e,f,g,h,i,j,Klávesa, //rozsah -32768..32767
I¼íslo1,I¼íslo2,I¼íslo3,PàvBarvy;
;prom╪nné reálné:
double D¼íslo1,D¼íslo2,D¼íslo3; //rozsah 5.0E-324..1.7E308
;prom╪nná znak:
char Znak;
;prom╪nná ²et╪zec:
string ⁿet╪zec;
[ ;vytvo² Baltazaràv grafick∞ prostor
Vytvo²Prostor(); MyτZaƒátekObsluhy();
] ;zruτ Baltazaràv grafick∞ prostor
MyτKonecObsluhy(); ZruτProstor();
a Klávesa= ¼tiKlávesuZFronty();
b GrNastavBarvuPop²edí /* Partie */
c ¼aruj(¼tverec);
d Gr¼tiZnak("?",Znak,1,0x07); /* edit ano, ƒerná/sv.τedá*/
╨ return BaltEmuluj("Hodnota?");
e BezObláƒku();
f VyprázdniFrontuKláves();
g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f); /*40zn, edit ano, modrá/bílá */
h Gr¼tiI¼íslo("?",I¼íslo1,6,0,0x0e); /* 6zn, edit ne, ƒerná/ºlutá */
i Gr¼tiD¼íslo("?",D¼íslo1,20,1,0x0f); /*20zn, edit ne, ƒerná/bílá */
j GrPiτZnak(Znak);
k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
ê BaltEmuluj("STOP");
m ;vypiτ ⁿet╪zec do grafického okénka
PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré */
GrPiτⁿet╪zec(ⁿet╪zec); /*vypíτe obsah prom╪nné ⁿet╪zec*/
GrNastavBarvy(PàvBarvy); /*nastaví pàvodní barvy */
n Neviditeln∞();
o SObláƒkem();
p GrNastavPozici /* Partie */
q GrPiτL¼íslo(I¼íslo1,-1); /* -1 = nejkratτí v∞pis */
r VpravoVbok();
t P²epniNaText();
u GrPiτD¼íslo(D¼íslo1,10,2); /*10 ƒíslic, z toho 2 desetinné*/
v Viditeln∞();
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
x Skryj();
y Odhal();
z ;ƒelem vzad
VlevoVbok(); VlevoVbok();
C ¼aruj /* C:(p²edm╪t)! 1-150 */
╤ return BaltEmuluj /* ╤:("Volno")! "Test" */
K GrKresliP²edm╪ty /* Partie */
L NaƒtiScénu /* L:("soubor")! "c:\\pavel\\soubor.s00" */
¥ BaltEmuluj /* ¥:("Text")! "Test" */
N Náhodn╪¼aruj /* N:(p²edm╪t)! 1-150 */
P Popojdi /* P:(poƒet_polí)! 0-14 */
R RychlostBaltazara /* R:(rychlost)! 0-9 */
S UloºScénu /* S:("soubor")! "c:\\pavel\\soubor.s00" */
W ¼ekej /* W:(milisekund)! 0-32000 */
X ¼arujNaPozici /* X:(p²edm╪t,x,y)! 1-150, 1-15, 1-10 */
-c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
?n PràchodnostP²edm╪tuP²edB() Je 0
?p PràchodnostP²edm╪tuP²edB() Je 1
?B Barva¼tverceP²edB() /* Je, Není, <, >, <= ,>= */
?P P²edm╪tP²edB() /* Je, Není, <, >, <= ,>= */
?S Sm╪rBaltazara() /* Je, Není, <, >, <= ,>= */
\b Barva¼tverceP²edB()??
\p P²edm╪tP²edB()??
\x Sm╪rBaltazara()??
\C case
#C ; n-krát #C:(5) 5₧
__CYKLUS
#A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok #A:(i,2,10,2) i=2,4..10
OdDoKrok
#D ;opakuj sestupn╪ pro prom╪nnou od,do,krok #D:(i,10,2,2) i=10,8..2
OdDolàDoKrok
#M ;opakuj n-krát sestupn╪ pro prom╪nnou #M:(i,8) (8x) i=7,6..0
DolàDo0
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
===Globals ------------------------------------------------------------------
/*-hf(*/
/*-hf-*/
void Konfig(int typ) // práce s konfiguraƒními soubory
/*-hf-*/;
void FishStop( void ) // zastaví stopky a p²iƒte ƒas táhnoucímu hráƒi
/*-hf-*/;
void FishP²iƒti(int komu) // p²iƒítá ƒas a vykresluje v∞poƒetní informace
/*-hf-*/;
void Fisher(int x) // vykreslí ruƒiƒky/displej Fisherov∞ch hodin
/*-hf-*/;
void Klik(int fish,int pockat) // real-time práce s myτí a klávesnicí
/*-hf-*/;
int Muj(int cislo, int diagonalne) // souƒást funkce µach
/*-hf-*/;
void µach( void ) // naplní prom╪nné bs a cs informací o stavu τachu
/*-hf-*/;
void TahV╪ºí(int x, int y) // tah v╪ºí, ztráta práva na jednu roτádu
/*-hf-*/;
void TahKrálem( void ) // tah králem, ztráta práva roτády
/*-hf-*/;
void Táhni( void ) // provede nejlepτí nalezen∞ tah
/*-hf-*/;
void Vra£Roτády( void ) // nabytí práva roτády p²i vrácení tahu
/*-hf-*/;
void Vra£Tah( void ) // vrátí poslední zadan∞ tah
/*-hf-*/;
void DoPartiá²e( void ) // zápis do partiá²e a promítnutí následkà vzetí
/*-hf-*/;
void Potáhni(int X1,int Y1,int X2,int Y2) // souƒást funkce ZkusTah
/*-hf-*/;
int TestTahu(int x1,int y1,int x2,int y2) // test tahu pro uºivatele
/*-hf-*/;
void Skok(int max) // zm╪na sm╪ru figury po napadení cizí
/*-hf-*/;
void Vyno²ení( void ) // sníºení hloubky prohledávání v herním stromu
/*-hf-*/;
void Zano²ení( void ) // zv∞τení hloubky prohledávaní v herním stromu
/*-hf-*/;
void Test(int x,int y,int z) // soućst funkce VyhledejTah
/*-hf-*/;
void Obnovµachovnici( void ) // p²enese informace o stavu τachovnice ze zálohy
/*-hf-*/;
void OceσPozici(int pocitat) // ohdnotí danou pozici ƒíslem
/*-hf-*/;
void VyhledejTah(int maxhloubka, int pocitat) // vypoƒítá pokraƒování
/*-hf-*/;
int SrovnejTah(int t1,int t2) // porovná dva tahy partiá²e na shodnost
/*-hf-*/;
void Okno(int x1,int y1,int x2,int y2, int transp) // plastické okno
/*-hf-*/;
void Piτ(int px,int py,int pozadi,string text) // text se stínem, pop². pozadím
/*-hf-*/;
int Nabídka(int px,int py,int a, int b) // p²eddefinovaná nabídka
/*-hf-*/;
void LCD(int x, int y, long cislo, int cif, int typ) // v∞stup údajà na displej
/*-hf-*/;
void Notes(string poznamka) // vypíτe poznámku k objektu pod kurzorem
/*-hf-*/;
string Txt(int index) // vypíτe hláτku ƒíslo 'index' aktuálním jazykem
/*-hf-*/;
void Popis( void ) // popis políƒka τachovnice (kámen+pozice)
/*-hf-*/;
void Tlaƒítko(int x,int y,string text,int stiskle) // vykreslí talƒítko
/*-hf-*/;
void Volba(int x, int y, int a,int b) // okénko s nastavením
/*-hf-*/;
void MenuProst²edí( void ) // okno nastavení prost²edí
/*-hf-*/;
void MenuHledání( void ) // podrobné nastavení vyhledávacího algoritmu
/*-hf-*/;
void MenuJiné( void ) // nastavení myτi, animací
/*-hf-*/;
int Hláτka(int typ, string text) // informaƒní/varovné/dotazovací okno
/*-hf-*/;
string Otev²ít(string ext) // otev²e soubor s p²iponou ext
/*-hf-*/;
void Uloºit(string ext) // uloºí zadan∞ soubor
/*-hf-*/;
void ¼istiµachovnici( void ) // vyprázdní τachovnici a nastaví její okraje
/*-hf-*/;
void Inicializace( void ) // deklarace prom╪nn∞ch
/*-hf-*/;
void NabídkaPartie( void ) // nabídka práce s partií, uonƒení programu
/*-hf-*/;
void NabídkaVolby( void ) // nabídka sociálních funkcí, editace, tahy
/*-hf-*/;
void NabídkaNastavení( void ) // nabídka nastavení uºivatelského rozhraní
/*-hf-*/;
void NaƒtiJazyk( void ) // naƒte jazykov∞ balíƒek (CZ+ENG) z LNG souboru
/*-hf-*/;
void NabídkaZobrazení( void ) // nabídka pro grafick∞ interface
/*-hf-*/;
void NabídkaInformace( void ) // nabídka vyvolá informaƒní okna
/*-hf-*/;
void RozvinovacíNabídky( void ) // veτkeré volby z horního panelu
/*-hf-*/;
void main( void ) // ░░▒▒▓▓██ PARTIE V1.01 (public domain) ██▓▓▒▒░░
/*-hf)*/;
;-h---------------------------------------------------------------------------
void Konfig(int typ) // práce s konfiguraƒními soubory
-s--Konfig ■ 16 -2 -8 3
___________Konfig__________
___otev²ení__ ƒtení/Zápis zav²ení
\a \b \c #1 3!
cfg~zápis │ def~ƒtení __zápis?__
a! │ c! /:typ==0 /
│ ano ne
cfg~ƒtení 1! 2!
b!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a cfg=SouborOtev²i("*\\partie.cfg",SouborP²ístupZápis|SouborP²ístupBinární);
b cfg=SouborOtev²i("*\\partie.cfg",SouborP²ístup¼tení|SouborP²ístupBinární);
c cfg=SouborOtev²i("*\\partie.def",SouborP²ístup¼tení|SouborP²ístupBinární);
1 ;naƒtení nastavení do buσky pole
SouborPiτL¼íslo(cfg,kon[i],4);
SouborPiτNov∞ⁿádek(cfg);
2 ;zápis buσky pole do konfiguraƒního souboru
Soubor¼tiI¼íslo(cfg,kon[i]);
Soubor¼tiNov∞ⁿádek(cfg);
3 SouborZav²i(cfg);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
\a typ ?? case 0:
\b case 1:
\c case 2:
#1 i=0; i<=40; i++
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void FishStop( void ) // zastaví stopky a p²iƒte ƒas táhnoucímu hráƒi
-s--FishStop ■ 4 -2 -15 3
__________FishStop______
1! _____komu~p²iƒíst?_____
/:n==1 /
bílému ƒernému
a! b!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;zjiτt╪ní nam╪²eného ƒasu a zastavení stopek
if (partiar[delka].s>1) StopkyNuluj();
Stopky(cas_f);StopkyStop();
a ;posun ƒasu bílého
¼asPosuσ(cas_b,cas_f.Hodiny,cas_f.Minuty,cas_f.Sekundy,cas_f.Setiny);
b ;posun ƒasu ƒerného
¼asPosuσ(cas_c,cas_f.Hodiny,cas_f.Minuty,cas_f.Sekundy,cas_f.Setiny);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void FishP²iƒti(int komu) // p²iƒítá ƒas a vykresluje v∞poƒetní informace
-s--FishP²iƒti ■ 24 -2 -6 3
___FishP²iƒti__
:Stopky(cas) p²iƒtení~ƒasu
/a
__:MyτSchovejKurzor()___
│ │ │
zpracování~na~hodiny │ konec
/:kon[21]==1 │ :MyτZobrazKurzor()
_______│______ │ :cas_o=cas
p²iƒtení vykreslení │
:cas_of=cas_o :Fisher(x1) │
:cas_f=cas │
komu~p²iƒíst? │
/:komu==1 / │
bílého~ƒas ƒerného~ƒas │
a! b! │
v∞stup~na~displej
/b
:LCD(318,435,count,8,kon[8])
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a ;bílého ƒas se p²iƒte
x1=119;
¼asPosuσ(cas_of,cas_b.Hodiny,cas_b.Minuty,cas_b.Sekundy,cas_b.Setiny);
¼asPosuσ(cas_f,cas_b.Hodiny,cas_b.Minuty,cas_b.Sekundy,cas_b.Setiny);
b ;ƒerného ƒas se p²iƒte
x1=236;
¼asPosuσ(cas_of,cas_c.Hodiny,cas_c.Minuty,cas_c.Sekundy,cas_c.Setiny);
¼asPosuσ(cas_f,cas_c.Hodiny,cas_c.Minuty,cas_c.Sekundy,cas_c.Setiny);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/a (cas.Sekundy!=cas_o.Sekundy) && (partiar[delka].s<2)
/b (kon[24]==1) && (((komu==1) && (b==0)) || ((komu==-1) && (c==0)))
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Fisher(int x) // vykreslí ruƒiƒky/displej Fisherov∞ch hodin
-s--Fisher ■ 6 -1 20 3
Fisher
________ruƒiƒky/displej_________
/:kon[5]==0 /
ruƒiƒky _________________displej__________________
p²emazání │ _umíst╪ní_ _____typ_____ zobrazení
p:(0)! │ /:x==119 / /:kon[5]==1 / :LCD(99,y,cas_f.Minuty,2,o)
:ii=30 │ :y=396 :y=431 :o=1 :o=0 :LCD(181,y,cas_f.Sekundy,2,o)
p²emazání │
#1 │
ƒárka │
1! │
vykreslení
#2
____________│_____________
___________typy~ruƒiƒek__________ ruƒiƒka
\1 \2 \3 1!
:i=cas_f.Hodiny :i=cas_f.Minuty :i=cas_f.Sekundy
:ii=15 :ii=25 :ii=30
p:(kon[17])! p:(kon[16])! p:(kon[15])!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vykreslí ruƒku o délce ii v "úhlu" i
GrKresliLinku(x,425,
integer(x+ii*cos((6*i-90)*Pí/180)),
integer(425+ii*sin((6*i-90)*Pí/180)));
p GrNastavBarvuPop²edí
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#1 i=0; i<=60; i++
#2 z=1; z<=3; z++
\1 z ?? case 1:
\2 case 2:
\3 case 3:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Klik(int fish,int pockat) // real-time práce s myτí a klávesnicí
-s--Klik ■ 37 -2 2 3
Klik
1!
____________________│_____________________
zavedení~limitu ƒasomíra _________________klik________________
/a /b ƒekání poƒkat? __zakonƒení___
_____komu?______ │ +1 /:pockat==1 zastavení~stopek klávesa?
/:n==1 / 2! ___│____ ano /b /d /
:limit=kon[36] :limit=kon[37] │ │ +2 :FishStop() ano ne
"pozice limit 'pozice /c 5! 6!
3! /b hraje~dalτí
:FishP²iƒti(n) :n=n*-1
/c :delka=-1
ƒas~vyprτel :pozice=-1
4!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;zahájení práce s myτí
MyτZobrazKurzor();
MyτZm╪σGrKurzor(13);
MyτVyprázdniFrontuUdálostí();
VyprázdniFrontuKláves();
2 ;spuτt╪ní stopek
StopkyNuluj();StopkyStart();
3 ;urƒení pozice myτi
Myτ¼tiUdálost(gMyτUdálost);
x=gMyτUdálost.X;
y=gMyτUdálost.Y;
4 ;stop cyklu
break;
5 ;naƒtení klávesy
MyτSchovejKurzor();
k=¼tiKlávesuZFronty();
tleve=0;tprave=0;
6 ;naƒtení tlaƒítek
k=KlNení;
if (gMyτUdálost.Typ==MyτUdálostLevéTlDolà) tleve=1; else tleve=0;
if (gMyτUdálost.Typ==MyτUdálostPravéTlDolà) tprave=1; else tprave=0;
MyτSchovejKurzor();if (pockat==0) ¼ekej(kon[38]);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/a (fish==1) && (kon[33]==2)
/b (fish==1) && (matpat==0)
/c (kon[33]==2) && (cas.Hodiny*3600+cas.Minuty*60+cas.Sekundy>limit)
/d BylaStisknutaKlávesa()==1
+1 (gMyτUdálost.Tlaƒítka==0) && (BylaStisknutaKlávesa()==0)
+2 (gMyτUdálost.Typ!=4) && (BylaStisknutaKlávesa()==0)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
int Muj(int cislo, int diagonalne) // souƒást funkce µach
-s--Muj ■ 2 -2 0 3
__________Muj___________
__moje~figurka/král?_ konec
/a / :return(0)
ano ________ne_______
:return(1) /:diagonalne==1 /
digonální~test lineární~test
/b /c
:return(1) :return(1)
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/a (cislo*o<0) || (abs(cislo)==6)
/b (abs(cislo)==1) || (abs(cislo)==2) || (abs(cislo)==4)
/c (abs(cislo)==1) || (abs(cislo)==2) || (abs(cislo)==3)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void µach( void ) // naplní prom╪nné bs a cs informací o stavu τachu
-s--µach ■ 112 22 0 3
µach
:bs=0
:cs=0
procházení~τachovnice
#1
x~a~y
#2
p²ítomen~král?
/:abs(s[x][y])==6
____ano____
__obracítko__ │
/:s[x][y]<0 / │
:o=1 :o=-1 │
│
____________rychlé~vylouƒení_________
/1 /
vylouƒení vylouƒení~v~osmi~sm╪rech
__"koho?_ #3
___│____ :break _______parametry+test___
/:o==1 / ___________parametry_____________ │
:cs=1 :bs=1 \1 \2 \3 \4 \5 \6 \7 \8 │
:xi=-1 │ :xi=0 │ :xi=1 │ :xi=0 │ │
:yi=-1/*0*/ │ :yi=-1 │ :yi=0 │ :yi=1 │ │
│ │ │ │ │
:xi=-1 :xi=1 :xi=1 :xi=-1 │
:yi=-1 :yi=-1 :yi=1 :yi=1 │
│
prohledávací~cyklus
____________:i=1___________
____"podmínky_____ │
_____pro~x______ │ │
/:xi>0 / │ │
:x1=(x+i*xi)<10 :x1=(x+i*xi)>1 │ │
│ │
_____pro~y______ │
/:yi>0 / │
:x2=(y+i*yi)<10 :x2=(y+i*yi)>1 │
│
cyklus
*a
______│_______
:iii=s[x+i*xi][y+i*yi] │
/3 /2 │
:i=9 'koho? zadání
:i++
'podmínky
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a ;prohledávací cyklus
i=1;
if (xi>0) x1=(x+i*xi)<10; else x1=(x+i*xi)>1;
if (yi>0) y1=(y+i*yi)<10; else y1=(y+i*yi)>1;
while (x1 || y1)
{
iii=s[x+i*xy][y+i*yi];
if (Muj(iii,xi!=yi)==1) i=9; else
if ((iii==3*o) || (iii==5*o))
if (o==1) cs=1; else bs=1;
i++;
if (xi>0) x1=(x+i*xi)<10; else x1=(x+i*xi)>1;
if (yi>0) y1=(y+i*yi)<10; else y1=(y+i*yi)>1;
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 (s[x-1][y+1*o]==1*o) ||
(s[x+1][y+1*o]==1*o) ||
(s[x-2][y-1]==2*o) ||
(s[x-1][y-2]==2*o) ||
(s[x+1][y-2]==2*o) ||
(s[x+2][y-1]==2*o) ||
(s[x+2][y+1]==2*o) ||
(s[x+1][y+2]==2*o) ||
(s[x-1][y+2]==2*o) ||
(s[x-1][y-1]==6*o) ||
(s[x][y-1]==6*o) ||
(s[x+1][y-1]==6*o) ||
(s[x+1][y]==6*o) ||
(s[x+1][y+1]==6*o) ||
(s[x][y+1]==6*o) ||
(s[x-1][y+1]==6*o) ||
(s[x-1][y]==6*o)
/2 (((abs(xi)==abs(yi)) && ((iii==3*o) || (iii==5*o)))) ||
(((abs(xi)!=abs(yi)) && ((iii==4*o) || (iii==5*o))))
/3 Muj(iii,abs(xi)==abs(yi))==1
#1 y=2; y<=9; y++
#2 x=2; x<=9; x++
#3 ii=1; ii<=8; ii++
\1 ii ?? case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
\6 case 6:
\7 case 7:
\8 case 8:
*a x1 && x2
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void TahV╪ºí(int x, int y) // tah v╪ºí, ztráta práva na jednu roτádu
-s--TahV╪ºí ■ 4 -2 -6 3
TahV╪ºí
c!
legální?
/1
____ano_____
/:n==1 /
│ _______kam?______
│ /:x==2 /:rosada[3]==0
│ │ :i=3
│ /:rosada[2]==0 a!
│ :i=2
│ a!
│
_______kam?______
/:x==2 /:rosada[1]==0
│ :i=1
/:rosada[0]==0 a!
:i=0
a!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a ;zápis roτády
v[h].posledni.ros[i]=1;
rosada[i]=1;
C ¼aruj /* C:(p²edm╪t)! 1-150 */
c ;ƒiτt╪ní pole s právem na roτádu
for (i=0; i<=3; i++) v[h].posledni.ros[i]=0;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 ((x==2) || (x==9)) && ((y==2) || (y==9))
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void TahKrálem( void ) // tah králem, ztráta práva roτády
-s--TahKrálem ■ 4 -2 -27 3
TahKrálem
c!
na~tahu?
/:n==1 /
0-1 2-3
#1 #2
│ │
a! a!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a ;p²ehození roτády
if (rosada[i]==0)
{
v[h].posledni.ros[i]=1;
rosada[i]=1;
}
r VpravoVbok();
c ;ƒiτt╪ní pole s právem na roτádu
for (i=0; i<=3; i++) v[h].posledni.ros[i]=0;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#1 i=0; i<=1; i++
#2 i=2; i<=3; i++
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Táhni( void ) // provede nejlepτí nalezen∞ tah
-s--Táhni ■ 30 -2 -3 3
Táhni
lze~táhnout?
/:x1>-2
_________________tah_________________
_záloha~figury__ vlastní~tah konec
/:s[x2][y2]==0 / :s[x2][y2]=s[x1][y1] k!
ne ano :s[x1][y1]=0 :n=n*-1
:z=0 :z=s[x2][y2] :m=0
:h=1
speciální~tahy?
\1 \4 \6
p╪τec v╪º král
1! 4! 6!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;p²em╪na p╪τce
if (v[1].nejlepsi.p!=0)
{
if (((n==1) && (b=0)) || ((n==-1) && (c=0)))
m=5*n; else m=v[1].nejlepsi.p;
s[x2][y2]=m;
}
4 ;tah v╪ºí - ovlivní právo na roτádu
TahV╪ºí(x1,y1);
6 ;tah králem - roτáda
if (abs(x1-x2)==2)
if ((x2<x1) &&
(((n==1) && (rosada[0]==0)) || ((n==-1) && (rosada[2]==0))))
{
s[5][y1]=4*n;
s[2][y1]=0;
} else
if ((((n==1) && (rosada[1]==0)) || ((n==-1) && (rosada[3]==0))))
{
s[7][y1]=4*n;
s[9][y1]=0;
}
TahKrálem();
k ;zápis do partiá²e
µach();
x1=v[1].nejlepsi.x1;
y1=v[1].nejlepsi.y1;
x2=v[1].nejlepsi.x2;
y2=v[1].nejlepsi.y2;
DoPartiá²e();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
\1 abs(s[x2][y2]) ?? case 1:
\4 case 4:
\6 case 6:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Vra£Roτády( void ) // nabytí práva roτády p²i vrácení tahu
-s--Vra£Roτády ■ 9 -2 -24 3
Vra£Roτády
vτechny~strany
#1
zm╪nit?
/1
ano
a!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a ;zisk práva roτády
v[h].posledni.ros[i]=0;
rosada[i]=0;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#1 i=0; i<=3; i++
/1 v[h].posledni.ros[i]==1
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Vra£Tah( void ) // vrátí poslední zadan∞ tah
-s--Vra£Tah ■ 4 -2 -12 3
Vra£Tah
0a!
______________│________________
p²em╪na? roτáda konec
/p /r :Vra£Roτády()
ano _______jaká?___
:s[x1][y1]=n /:x2<x1 /
velká malá
v! m!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;prom╪nné
x1=v[h].posledni.x1;
y1=v[h].posledni.y1;
x2=v[h].posledni.x2;
y2=v[h].posledni.y2;
a ;základní vrácení tahu
ok=0;
s[x1][y1]=s[x2][y2];
s[x2][y2]=v[h].posledni.z;
v ;dokonƒení vrácení velké roτády
s[2][y1]=4*n;
s[5][y1]=0;
m ;dokonƒení vrácení malé roτády
s[9][y1]=4*n;
s[7][y1]=0;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/p v[h].posledni.p!=0
/r (abs(s[x1][y1])==6) && (abs(x1-x2)==2)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void DoPartiá²e( void ) // zápis do partiá²e a promítnutí následkà vzetí
-s--DoPartiá²e ■ 4 -2 0 3
DoPartiá²e
0!
________________│_________________
│ ___τach?____ skoƒeno? │
│ /s / /z │
│ ano │ ano │
│ :partiar[delka].s=1 │ z! │
│ ne │
p²em╪na? :partiar[delka].s=0 │
/:m==0 / │
ne ano udání~destinace
n! a! _____________:ii=0_____________
poƒítání vyhodnocení
__________typ~figurky__________ /:ii>0
\2 \3 \4 \5 ano
jezdec "st²elec "v╪º dáma :partiar[delka].dest=1
/j #1 #2 'st²elec
víc~jak~jeden "kontrola 'kontrola 'v╪º
:ii++ c!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;prom╪nné
if (pozice<delka) delka=pozice;
delka++;pozice++;
partiar[delka].x1=x1;
partiar[delka].y1=y1;
partiar[delka].x2=x2;
partiar[delka].y2=y2;
partiar[delka].z=z;
partiar[delka].dest=0;
for (i=0; i<=3; i++) partiar[delka].ros[i]=v[h].posledni.ros[i];
n ;zápis táhnoucí figurky
partiar[delka].k=abs(s[x2][y2]);
a ;zápis p²em╪ny
partiar[delka].k=1;
partiar[delka].p=m;
z ;p²idání zajaté figurky do seznamu
i=0;
if (z<0) ii=1; else ii=0;
while (zajate[ii][i]!=0) i++;
zajate[ii][i]=z;
c ;hledací cyklus
i=1;
switch (iii)
{
case 1: xi=-1;yi=-1;break;
case 2: xi=1;yi=-1;break;
case 3: xi=1;yi=1;break;
case 4: xi=-1;yi=1;break;
case 5: xi=-1;yi=0;break;
case 6: xi=0;yi=-1;break;
case 7: xi=1;yi=0;break;
case 8: xi=0;yi=1;
}
while (s[x2+i*xi][y2+i*yi]==0) i++;
if (s[x2+i*xi][y2+i*yi]*n==3) ii++;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/s (bs==1) || (cs==1)
/z (z!=0) && (z<7)
/j (s[x2-2][y2-1]*n==2) || (s[x2-1][y2-2]*n==2) || (s[x2+1][y2-2]*n==2) ||
(s[x2+2][y2-1]*n==2) || (s[x2+2][y2+1]*n==2) || (s[x2+1][y2+2]*n==2) ||
(s[x2-1][y2+2]*n==2) || (s[x2-2][y2+1]*n==2)
\2 s[x2][y2]*n ?? case 2:
\3 case 3:
\4 case 4:
\5 case 5:
#1 iii=1; iii<=4; iii++
#2 iii=5; iii<=8; iii++
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Potáhni(int X1,int Y1,int X2,int Y2) // souƒást funkce ZkusTah
-s--Potáhni ■ 29 -2 0 3
Potáhni
0!
________│_________
speciální~tahy má~táhnoucí~τach?
\4 \6 __:µach()__
v╪º král /s /
:TahV╪ºí(X1,Y1) 6! ano :ok=1
v! ne~-~táhne~ƒlov╪k?
/c /
_______│_______ ne
ano~-~volba~figurky? zápis z!
/f / d! │
ano ne │
f! :m=0 │
___________│___________
__p²em╪na?_ taºeno~urƒit∞m~kamenem?
/f / /t /
ano ne ano ne
p! :v[h].posledni.p=0 :skoc=0 /:v[h].posledni.z~Není~0
:skoc=1
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;zákládní posun figurky
z=s[X2][Y2];
s[X2][Y2]=s[X1][Y1];
s[X1][Y1]=0;
6 ;dàsledek tahu králem (právo roτády)
TahKrálem();
if (abs(X1-X2)==2)
if (n==1)
{
if (X2<X1)
{
s[5][9]=6;µach();
if ((bs==0) && (cs==0))
{
ok=1;
s[5][9]=4;s[2][9]=0;
} else s[5][9]=0;
} else
{
s[7][9]=6;µach();
if ((bs==0) && (cs==0))
{
ok=1;
s[7][9]=4;s[9][9]=0;
} else s[7][9]=0;
}
} else
{
if (X2<X1)
{
s[5][2]=-6;µach();
if ((bs==0) && (cs==0))
{
ok=1;
s[5][2]=-4;s[2][2]=0;
} else s[5][2]=0;
} else
{
s[7][2]=-6;µach();
if ((bs==0) && (cs==0))
{
ok=1;
s[7][2]=-4;s[9][2]=0;
} else s[6][2]=0;
}
}
v ;vrácení tahu
s[X1][Y1]=s[X2][Y2];
s[X2][Y2]=z;
Vra£Roτády();
f ;v∞b╪r p²em╪ny p╪τce
Okno(241,224,400,256,0);
for (i=0; i<=3; i++)
if (n==1)
GrKresliP²edm╪t(kon[0]*15+(i+2),1,243+i*39,226); else
GrKresliP²edm╪t(kon[1]*15+i+8,1,243+i*39,226);
do Klik(1,1); while (!((x>242) && (y>225) && (x<399) && (y<255)));
GrNastavBarvuPozadí(0);GrKresliVypln╪n∞Obdélník(241,224,400,256);
m=((x-243)/39+2)*n;
s[X2][Y2]=m;
µach();
d ;zápis do partiá²e
x1=X1;y1=Y1;x2=X2;y2=Y2;
DoPartiá²e();
z ;zápis do varianty
ok=1;
v[h].posledni.h=0;
v[h].posledni.x1=X1;
v[h].posledni.y1=Y1;
v[h].posledni.x2=X2;
v[h].posledni.y2=Y2;
v[h].posledni.z=z;
v[h].abs=0;
p ;automatická p²em╪na na dámu
s[X2][Y2]=5*n;
v[h].posledni.p=5*n;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/s ((n==1) && (bs==1)) || ((n==-1) && (cs==1))
/c ((n==1) && (b==1)) || ((n==-1) && (c==1))
/f (abs(s[X2][Y2])==1) && (((n==1) && (Y2==2)) || ((n==-1) && (Y2==9)))
/t (abs(s[X2][Y2])==1) || (abs(s[X2][Y2])==2) || (abs(s[X2][Y2])==6)
\4 abs(s[X2][Y2]) ?? case 4:
\6 case 6:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
int TestTahu(int x1,int y1,int x2,int y2) // test tahu pro uºivatele
-s--TestTahu ■ 37 -2 2 3
TestTahu
:ok=0
___________________________│____________________________
delτí~tah? základní~kontrola konec
/l /t :return(ok)
ano~kontrola ____________│________________
l! ____individuální~kontrola_____ táhnout?
\1 \2 \3 \4 \5 \6 /:ok==1
p╪τec jezdec st²elec v╪º dáma král :ok=0
1! 2! 3! 4! 5! 6! :Potáhni(x1,y1,x2,y2);
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
l ;kontrola proti p²eskoƒení figury
skoc=0;x=x1;y=y1;
while (((x!=x2) || (y!=y2)) && (skoc==0))
{
if (x1<x2) x++; else if (x1>x2) x--;
if (y1<y2) y++; else if (y1>y2) y--;
if (((x!=x2) || (y!=y2)) && (s[x][y]!=0)) skoc=1;
}
1 ;kontrola pro p╪τce
if (((y1-y2)*n>0) && (abs(y1-y2)<3))
if (x1==x2)
{
if (s[x2][y2]==0)
if (abs(y1-y2)==2)
{
if ((s[x1][y1-n]==0) && ((y1==3) || (y1==8))) ok=1;
} else ok=1;
} else
if (abs(x1-x2)==1)
if (s[x2][y2]*n<0) ok=1;
2 ;kontrola pro jezdce
if (((abs(x1-x2)==2) && (abs(y1-y2)==1)) ||
((abs(x1-x2)==1) && (abs(y1-y2)==2))) ok=1;
3 ;kontrola pro st²elce
if (abs(x1-x2)==abs(y1-y2)) ok=1;
4 ;kontrola pro vا
if (((x1!=x2) && (y1==y2)) || ((x1==x2) && (y1!=y2))) ok=1;
5 ;kontrola pro dámu
if ((abs(x1-x2)==abs(y1-y2)) ||
(((x1!=x2) && (y1=y2)) || ((x1==x2) && (y1!=y2)))) ok=1;
6 ;kontrola pro krále
if ((abs(x1-x2)<2) && (abs(y1-y2)<2)) ok=1; else
if ((abs(x1-x2)==2) && (y1==y2) && ((y1==2) || (y1==9)))
{
µach();
if (((n==1) && (bs==0)) || ((n==-1) && (cs==0)))
{
if (n==1)
{
if (x2<x1)
{
if ((rosada[0]==0) && (s[2][9]==4) &&
(s[5][9]==0) && (s[4][9]==0) && (s[3][9]==0)) ok=1;
} else
if ((rosada[1]==0) && (s[9][9]==4) &&
(s[7][9]==0) && (s[8][9]==0)) ok=1;
} else
if (x2<x1)
{
if ((rosada[2]==0) && (s[2][2]==-4) &&
(s[5][2]==0) && (s[4][2]==0) && (s[3][2]==0)) ok=1;
} else
if ((rosada[3]==0) && (s[9][2]==-4) &&
(s[7][2]==0) && (s[8][2]==0)) ok=1;
}
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/l ((abs(x1-x2)>1) || (abs(y1-y2)>1)) && (abs(s[x1][y1])!=2)
/t (skoc==0) &&
((x1!=x2) || (y1!=y2)) && (x1>1) && (x1<10) && (y1>1) && (y1<10) &&
(x2>1) && (x2<10) && (y2>1) && (y2<10) &&
(((s[x1][y1]>0) && (n==1)) || ((s[x1][y1]<0) && (n==-1))) &&
(s[x2][y2]*n<=0)
\1 abs(s[x1][y1]) ?? case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
\6 case 6:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Skok(int max) // zm╪na sm╪ru figury po napadení cizí
-s--Skok ■ 2 -2 -28 3
Skok
màºe?
/1
ano
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;zm╪na direkce figurky
skoc=0;
v[h].z=(v[h].z/9+1)*9-1;
if (v[h].z>max) v[h].z=0;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 skoc==1
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Vyno²ení( void ) // sníºení hloubky prohledávání v herním stromu
-s--Vyno²ení ■ 4 -2 -27 3
Vyno²ení
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
if (v[h].nejlepsi.x1==-1)
{
µach();
if ((bs==0) && (cs==0)) v[h].nejlepsi.h=9000; else
if (n==ja) v[h].nejlepsi.h=-10000; else v[h].nejlepsi.h=10000;
}
v[h-1].posledni.h=v[h].nejlepsi.h;
if (h>1)
{
h--;n=n*-1;
ok=1;
} else h--;
v[h].abs=1;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Zano²ení( void ) // zv∞τení hloubky prohledávaní v herním stromu
-s--Zano²ení ■ 4 -2 -27 3
Zano²ení
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
h++;n=n*-1;
for (i=0; i<=3; i++) v[h].posledni.ros[i]=0;
v[h].nejlepsi.h=0;
v[h].nejlepsi.x1=-1;
v[h].x=1;
v[h].y=2;
v[h].z=0;
ok=0;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Test(int x,int y,int z) // soućst funkce VyhledejTah
-s--Test ■ 4 -2 -29 3
Test
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
ok=0;
if ((skoc==0) && (s[x][y]*n<=0) &&
(v[h].x>1) && (v[h].x<10) && (v[h].y>1) && (v[h].y<10) &&
(x>1) && (x<10) && (y>1) && (y<10)) Potáhni(v[h].x,v[h].y,x,y);
if ((ok==0) && (z>-1)) v[h].z=z;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Obnovµachovnici( void ) // p²enese informace o stavu τachovnice ze zálohy
-s--Obnovµachovnici ■ 2 -2 -24 3
Obnovµachovnici
první~rozm╪r
#1
druh∞~rozm╪r
#2
:s[x][y]=p[x][y]
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#1 y=2; y<=9; y++
#2 x=2; x<=9; x++
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void OceσPozici(int pocitat) // ohdnotí danou pozici ƒíslem
-s--OceσPozici ■ 15 -2 -15 3
OceσPozici
___________│_
0! procházení~τachovnice
#y
│
#x
_______cen╪ní_________
_>>obracítko<<____ │ centralizace
/:s[x][y]*ja<0 / │ c!
:o=-1 :o=1 │
│
materiální~&~poziƒní~cen╪ní
\1 \2 \3 \4 \5 \6
p╪τec │ st²elec │ dáma │
1! │ 3! │ 5! │
│ │ │
jezdec v╪º král
2! 4! 6!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;inicializace: hodnoty + p²iƒtení uzlu a τachu
v[h].posledni.h=0;
if (pocitat==1) count++;
v[h].abs=1;
µach();
if ((bs==1) || (cs==1)) v[h].posledni.h=v[h].posledni.h+check;
1 ;materiální a poziƒní ocen╪ní p╪τce
v[h].posledni.h=v[h].posledni.h+pesec*o;
i=1;
while ((s[x][y-i*ja]==0) && (i<3))
{
if (i==2)
{
if (ja==1)
{
if (y==8) v[h].posledni.h=v[h].posledni.h+pole*o;
} else if (y==3) v[h].posledni.h=v[h].posledni.h+pole*o;
} else v[h].posledni.h=v[h].posledni.h+pole*o;
i++;
}
2 ;materiální a poziƒní ocen╪ní jezdce
v[h].posledni.h=v[h].posledni.h+jezdec*o;
if (s[x-2][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x-1][y-2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x+1][y-2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x+2][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x+2][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x+1][y+2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x-1][y+2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x-2][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
3 ;materiální a poziƒní ocen╪ní st²elce
v[h].posledni.h=v[h].posledni.h+strelec*o;
i=1;while (s[x-i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x+i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x+i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x-i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
4 ;materiální a poziƒní ocen╪ní v╪ºe
v[h].posledni.h=v[h].posledni.h+vez*o;
i=1;while (s[x-i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x+i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
5 ;materiální a poziƒní ocen╪ní dámy
v[h].posledni.h=v[h].posledni.h+dama*o;
i=1;while (s[x-i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x-i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x+i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x+i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x+i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
i=1;while (s[x-i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
6 ;materiální a poziƒní ocen╪ní krále
v[h].posledni.h=v[h].posledni.h+kral*o;
if (s[x-1][y]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x-1][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x+1][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x+1][y]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x+1][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
if (s[x-1][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
c ;centralizaƒní faktor
v[h].posledni.h=v[h].posledni.h+ctab[x-2][y-2]*o;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#y y=2; y<=9; y++
#x x=2; x<=9; x++
\1 abs(s[x][y]) ?? case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
\6 case 6:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void VyhledejTah(int maxhloubka, int pocitat) // vypoƒítá pokraƒování
-s--VyhledejTah ■ 2 -2 13 3
________________VyhledejTah_________________
limit+~záloha~τachovnice inicializace hlavní~cyklus konec
/:pocitat==1 0! +c u!
_______________│_______________ │
limit │ záloha │
______________│_______________ │ :count=0 │
\a \b \2 \3 │ #y │
pàltahy │ __turnaj__ nekoneƒno │ │ │
:limit=0 │ /:n==1 / :limit=0 │ #x │
│ bíl∞ │ │ :p[x][y]=s[x][y] │
│ :limit=kon[36] │ │ │
│ │ │ │
ƒas ƒern∞ │ │
:limit=kon[35] :limit=kon[37] │ │
│ │
hloubka │
/:kon[33]>0 │
:maxhloubka=4 │
│
_______________________________________________│________________________________________________
__posun__ test~figur konec~τachovnice? vratiteln∞~tah vykreslení~a~p²eruτení
kam? :v[h].z++ __________________│__________________ /k /:ok==1 p!
/:v[h].z==0 \1 \2 \3 \4 \5 \6 \ ano _______ano________
______│______ p╪τec jezdec st²elec v╪º dáma král nic :Vyno²ení() max~hloubka? vrácení
/:v[h].x==9 / 1! 2! 3! 4! 5! 6! :v[h].z=0 /:h==maxhloubka v!
:v[h].x=2 :v[h].x++ ano
:v[h].y++ :OceσPozici(pocitat)
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;inicializace
bz=b;cz=c;
b=0;c=0;
ja=n;
v[0].nejlepsi.x1=-1;
h=0;
Zano²ení();
n=ja;
skoc=0;
StopkyNuluj();StopkyStart();
MyτZm╪σGrKurzor(43);MyτZobrazKurzor();
VyprázdniFrontuKláves();
u ;dokonƒení
MyτSchovejKurzor();
if (v[1].nejlepsi.x1==-2)
{
StopkyStop();
¼ekej(kon[38]);MyτVyprázdniFrontuUdálostí();
Myτ¼tiUdálost(gMyτUdálost);
x=gMyτUdálost.X;
y=gMyτUdálost.Y;
RozvinovacíNabídky();
} else FishStop();
b=bz;c=cz;
1 ;test pro p╪τce
switch (v[h].z)
{
case 1:
if (s[v[h].x][v[h].y-1*n]==0) Test(v[h].x,v[h].y-1*n,-1); else skoc=1;
break;
case 2:
if ((s[v[h].x][v[h].y-2*n]==0) &&
(((n==1) && (v[h].y==8)) || ((n==-1) && (v[h].y==3))))
Test(v[h].x,v[h].y-2*n,-1);
skoc=0;
break;
case 3:
if (s[v[h].x-1][v[h].y-n]*n<0) Test(v[h].x-1,v[h].y-n,-1);
break;
case 4:
if (s[v[h].x+1][v[h].y-n]*n<0) Test(v[h].x+1,v[h].y-n,-1);
v[h].z=0;
}
2 ;test pro jezdce
switch (v[h].z)
{
case 1: Test(v[h].x-2,v[h].y-1,-1);break;
case 2: Test(v[h].x-1,v[h].y-2,-1);break;
case 3: Test(v[h].x+1,v[h].y-2,-1);break;
case 4: Test(v[h].x+2,v[h].y-1,-1);break;
case 5: Test(v[h].x+2,v[h].y+1,-1);break;
case 6: Test(v[h].x+1,v[h].y+2,-1);break;
case 7: Test(v[h].x-1,v[h].y+2,-1);break;
case 8:
Test(v[h].x-2,v[h].y+1,-1);
v[h].z=0;
}
3 ;test pro st²elce
switch (v[h].z/9)
{
case 0: Test(v[h].x-v[h].z,v[h].y-v[h].z,8);break;
case 1: Test(v[h].x+(v[h].z-8),v[h].y-(v[h].z-8),17);break;
case 2: Test(v[h].x+(v[h].z-17),v[h].y+(v[h].z-17),26);break;
case 3: Test(v[h].x-(v[h].z-26),v[h].y+(v[h].z-26),0);break;
default: v[h].z=0;
}
Skok(26);
4 ;test pro vا
switch (v[h].z/9)
{
case 0: Test(v[h].x-v[h].z,v[h].y,8);break;
case 1: Test(v[h].x,v[h].y-(v[h].z-8),17);break;
case 2: Test(v[h].x+(v[h].z-17),v[h].y,26);break;
case 3: Test(v[h].x,v[h].y+(v[h].z-26),0);break;
default: v[h].z=0;
}
Skok(26);
5 ;test pro dámu
switch (v[h].z/9)
{
case 0: Test(v[h].x-v[h].z,v[h].y,8);break;
case 1: Test(v[h].x-(v[h].z-8),v[h].y-(v[h].z-8),17);break;
case 2: Test(v[h].x,v[h].y-(v[h].z-17),26);break;
case 3: Test(v[h].x+(v[h].z-26),v[h].y-(v[h].z-26),35);break;
case 4: Test(v[h].x+(v[h].z-35),v[h].y,44);break;
case 5: Test(v[h].x+(v[h].z-44),v[h].y+(v[h].z-44),53);break;
case 6: Test(v[h].x,v[h].y+(v[h].z-53),62);break;
case 7: Test(v[h].x-(v[h].z-62),v[h].y+(v[h].z-62),0);break;
default: v[h].z=0;
}
Skok(62);
6 ;test pro krále
switch (v[h].z)
{
case 1: Test(v[h].x-1,v[h].y,-1);break;
case 2: Test(v[h].x-1,v[h].y-1,-1);break;
case 3: Test(v[h].x,v[h].y-1,-1);break;
case 4: Test(v[h].x+1,v[h].y-1,-1);break;
case 5: Test(v[h].x+1,v[h].y,-1);break;
case 6: Test(v[h].x+1,v[h].y+1,-1);break;
case 7: Test(v[h].x,v[h].y+1,-1);break;
case 8: Test(v[h].x-1,v[h].y+1,-1);break;
case 9:
if ((v[h].y==2) || (v[h].y==9))
{
µach();
if (((n==1) && (bs==0)) || ((n==-1) && (cs==0)))
{
if (n==1)
{
if ((rosada[0]==0) && (s[2][9]==4) &&
(s[5][9]==0) && (s[4][9]==0) && (s[3][9]==0)) Test(v[h].x-2,v[h].y,-1);
} else
{
if ((rosada[2]==0) && (s[2][2]==-4) &&
(s[5][2]==0) && (s[4][2]==0) && (s[3][2]==0)) Test(v[h].x-2,v[h].y,-1);
}
}
}
break;
case 10:
if ((v[h].y==2) || (v[h].y==9))
{
µach();
if (((n==1) && (bs==0)) || ((n==-1) && (cs==0)))
{
if (n==1)
{
if ((rosada[1]==0) && (s[9][9]==4) &&
(s[7][9]==0) && (s[8][9]==0)) Test(v[h].x+2,v[h].y,-1);
} else
{
if ((rosada[3]==0) && (s[9][2]==-4) &&
(s[7][2]==0) && (s[8][2]==0)) Test(v[h].x+2,v[h].y,-1);
}
}
}
v[h].z=0;
}
v ;vrácení tahu + vyno²ení/zano²ení
if (v[h].abs==1)
if (v[h].nejlepsi.x1==-1) v[h].nejlepsi=v[h].posledni; else
if (h%2==1)
{
if (v[h].posledni.h>v[h].nejlepsi.h) v[h].nejlepsi=v[h].posledni;
} else
if (v[h].posledni.h<v[h].nejlepsi.h) v[h].nejlepsi=v[h].posledni;
if ((v[h].abs==1) && (h>1) &&
(v[h-1].nejlepsi.x1!=-1) &&
(((h%2==1) && (v[h].posledni.h>v[h-1].nejlepsi.h)) ||
((h%2==0) && (v[h].posledni.h<v[h-1].nejlepsi.h))))
{
Vra£Tah();Vyno²ení();
Vra£Tah();
} else
if (v[h].abs==1) Vra£Tah(); else Zano²ení();
p ;vykreslení hodin a moºné p²ijetí podn╪tu k p²eruτení
FishP²iƒti(ja);
if (pocitat==1)
{
if (((kon[33]==1) || (kon[33]==2)) &&
((cas.Hodiny*3600+cas.Minuty*60+cas.Sekundy)+1>=limit))
{
if (v[1].nejlepsi.x1==-1) v[1].nejlepsi=v[1].posledni;
Obnovµachovnici();
h=0;n=ja;
} else
{
if (BylaStisknutaKlávesa()==1)
{
if ((¼tiKlávesuZFronty()==KlEsc) && (count>0))
{
if (v[1].nejlepsi.x1==-1) v[1].nejlepsi=v[1].posledni;
Obnovµachovnici();
h=0;n=ja;
}
} else
{
Myτ¼tiUdálost(gMyτUdálost);
x=gMyτUdálost.X;
y=gMyτUdálost.Y;
if ((gMyτUdálost.Tlaƒítka!=0) && (x>2) && (y>2) && (x<334) && (y<15))
{
Obnovµachovnici();
v[1].nejlepsi.x1=-2;
h=0;n=ja;
}
}
}
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/k (v[h].z==0) && (v[h].x==9) && (v[h].y==9)
#y y=2; y<=9; y++
#x x=2; x<=9; x++
+c h!=0
\a kon[33] ?? case 0:
\b case 1:
\1 s[v[h].x][v[h].y]*n ?? case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
\6 case 6:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
int SrovnejTah(int t1,int t2) // porovná dva tahy partiá²e na shodnost
-s--SrovnejTah ■ 2 -2 -21 3
SrovnejTah
__rovnost?__
/1 /
ano ne
:return(1) :return(0)
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 (partiar[t1].x1==partiar[t2].x1) &&
(partiar[t1].y1==partiar[t2].y1) &&
(partiar[t1].x2==partiar[t2].x2) &&
(partiar[t1].y2==partiar[t2].y2)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Okno(int x1,int y1,int x2,int y2, int transp) // plastické okno
-s--Okno ■ 4 -2 -20 3
________Okno
1! transparentní?
/:transp==0
ano
2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vykreslení plastického okna
GrNastavBarvuPop²edí(0);
GrKresliLinku(x1+1,y1+1,x2-1,y1+1);GrKresliLinku(x2-1,y1+1,x2-1,y2-1);
GrKresliLinku(x2-1,y2-1,x1+1,y2-1);GrKresliLinku(x1+1,y2-1,x1+1,y1+1);
GrNastavBarvuPop²edí(kon[14]);
GrKresliLinku(x2,y1,x2,y2);GrKresliLinku(x2,y2,x1,y2);
GrNastavBarvuPop²edí(kon[13]);
GrKresliLinku(x1,y1,x2,y1);GrKresliLinku(x1,y1,x1,y2);
2 ;prokreslení vnit²ní ƒásti (netransparentní okno)
GrNastavBarvuPozadí(kon[12]);
GrKresliVypln╪n∞Obdélník(x1+2,y1+2,x2-2,y2-2);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Piτ(int px,int py,int pozadi,string text) // text se stínem, pop². pozadím
-s--Piτ ■ 3 -2 -37 3
Piτ
:GrNastavText(pozadi)
b:(kon[11])!
p:(px+1,py+1)!
:GrPiτⁿet╪zec(text)
:GrNastavText(1)
b:(kon[10])!
p:(px,py)!
:GrPiτⁿet╪zec(text)
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
b GrNastavBarvuPop²edí
p GrNastavPozici
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
int Nabídka(int px,int py,int a, int b) // p²eddefinovaná nabídka
-s--Nabídka ■ 20 -2 -4 3
Nabídka
___________________:ii=0____________________
nejdelτí~text základ vnit²ek volba bylo~n╪co~zvoleno?
#c o! #c :Klik(0,1) /v /
delτí? okno~s~textem ano ne
/s p! v! :return(-1)
ano
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;p²i²azení indexu zatím nejdelτího ²et╪zce
ii=StrVelikost(vyber[a][b].nabidka[i]);
o ;základní okno
Okno(px,py,px+ii*Grµí²kaZnaku+9,py+(GrV∞τkaZnaku+6)*(vyber[a][b].delka+1)+4,0);
p ;podruºné okno + text
Okno(px+2+1,py+(GrV∞τkaZnaku+6)*i+3,
px+ii*Grµí²kaZnaku+4+2,py+(GrV∞τkaZnaku+6)*(i+1)+1,1);
Piτ(px+3+1,py+(GrV∞τkaZnaku+6)*i+5,1,vyber[a][b].nabidka[i]);
v ;návrat zvolené hodnoty
return((y-py-3)/(GrV∞τkaZnaku+6));
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/s StrVelikost(vyber[a][b].nabidka[i])>ii
/v (x>px+2) && (x<px+ii*Grµí²kaZnaku+7) &&
(y>py+2) && (y<py+(GrV∞τkaZnaku+6)*(vyber[a][b].delka+1)+2)
#c i=0; i<=vyber[a][b].delka; i++
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void LCD(int x, int y, long cislo, int cif, int typ) // v∞stup údajà na displej
-s--LCD ■ 4 -2 -19 3
__________LCD__________
1! v∞poƒet~základu ƒíslice
#1 +1
:zaklad=zaklad*10 pokraƒuj
2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;deklarace + hlavní okno
long stare=cislo;
long zaklad=1;
Okno(x-2,y-2,x+cif*39+1,y+30,1);
2 ;vykreslení ƒíslice a úprava hodnot
zaklad=zaklad/10;
ii=cislo/zaklad;
if (cislo-ii*zaklad==stare)
GrKresliP²edm╪t(2011+15*typ,0,x,y); else
GrKresliP²edm╪t(2001+15*typ+ii,0,x,y);
cislo=cislo-ii*zaklad;
x=x+39;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#1 i=1; i<=cif; i++
+1 zaklad>1
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Notes(string poznamka) // vypíτe poznámku k objektu pod kurzorem
-s--Notes ■ 5 -2 -28 3
Notes
:smaz=1
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;napíτe poznámku a p²iƒte ƒas
StopkyNuluj();StopkyStart();
Okno(x-2,y-2,x+StrVelikost(poznamka)*Grµí²kaZnaku+2,y+GrV∞τkaZnaku+2,1);
GrNastavText(0);
GrNastavBarvuPop²edí(0);GrNastavBarvuPozadí(kon[19]);
GrNastavPozici(x,y);GrPiτⁿet╪zec(poznamka);
do Myτ¼tiUdálost(gMyτUdálost); while (gMyτUdálost.Tlaƒítka!=0);
GrNastavBarvuPozadí(0);
GrKresliVypln╪n∞Obdélník
(x-2,y-2,x+StrVelikost(poznamka)*Grµí²kaZnaku+2,y+GrV∞τkaZnaku+2);
FishStop();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
string Txt(int index) // vypíτe hláτku ƒíslo 'index' aktuálním jazykem
-s--Txt ■ 4 -2 -30 3
Txt
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
txt=SouborOtev²i("*\\partie.lng",SouborP²ístup¼tení|SouborP²ístupTextov∞);
do{
Soubor¼tiSⁿet╪zec(txt,str);
StrSmaº(str,StrVelikost(str)-1,1);
} while (str!="***");
for (z=0; z<=index; z++)
for (iii=0; iii<=1; iii++)
if (iii==kon[40])
Soubor¼tiSⁿet╪zec(txt,str);
else Soubor¼tiNov∞ⁿádek(txt);
StrSmaº(str,StrVelikost(str)-1,1);
SouborZav²i(txt);
return(str);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Popis( void ) // popis políƒka τachovnice (kámen+pozice)
-s--Popis ■ 5 -2 12 3
Popis
Urƒení~pozice
:px=x1+95!
:py=58-y1!
_____________________________misto+figurka_____________________________
\1 \2 \3 \4 \5 \6 \
:Notes(Txt(0)+px+py) │ :Notes(Txt(2)+px+py) │ :Notes(Txt(4)+px+py) │ :Notes(""+px+py);
│ │ │
:Notes(Txt(1)+px+py); :Notes(Txt(3)+px+py) :Notes(Txt(5)+px+py)
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
\1 abs(s[x1][y1]) ?? case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
\6 case 6:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Tlaƒítko(int x,int y,string text,int stiskle) // vykreslí talƒítko
-s--Tlaƒítko ■ 2 -2 -18 3
TlaĒtko
1!
_____│_____
___stisklé?___ text
/:stiskle==1 / 4!
ano ne
2! 3!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vykreslení základu tlaƒítka
GrNastavBarvuPozadí(kon[12]);
GrKresliVypln╪n∞Obdélník
(x+2,y+2,x+StrVelikost(text)*Grµí²kaZnaku+1,y+GrV∞τkaZnaku+3);
2 ;stisklé tlaƒítko
Okno(x+StrVelikost(text)*Grµí²kaZnaku+3,y+GrV∞τkaZnaku+3,x,y,1);
3 ;volné tlaƒítko
Okno(x,y,x+StrVelikost(text)*Grµí²kaZnaku+3,y+GrV∞τkaZnaku+3,1);
4 ;text v tlaĒtku
Piτ(x+1,y+1,1,text);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Volba(int x, int y, int a,int b) // okénko s nastavením
-s--Volba ■ 4 -2 -29 3
Volba
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
ii=0;
for (i=0; i<=vyber[1][a].delka; i++)
if (StrVelikost(vyber[1][a].nabidka[i])>ii)
ii=StrVelikost(vyber[1][a].nabidka[i]);
Okno(x,y,x+ii*Grµí²kaZnaku+4,y+GrV∞τkaZnaku+3,1);
Piτ(x+1,y+1,1,vyber[1][a].nabidka[kon[b]]);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void MenuProst²edí( void ) // okno nastavení prost²edí
-s--MenuProst²edí ■ 9 -2 83 3
MenuProst²edí
:ok=0!
*:ok==0
Nastavení~prost²edí
1!
:Klik(0,1)
_______________________________________________________________________________oblasti~kliknutí_______________________________________________________________
/a /b /c /d /e /f /g /h /i /j /k /l
bílé~kameny ƒerné~kameny bílá~pole ƒerná~pole povrch~hodin typ~hodin notace pomlƒky~k²íºky displej barva typ~barvy OK
│ │ │ │ │ │ │ /:kon[7]==1 / │ :kon[9+kon[20]]=(x-127)/10! │ :ok=1!
│ :i=Nabídka(129,157,1,0) │ :i=Nabídka(129,217,1,1) │ :i=Nabídka(129,277,1,3) │ │ │ │ │ 3!
│ /x │ /x │ /x │ :kon[7]=0! :kon[7]=1! │ │
│ │ │ │ │ │ │ │ │
│ :kon[1]=i! │ :kon[3]=i! │ :kon[5]=i! │ │ │
│ │ │ │ │ │
:i=Nabídka(129,127,1,0) :i=Nabídka(129,187,1,1) :i=Nabídka(129,247,1,2) :i=Nabídka(129,307,1,4) :i=Nabídka(129,353,1,5) :i=Nabídka(129,188,1,6)
/x /x /x /x /x /x
│ │ │ │ │ │
:kon[0]=i! :kon[2]=i! :kon[4]=i! :kon[6]=i! :kon[8]=i! :kon[20]=i!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
f VyprázdniFrontuKláves();
1 ;vykreslení okna nastavení prost²edí
Okno(121,94,519,386,0);
Piτ(125,98,1,Txt(44));Volba(125,112,0,0);
Piτ(125,128,1,Txt(45));Volba(125,142,0,1);
Piτ(125,158,1,Txt(46));Volba(125,172,1,2);
Piτ(125,188,1,Txt(47));Volba(125,202,1,3);
Piτ(125,218,1,Txt(48));Volba(125,232,2,4);
Piτ(125,248,1,Txt(49));Volba(125,262,3,5);
Piτ(125,278,1,Txt(50));Volba(125,292,4,6);
Okno(125,308,137,308+GrV∞τkaZnaku,0);
if (kon[7]==1)
{
GrNastavBarvuPop²edí(15);
GrKresliLinku(127,310,135,306+GrV∞τkaZnaku);
GrKresliLinku(135,310,127,306+GrV∞τkaZnaku);
}
Piτ(141,308,1,Txt(51));
Piτ(125,324,1,Txt(52));Volba(125,338,5,8);
Okno(125,355,289,366,1);
for (i=0; i<=15; i++)
{
GrNastavBarvuPozadí(i);
GrKresliVypln╪n∞Obdélník(127+i*10,357,137+i*10,364);
}
Okno(291,355,305,366,1);
GrNastavBarvuPozadí(kon[9+kon[20]]);
GrKresliVypln╪n∞Obdélník(293,357,303,364);
Volba(125,370,6,20);
Okno(279,97,516,219,1);
for (i=1; i<=6; i++)
{
GrKresliP²edm╪t(kon[0]*15+i,1,242+i*39,99);
GrKresliP²edm╪t(kon[1]*15+i+6,1,242+i*39,129);
if (i%2==1)
GrKresliP²edm╪t(kon[2]*15+14,0,242+i*39,159); else
GrKresliP²edm╪t((kon[3]+1)*15,0,242+i*39,159);
GrKresliP²edm╪t(1000+kon[4]*45+i,1,242+i*39,189);
}
TlaĒtko(497,370,"OK",0);
3 ;zruτení okna
GrNastavBarvuPozadí(kon[9]);GrKresliVypln╪n∞Obdélník(121,94,519,386);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
*n PràchodnostP²edm╪tuP²edB() Je 0
/a (x>125) && (y>112) && (x<248) && (y<125)
/b (x>125) && (y>142) && (x<248) && (y<155)
/c (x>125) && (y>172) && (x<281) && (y<185)
/d (x>125) && (y>202) && (x<281) && (y<215)
/e (x>125) && (y>232) && (x<217) && (y<245)
/f (x>125) && (y>262) && (x<337) && (y<275)
/g (x>125) && (y>292) && (x<361) && (y<305)
/h (x>125) && (y>308) && (x<137) && (y<318)
/i (x>125) && (y>338) && (x<200) && (y<353)
/j (x>126) && (y>356) && (x<288) && (y<365)
/k (x>125) && (y>370) && (x<280) && (y<385)
/l (x>497) && (y>370) && (x<518) && (y<385)
/x i!=-1
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void MenuHledání( void ) // podrobné nastavení vyhledávacího algoritmu
-s--MenuHledání ■ 8 -2 -13 3
MenuHledání
:ok=0
*:ok==0
Nastavení~hledání
1!
____________________:Klik(0,1);__________________
/a /b /c /d /e /f /g /h /i
typ~hry pàltahy bm bs tbm tbs tcm tcs :ok=1
:i=Nabídka(192,207,1,8) b! c! d! e! f! g! h!
/:i~Není~-1
:kon[33]=i
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vykreslení
Okno(186,176,454,306,0);
Piτ(188,178,0,Txt(16));
Volba(189,192,8,33);
GrNastavBarvuPozadí(6);
for (i=0; i<=3; i++)
{
if (i==0) str=" "; else str=" : ";
Piτ(188,220+i*24,0,str);
Piτ(188,208+i*24,1,Txt(17+i));
}
TlaĒtko(432,290,"OK",0);
GrNastavBarvuPop²edí(14);
GrNastavPozici(188,220);GrPiτL¼íslo(kon[34],-1);
for (i=0; i<=2; i++)
{
GrNastavPozici(188,244+i*24);GrPiτL¼íslo(kon[35+i]/60,-1);
GrNastavPozici(212,244+i*24);GrPiτL¼íslo(kon[35+i]%60,-1);
}
/*GrNastavPozici(188,244);GrPiτL¼íslo(kon[35]/60,-1);
GrNastavPozici(212,244);GrPiτL¼íslo(kon[35]%60,-1);
GrNastavPozici(188,268);GrPiτL¼íslo(kon[36]/60,-1);
GrNastavPozici(212,268);GrPiτL¼íslo(kon[36]%60,-1);
GrNastavPozici(188,292);GrPiτL¼íslo(kon[37]/60,-1);
GrNastavPozici(212,292);GrPiτL¼íslo(kon[37]%60,-1);*/
b ;pàltahy
GrNastavPozici(189,221);
Gr¼tiI¼íslo("",i,2,0,224);
if (i>0) kon[34]=i;
c ;ƒas na tah (minuty)
GrNastavPozici(189,245);
Gr¼tiI¼íslo("",i,2,0,224);
if ((abs(i)*60+kon[35]%60)>1) kon[35]=abs(i)*60+kon[35]%60;
d ;ƒas na tah (sekundy)
GrNastavPozici(213,245);
Gr¼tiI¼íslo("",i,2,0,224);
if ((kon[35]/60*60+abs(i))>1) kon[35]=kon[35]/60*60+abs(i);
e ;turnaj - ƒas pro bílého (minuty)
GrNastavPozici(189,269);
Gr¼tiI¼íslo("",i,2,0,224);
if ((abs(i)*60+kon[36]%60)>1) kon[36]=abs(i)*60+kon[36]%60;
f ;turnaj - ƒas pro bílého (sekundy)
GrNastavPozici(213,269);
Gr¼tiI¼íslo("",i,2,0,224);
if ((kon[36]/60*60+abs(i))>1) kon[36]=kon[36]/60*60+abs(i);
g ;turnaj - ƒas pro ƒerného (minuty)
GrNastavPozici(189,293);
Gr¼tiI¼íslo("",i,2,0,224);
if ((abs(i)*60+kon[37]%60)>1) kon[37]=abs(i)*60+kon[37]%60;
h ;turnaj - ƒas pro ƒerného (sekundy)
GrNastavPozici(213,293);
Gr¼tiI¼íslo("",i,2,0,224);
if ((kon[37]/60*60+abs(i))>1) kon[37]=kon[37]/60*60+abs(i);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/a (x>189) && (y>192) && (x<257) && (y<205)
/b (x>188) && (y>220) && (x<212) && (y<230)
/c (x>188) && (y>244) && (x<212) && (y<254)
/d (x>212) && (y>244) && (x<228) && (y<254)
/e (x>188) && (y>269) && (x<212) && (y<279)
/f (x>212) && (y>269) && (x<228) && (y<279)
/g (x>188) && (y>293) && (x<212) && (y<303)
/h (x>212) && (y>293) && (x<228) && (y<303)
/i (x>432) && (y>290) && (x<450) && (y<303)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void MenuJiné( void ) // nastavení myτi, animací
-s--MenuJiné ■ 8 -2 -6 3
MenuJiné
:ok=0
*:ok==0
Nastavení~prodlev
1!
____________:Klik(0,1)________________
/a /b /c
prodleva~kliknutí prodleva~animace :ok=1
a! b!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vykreslení
Okno(213,214,427,266,0);
GrNastavBarvuPozadí(6);
Piτ(215,216,1,Txt(21));
Piτ(215,228,0," ");
Piτ(215,240,1,Txt(22));
Piτ(215,252,0," ");
TlaĒtko(405,250,"OK",0);
GrNastavBarvuPop²edí(14);
GrNastavPozici(215,228);GrPiτL¼íslo(kon[38],-1);
GrNastavPozici(215,252);GrPiτL¼íslo(kon[39],-1);
a ;naƒtení prodlevy myτi
GrNastavPozici(216,229);
Gr¼tiI¼íslo("",i,3,0,224);
if (i>50) kon[38]=i;
b ;naƒtení prodlevy animace
GrNastavPozici(216,253);
Gr¼tiI¼íslo("",i,2,0,224);
kon[39]=abs(i);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/a (x>215) && (y>228) && (x<239) && (y<238)
/b (x>215) && (y>252) && (x<231) && (y<262)
/c (x>405) && (y>250) && (x<423) && (y<263)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
int Hláτka(int typ, string text) // informaƒní/varovné/dotazovací okno
-s--Hláτka ■ 33 -2 -1 3
Hláτka
1!
_________________│__________________
____typ~ikony?____ text _tlaƒítka_ ƒekání~na~volbu
\0 \1 \2 t! /:typ==2 / *:1
informace varování dotaz ano/ne ok :Klik(0,1)
2! 3! 4! a! b! stlaƒeno?
v!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vykreslení pat²iƒn╪ velkého okna
i=StrVelikost(text)*Grµí²kaZnaku+1;
Okno((592-i)/2,215,(688+i)/2,265,0);
2 ;ikonka informace
GrKresliP²edm╪t(58,1,(592-i)/2+3,218);
3 ;ikonka varování
GrKresliP²edm╪t(73,1,(592-i)/2+3,218);
4 ;ikonka dotaz
GrKresliP²edm╪t(88,1,(592-i)/2+3,218);
t ;text hláτky
Piτ((592-i)/2+46,227,1,text);
v ;stlaƒeno tlaƒítko?
if (typ==2)
{
if (((x>(688+i)/2-53) && (y>249) && (x<(688+i)/2-26) && (y<262)) ||
(k==KlEnter)) return(1);
if (((x>(688+i)/2-22) && (y>249) && (x<(688+i)/2-3) && (y<262)) ||
(k==KlEsc)) return(0);
} else
if (((x>(688+i)/2-22) && (y>249) && (x<(688+i)/2-3) && (y<262)) ||
(k==KlEnter)) return(-1);
a ;tlaĒtka ANO, NE
TlaĒtko((688+i)/2-53,249,"ANO",0);
TlaĒtko((688+i)/2-22,249,"NE",0);
b ;tlaĒtko OK
TlaĒtko((688+i)/2-22,249,"OK",0);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
\0 typ ?? case 0:
\1 case 1:
\2 case 2:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
string Otev²ít(string ext) // otev²e soubor s p²iponou ext
-s--Otev²ít ■ 10 -2 2 3
Otev²ít
1!
Nekoneƒn∞~cyklus
*:1
vykreslení~souborà
2!
___________________________:Klik(0,0)___________________________
/:tleve==1 /:k==KlEnter /:k==KlNahoru /:k==KlDolà /:k==KlEsc
│ 'ano │ │ konec
│ │ │ :return("")
/a │ │
zm╪na~posun ___nahoru__ │
:y=(y-22)/GrV∞τkaZnaku /:posun>0 /:misto>0 │
____volba?____ kurzor posun │
/:y==posun /:(y<44)&&(y<m) :posun--! :posun=0! │
"ano ne :misto--! │
:Inicializace() :posun=y │
:Obnovµachovnici() ____________dolà___________
:return(obsah[misto+posun]) /:(posun<44)&&(posun<m-1) /:misto<m-45
kurzor posun
:posun++! :posun=44!
:misto++!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;naƒtení souborà do pole
Adresá²NastavAktuální("*\\");
adresar=SouborAbsolutníCesta(adresar);
if (adresar[StrVelikost(adresar)-1]!='\\') adresar+='\\';
PoloºkaAdresá²eNajdiPrvní
(adresar+"*."+ext,SouborAtributSkryt∞|SouborAtributAdresá²,pa);
m=0;
while ((! DOSChyba()) && (m<512))
{
obsah[m++]=pa.Jméno;
PoloºkaAdresá²eNajdiDalτí(pa);
}
if (m==0)
{
Hláτka(1,Txt(6));
return("");
}
for (i=0; i<m-1; i++)
for (ii=i+1; ii<m; ii++)
if (obsah[ii]<obsah[i])
{
str=obsah[ii];
obsah[ii]=obsah[i];
obsah[i]=str;
}
misto=0;posun=0;
2 ;vykreslení
Okno(270,20,370,474,0);
for (z=0; (z<45) && (z<m); z++)
{
GrNastavBarvuPozadí(kon[18]);
Piτ(271,21+z*GrV∞τkaZnaku,posun!=z,obsah[misto+z]);
}
if (ext=="POS")
{
for (y=2; y<=9; y++)
for (x=2; x<=9; x++) p[x][y]=0;
txt=SouborOtev²i("*\\"+obsah[misto+posun],SouborP²ístup¼tení|SouborP²ístupTextov∞);
for (i=0; i<=5; i++)
{
pgn[i]="";
do zn=Soubor¼tiZnak(txt); while (zn!='"');
do {
zn=Soubor¼tiZnak(txt);
if (zn!='"') pgn[i]=pgn[i]+zn;
} while (zn!='"');
}
z=0;
while (SouborKonec(txt)==0)
{
px=Soubor¼tiZnak(txt);
if ((z%2!=0) && (px!=' ') && (px!=';') && (px!=':'))
{
o=1;
switch (px)
{
case 'J': o=2;break;
case 'S': o=3;break;
case 'V': o=4;break;
case 'D': o=5;break;
case 'K': o=6;break;
}
if (o!=1) px=Soubor¼tiZnak(txt);
o=o*z;
py=Soubor¼tiZnak(txt);
p[px-95][58-py]=o;
}
if (px==':')
if (z==0) z=1; else z=-1;
if (px==';') z=2;
}
SouborZav²i(txt);
s=p;
Okno(390,20,481,111,1);
for (y=0; y<=7; y++)
for (x=0; x<=7; x++)
{
if ((x+y)%2==0)
GrKresliP²edm╪t(148,1,392+x*11,22+y*11); else
GrKresliP²edm╪t(149,1,392+x*11,22+y*11);
if (p[x+2][y+2]!=0)
if (p[x+2][y+2]<0)
GrKresliP²edm╪t(141+p[x+2][y+2]*-1,1,392+x*11,22+y*11); else
GrKresliP²edm╪t(135+p[x+2][y+2],1,392+x*11,22+y*11);
}
}
x P²epniNaText();
for (i=0; i<=5; i++) TxtPiτⁿet╪zec(pgn[i]+"\n");
¼ekejNaKlávesu();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/a (x>271) && (y>21) && (x<369) && (y<468)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Uloºit(string ext) // uloºí zadan∞ soubor
-s--Uloºit ■ 4 -2 -28 3
Uloºit
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
Okno(213,232,427,248,0);
GrNastavPozici(216,234);
Gr¼tiSⁿet╪zec("[soubor."+ext+"]: ",str,12,0,14);
if (str=="") Hláτka(1,"Nic nezadáno."); else
{
str="*\\"+str;
if (SouborExistuje(str)!=0) SouborSmaº(str);
txt=SouborOtev²i(str,SouborP²ístupZápis|SouborP²ístupTextov∞);
SouborPiτⁿet╪zec(txt,"[ White \""+pgn[0]+"\" ]\n");
SouborPiτⁿet╪zec(txt,"[ Black \""+pgn[1]+"\" ]\n");
SouborPiτⁿet╪zec(txt,"[ Site \""+pgn[2]+"\" ]\n");
SouborPiτⁿet╪zec(txt,"[ Date \""+pgn[3]+"\" ]\n");
if (ext!="PGN")
{
SouborPiτⁿet╪zec(txt,"[ Check \""+pgn[4]+"\" ]\n");
SouborPiτⁿet╪zec(txt,"[ Changes \""+pgn[5]+"\" ]\n");
}
if (ext=="PGN")
{
for (i=0; i<=delka; i++)
{
if (partiar[i].s<2)
{
str="";
switch (partiar[i].k)
{
case 2: str=str+"J";break;
case 3: str=str+"S";break;
case 4: str=str+"V";break;
case 5: str=str+"D";break;
case 6: str=str+"K";break;
}
px=partiar[i].x1+95;
py=58-partiar[i].y1;
str=str+px+py;
if (partiar[i].z==0) str=str+"-"; else str=str+"x";
px=partiar[i].x2+95;
py=58-partiar[i].y2;
str=str+px+py;
if (partiar[i].p!=0)
switch (abs(partiar[i].p))
{
case 2: str=str+"=J";break;
case 3: str=str+"=S";break;
case 4: str=str+"=V";break;
case 5: str=str+"=D";break;
}
if ((kon[6]>0) && (partiar[i].k==6) && (abs(partiar[i].x1-partiar[i].x2)==2))
if (partiar[i].x1<partiar[i].x2) str="0-0"; else str="0-0-0";
if (partiar[i].s==1) str=str+'+';
} else
{
if (partiar[i].s==2)
{
if (i%2==0) str="0:1"; else str="1:0";
} else str="1/2";
}
if (i%2==0)
{
if (partiar[i].s<2)
{
SouborPiτL¼íslo(txt,(i+1)/2+1,-1);
SouborPiτZnak(txt,'.');
}
SouborPiτⁿet╪zec(txt,str+" ");
} else SouborPiτⁿet╪zec(txt,str+" ");
}
} else
{
for (z=1; z<=4; z++)
{
switch (z)
{
case 1: SouborPiτⁿet╪zec(txt,"Bíl∞: ");break;
case 3:
SouborPiτZnak(txt,';');
SouborPiτNov∞ⁿádek(txt);
SouborPiτⁿet╪zec(txt,"¼ern∞: ");
break;
}
for (y=2; y<=9; y++)
for (x=2; x<=9; x++)
{
px=x+95;
py=58-y;
str=""+px+py+" ";
if (((z==1) && (s[x][y]==1)) || ((z==3) && (s[x][y]==-1)))
SouborPiτⁿet╪zec(txt,str);
if (((z==2) && (s[x][y]>1)) || ((z==4) && (s[x][y]<-1)))
{
switch (abs(s[x][y]))
{
case 2: str="J"+str;break;
case 3: str="S"+str;break;
case 4: str="V"+str;break;
case 5: str="D"+str;break;
case 6: str="K"+str;break;
}
SouborPiτⁿet╪zec(txt,str);
}
}
}
}
SouborZav²i(txt);
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void ¼istiµachovnici( void ) // vyprázdní τachovnici a nastaví její okraje
-s--¼istiµachovnici ■ 2 -2 -24 3
¼istiµachovnici
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;ƒiτtení τachovnice a definice okrajà
for (y=0; y<=11; y++)
for (x=0; x<=11; x++)
if ((x==0)||(y==0)||(x==1)||(y==1)||(x==10)||(y==10)||(x==11)||(x==12))
s[x][y]=9; else s[x][y]=0;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Inicializace( void ) // deklarace prom╪nn∞ch
-s--Inicializace ■ 2 -2 -25 3
Inicializace
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
¼istiµachovnici();
// vkládání figurek
for (y=8; y<=9; y++)
for (x=2; x<=9; x++)
{
if (y==8) // p²ední linie (p╪τci)
s[x][y]=1; else // zadní linie (v╪º╪,jezdci,st²elci,dáma,král)
{
switch (x)
{
case 2: s[x][y]=4;break;
case 3: s[x][y]=2;break;
case 4: s[x][y]=3;break;
case 5: s[x][y]=5;break;
case 6: s[x][y]=6;break;
case 7: s[x][y]=3;break;
case 8: s[x][y]=2;break;
case 9: s[x][y]=4;
}
}
s[x][11-y]=s[x][y]*-1;
}
// nadeklarování základních parametrà
n=1; // zaƒíná bíl∞
delka=-1; // partiá² je zatím prázdn∞
pozice=-1;
for (i=0; i<=3; i++) rosada[i]=0; // uvoln╪ní práva roτády
for (ii=0; ii<=1; ii++)
for (i=0; i<=15; i++) zajate[ii][i]=0;
ox=-1;
matpat=0;
smaz=1;
count=0;
cas_b.Hodiny=0;cas_b.Minuty=0;cas_b.Sekundy=0;cas_b.Setiny=0;
cas_c=cas_b;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NabídkaPartie( void ) // nabídka práce s partií, uonƒení programu
-s--NabídkaPartie ■ 2 -2 -3 3
NabídkaPartie
a!
___________________________menu~partie___________________________
\A \1 \2 \3
opravdu? │ ukládání KONEC
/:Hláτka(2,Txt(53))==1 │ _________zápis__________ :konec=1!
:Inicializace() │ /:(mod==1)&&(delka>-1) /:mod==0
g! │ :Uloºit("PGN") :Uloºit("POS")
│
z!
________ƒtení_________
/:(mod==1) /
partie pozice
:str=Otev²ít("PGN"); :str=Otev²ít("POS");
/x / /:str==""
│ obnovení~starého obnovení
p! o! o!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a TlaĒtko(2,2,vyber[0][0].nazev,1);
p ;naƒtení partie
Inicializace();
b=1;c=1; // pro nov╪ naƒtenou partii budou oba hráƒi lidé
txt=SouborOtev²i("*\\"+str,SouborP²ístup¼tení|SouborP²ístupTextov∞);
for (i=0; i<=3; i++)
{
pgn[i]="";
do zn=Soubor¼tiZnak(txt); while (zn!='"');
do {
zn=Soubor¼tiZnak(txt);
if (zn!='"') pgn[i]=pgn[i]+zn;
} while (zn!='"');
}
for (i=1; i<=3; i++) Soubor¼tiZnak(txt);
zn=Soubor¼tiZnak(txt);
while (SouborKonec(txt)==0)
{
if (zn==':')
{
delka++;
partiar[delka].s=2;break;
} else
if (zn=='/')
{
delka++;
partiar[delka].s=3;break;
} else
{
if (n==1)
{
while (zn!='.') zn=Soubor¼tiZnak(txt);
zn=Soubor¼tiZnak(txt);
}
if (zn=='0')
{
Soubor¼tiZnak(txt);Soubor¼tiZnak(txt);
zn=Soubor¼tiZnak(txt);
v[1].nejlepsi.x1=6;
v[1].nejlepsi.y1=9;v[1].nejlepsi.y2=9;
if (zn=='-')
{
v[1].nejlepsi.x2=4;
Soubor¼tiZnak(txt);
} else
{
v[1].nejlepsi.x2=8;
SouborNastavPozici(txt,SouborPozice(txt)-1,0);
}
} else
if (zn=='-')
{
Soubor¼tiZnak(txt);
zn=Soubor¼tiZnak(txt);
v[1].nejlepsi.x1=6;
v[1].nejlepsi.y1=2;v[1].nejlepsi.y2=2;
if (zn=='-')
{
v[1].nejlepsi.x2=4;
Soubor¼tiZnak(txt);
} else
{
v[1].nejlepsi.x2=8;
SouborNastavPozici(txt,SouborPozice(txt)-1,0);
}
} else
{
if ((zn=='J') || (zn=='S') || (zn=='V') || (zn=='D') || (zn=='K'))
zn=Soubor¼tiZnak(txt);
v[1].nejlepsi.x1=zn-95;
v[1].nejlepsi.y1=58-Soubor¼tiZnak(txt);
Soubor¼tiZnak(txt);
v[1].nejlepsi.x2=Soubor¼tiZnak(txt)-95;
v[1].nejlepsi.y2=58-Soubor¼tiZnak(txt);
}
zn=Soubor¼tiZnak(txt);
if (zn=='=')
{
zn=Soubor¼tiZnak(txt);
switch (zn)
{
case 'J': v[1].nejlepsi.p=2*n;break;
case 'S': v[1].nejlepsi.p=3*n;break;
case 'V': v[1].nejlepsi.p=4*n;break;
case 'D': v[1].nejlepsi.p=5*n;break;
}
} else
{
if (zn=='+') Soubor¼tiZnak(txt);
v[1].nejlepsi.p=0;
}
x1=v[1].nejlepsi.x1;
y1=v[1].nejlepsi.y1;
x2=v[1].nejlepsi.x2;
y2=v[1].nejlepsi.y2;
Táhni();
}
zn=Soubor¼tiZnak(txt);
if (zn=='+')
{ Soubor¼tiZnak(txt);zn=Soubor¼tiZnak(txt); }
if ((zn=='0') || (zn=='1')) zn=Soubor¼tiZnak(txt);
}
SouborZav²i(txt);
z ;zálohování PGN informací
for (i=0; i<=5; i++) pgn[i+6]=pgn[i];
o ;obnovení PGN informací
for (i=6; i<=11; i++) pgn[i-6]=pgn[i];
c ¼aruj(¼tverec);
g ;p²emazání PGN informací
for (i=0; i<=5; i++) pgn[i]="";
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/x str!=""
\A Nabídka(2,19,0,0) ?? case 0:
\1 case 1:
\2 case 2:
\3 case 3:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NabídkaVolby( void ) // nabídka sociálních funkcí, editace, tahy
-s--NabídkaVolby ■ 5 -2 -9 3
NabídkaVolby
a!
________________menu~volby_______________
\A \1 \2 \3 \4 \5
zp╪t dop²edu prohodit vzdát remis na~tahu~ƒlov╪k?
/t /t /t /k /k /c
│ │ :pozice=-1 │ │ _hra/edit_
z! v! :delka=-1 e! r! /:mod==1 /
:n=n*-1 │ │
:mod=0! :mod=1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a TlaĒtko(55,2,vyber[0][1].nazev,1);
z ;tah zp╪t
if (pozice>-1)
{
if (partiar[pozice].s<2)
{
h=1;
v[1].posledni=partiar[pozice];
for (i=0; i<=3; i++) v[1].posledni.ros[i]=partiar[pozice].ros[i];
n=n*-1;Vra£Tah();
}
pozice--;
}
v ;vp²ed
if (pozice<delka)
if (partiar[pozice+1].s<2)
{
v[1].nejlepsi=partiar[pozice+1];
x1=partiar[pozice+1].x1;
y1=partiar[pozice+1].y1;
x2=partiar[pozice+1].x2;
y2=partiar[pozice+1].y2;
iv=delka;Táhni();delka=iv;
} else pozice++;
e ;hláτka o rezignaci a za²azení této informace do partiá²e
if (delka>-1)
{
if (n==1) i=0; else i=1;
Hláτka(1,Txt(7+i)+Txt(54));
partiar[++delka].s=2;pozice++;
}
r ;nabídka remízy oponujícímu hráƒi (ƒlov╪ku/poƒítaƒi)
if (delka>-1)
if (((n==1) && (c==1)) || ((n==-1) && (b==1)))
{
if (Hláτka(2,Txt(55))==1)
{
partiar[++delka].s=3;pozice++;
}
} else
{
ja=n*-1;OceσPozici(0);
if (v[h].posledni.h<=0)
{
partiar[++delka].s=3;pozice++;
Hláτka(0,Txt(56));
} else Hláτka(0,Txt(57));
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/c ((n==1) && (b==1)) || ((n==-1) && (c==1))
/t kon[33]!=2
/k (mod==1) && (partiar[delka].s<2)
\A Nabídka(55,19,0,1) ?? case 0:
\1 case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NabídkaNastavení( void ) // nabídka nastavení uºivatelského rozhraní
-s--NabídkaNastavení ■ 2 -2 64 3
NabídkaNastavení
a!
_______________________________________________menu~nastavení______________________________________________
\A \1 \2 \3 \4 \5 \6 \7 \8
____animace~figur____ │ │ │ :MenuHledání() │ ƒti~cfg │ :MenuJiné()
/:kon[28]==1 / │ │ │ │ :Konfig(1) │
vyp zap │ │ _____poƒ~ƒern∞_____ │ │
:kon[28]=0 :kon[28]=1 │ │ /:kon[32]==0 / uloº~cfg ƒti~def
"v "z │ │ vyp zap :Konfig(0) :Konfig(2)
:Hláτka(0,Txt(12)) :Hláτka(0,Txt(13)); │ │ :kon[32]=1 :kon[32]=0
____p²etah____ │ │ :Hláτka(0,Txt(8)+Txt(15));
/:kon[29]==1 / │ │
vyp zap │ :Hláτka(0,Txt(8)+Txt(14))
:kon[29]=0 :kon[29]=1 │
'v 'z │
______poƒ~bíl∞_____
/:kon[31]==0 /
vyp zap
:kon[31]=1 :kon[31]=0
│ :Hláτka(0,Txt(7)+Txt(15));
│
:Hláτka(0,Txt(7)+Txt(14))
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a TlaĒtko(100,2,vyber[0][2].nazev,1);
v Viditeln∞();
z ;ƒelem vzad
VlevoVbok(); VlevoVbok();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
\A Nabídka(100,19,0,2) ?? case 0:
\1 case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
\6 case 6:
\7 case 7:
\8 case 8:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NaƒtiJazyk( void ) // naƒte jazykov∞ balíƒek (CZ+ENG) z LNG souboru
-s--NaƒtiJazyk ■ 2 -2 -26 3
NaƒtiJazyk
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;naƒtení jazykového balíƒku
txt=SouborOtev²i("*\\partie.lng",SouborP²ístup¼tení|SouborP²ístupTextov∞);
Soubor¼tiNov∞ⁿádek(txt);
for (y=0; y<=1; y++)
{
Soubor¼tiI¼íslo(txt,z);Soubor¼tiNov∞ⁿádek(txt);
for (i=0; i<=z; i++)
{
Soubor¼tiI¼íslo(txt,vyber[y][i].delka);Soubor¼tiNov∞ⁿádek(txt);
for (ii=0; ii<=vyber[y][i].delka+1; ii++)
for (iii=0; iii<=1; iii++)
{
Soubor¼tiSⁿet╪zec(txt,str);
StrSmaº(str,StrVelikost(str)-1,1);
if (ii==0)
{
if (iii==kon[40]) vyber[y][i].nazev=str;
} else
if (iii==kon[40]) vyber[y][i].nabidka[ii-1]=str;
}
}
}
SouborZav²i(txt);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NabídkaZobrazení( void ) // nabídka pro grafick∞ interface
-s--NabídkaZobrazení ■ 2 -2 -11 3
NabídkaZobrazení
a!
_________________menu~zobrazení________________
\A \1 \2 \3 \4 \5 \6 \7
3D │ Partiá² │ figurky │ prost²edí.. │
A! │ :i=2!p │ :i=4!p │ :MenuProst²edí() │
│ │ │ │
Fisherovky ocen╪né~uzly PGN~info _______jazyk________
:i=1!p :i=3!p :i=5!p ____zm╪na_____ naƒtení
/:kon[40]==0 / :NaƒtiJazyk()
:kon[40]=1 :kon[40]=0
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a TlaĒtko(177,2,vyber[0][3].nazev,1);
p ;prohodní konfiguraƒní hodnoty (0,1)
if (kon[i+20]==1)
{
kon[i+20]=0;
str=Txt(23);
} else
{
kon[i+20]=1;
str=Txt(24);
}
Hláτka(0,str+vyber[0][3].nabidka[i]);
d Gr¼tiZnak("?",Znak,1,0x07); /* edit ano, ƒerná/sv.τedá*/
b GrNastavBarvuPop²edí /* Partie */
A ;spustí externí program 3D τachovnice
P²epniNaText();
if (SouborExistuje("*\\partie.kom")!=0) SouborSmaº("*\\partie.kom");
kom=SouborOtev²i("*\\partie.kom",SouborP²ístupZápis|SouborP²ístupBinární);
SouborPiτⁿet╪zec(kom,"[ PARTIE communication file (for subprograms) ]");
SouborPiτNov∞ⁿádek(kom);
for (y=2; y<=9; y++)
for (x=2; x<=9; x++) SouborPiτL¼íslo(kom,s[x][y],2);
SouborZav²i(kom);
¼ekej(1000);str="*\\partie3d.exe";DOSProve╘(str);
kom=SouborOtev²i("*\\partie.kom",SouborP²ístup¼tení|SouborP²ístupBinární);
Soubor¼tiNov∞ⁿádek(kom);Soubor¼tiL¼íslo(kom,l);SouborZav²i(kom);
cas.Hodiny=l/3600;l-=l/3600*3600;cas.Minuty=l/60;l-=l/60*60;cas.Sekundy=l;
if (n==1)
¼asPosuσ(cas_b,cas.Hodiny,cas.Minuty,cas.Sekundy,cas.Setiny); else
¼asPosuσ(cas_c,cas.Hodiny,cas.Minuty,cas.Sekundy,cas.Setiny);
GrNastavMód(2);GrNastavPàvodníPaletu();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
\A Nabídka(177,19,0,3) ?? case 0:
\1 case 1:
\2 case 2:
\3 case 3:
\4 case 4:
\5 case 5:
\6 case 6:
\7 case 7:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NabídkaInformace( void ) // nabídka vyvolá informaƒní okna
-s--NabídkaInformace ■ 14 -2 -23 3
NabídkaInformace
menu~informace
a!
menu~informace
\A \1
Vτe O~programu
A! 3!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a TlaĒtko(254,2,vyber[0][4].nazev,1);
3 ;okno s informací
Okno(15,8,626,464,0);
GrNaƒtiBMP(17,10,"*\\partie_L.bmp",0,0,-1,-1,1);
GrNaƒtiBMP(453,193,"*\\partie_K.bmp",0,0,-1,-1,1);
Piτ(206,10,1,"PARTIE V1.01 (public domain)");
Piτ(206,34,1,"Program, design: Libor Tinka (vlevo)");
Piτ(206,46,1,"Grafika: Jakub Grós (vpravo)");
Piτ(206,70,1,"Tuto verzi programu (1.00) je moºné voln╪ τí²it,");
Piτ(206,82,1,"ne vτak za úƒelem zisku.");
Piτ(206,94,1,"Firma SGP tedy màºe tento program publikovat.");
Piτ(206,106,1,"Program slouºí k uºívání a demonstraƒním úƒelàm,");
Piτ(206,118,1,"jakékoliv pozm╪σování zdrojového kódu nebo pouºívání");
Piτ(206,130,1,"urƒit∞ch blokà programu samostatn╪ je moºné pouze");
Piτ(206,142,1,"po dohod╪ s programátorem hry.");
Piτ(206,154,1,"Pozm╪σování grafiky hry prost²ednictvím k tomu");
Piτ(206,166,1,"urƒen∞mi nástroji, nebo pouºívání n╪kter∞ch");
Piτ(206,178,1,"grafick∞ch ƒástí programu je moºné pouze");
Piτ(206,190,1,"po dohod╪ s grafikem hry.");
Piτ(206,214,1,"Kontakt s autory:");
Piτ(206,238,1,"Libor Tinka");
Piτ(206,250,1,"Kurτova 6");
Piτ(206,262,1,"Brno");
Piτ(206,274,1,"63500");
Piτ(206,286,1,"ltinka@gvid.cz");
Piτ(206,310,1,"Jakub Grós");
Piτ(206,322,1,"Sokolovská 277");
Piτ(206,334,1,"Uherské Hradiτt╪");
Piτ(206,346,1,"68601");
Piτ(206,358,1,"Jakub Grós");
Piτ(206,370,1,"jagous2@seznam.cz");
Piτ(57,410,1,"http://partie.webzdarma.cz");
Klik(0,1);
GrNastavPàvodníPaletu();
A ;zobrazí nápov╪dní okno
ii=0;
do {
txt=SouborOtev²i("*\\partie.hlp",SouborP²ístup¼tení|SouborP²ístupTextov∞);
for (i=1; i<=ii; i++) Soubor¼tiNov∞ⁿádek(txt);
Okno(0,68,639,413,0);
for (i=0; i<=30; i++)
{
Soubor¼tiSⁿet╪zec(txt,str);StrSmaº(str,StrVelikost(str)-1,1);
Piτ(2,70+i*11,1,str);
}
SouborZav²i(txt);
Klik(0,1);
if ((k==KlNahoru) && (ii>0)) ii--;
if ((k==KlDolà) && (ii<105)) ii++;
if ((k==KlPageUp) && (ii-15>0)) ii-=15;
if ((k==KlPageDown) && (ii<90)) ii+=15;
} while (k!=KlEsc);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
\A Nabídka(254,19,0,4) ?? case 0:
\1 case 1:
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void RozvinovacíNabídky( void ) // veτkeré volby z horního panelu
-s--RozvinovacíNabídky ■ 5 -2 7 3
RozvinovacíNabídky
:smaz=1
___________________________Ràzné~oblasti~kliknutí___________________________
/a /b /c /d /e
:NabídkaPartie() :NabídkaVolby() :NabídkaNastavení() :NabídkaZobrazení() :NabídkaInformace()
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/a (x>2) && (y>2) && (x<53) && (y<15)
/b (x>55) && (y>2) && (x<97) && (y<15)
/c (x>100) && (y>2) && (x<175) && (y<15)
/d (x>177) && (y>2) && (x<252) && (y<15)
/e (x>254) && (y>2) && (x<329) && (y<15)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void main( void ) // ░░▒▒▓▓██ PARTIE V1.01 (public domain) ██▓▓▒▒░░
-s--Partie ■ 14 -2 27 3
_______________Partie______________
Inicializace │ Konec
1! │ :MyτKonecObsluhy()
:GrNastavMód(2)! │
:GrNastavV∞stup(2)! │
:GrNastavText(1)! │
Spuτt╪ní~intra │
i! Uºivatelské~prost²edí
:GrNastavPàvodníPaletu() Hlavní~cyklus
:MyτZaƒátekObsluhy() *:konec==0
:GrNastavBarvuPozadí(0)! Vykreslení
:GrSmaºOkno()! :b=kon[31]
:AnimNastavGrV∞stup(2)! :c=kon[32]
2!
__________________________Mód?__________________________
/:mod==1 /
herní │
:tah="~"! │
______________Je~na~tahu~ƒlov╪k?______________ │
/x / │
Ne~-~v∞poƒet~tahu Ano~-~práce~s~myτí │
vyhledávání taºení :Klik(1,0) │
:VyhledejTah(kon[34],1) /q ¼ekání~na~klik │
animace │ │
x! │ │
:Táhni() __________Ràzné~oblasti~kliknutí_________ │
x! /a /b / │
/:kon[28]==1 τachovnice "horní~panel pozadí │
'animace :x1=(x-22)/39+2 v! /:tprave==1 │
:y1=(y-128)/28+2 :RozvinovacíNabídky(); pozn. │
__typ~pohybu?__ :Notes("pozadí"); │
/:kon[29]==1 / │
│ tah/oznaƒení │
│ /:ox==-1 / │
│ znaƒení tah │
│ :ox=x1 :x2=x1 │
│ :oy=y1 :y2=y1 │
│ :x1=ox │
│ :y1=oy │
│ :ox=-1 │
│ :oy=n │
│ t! │
___tah/info___ Animovat? │
/:tleve==1 /:tprave==1 /:(oy~Není~n)&&(kon[28]==1) │
_klik~na~kámen?_ :Popis() "animace │
/:s[x1][y1]==0 / :x=(x1-2)*39+22 │
Ne Ano :y=(y1-2)*28+128 │
4! 'Smazání~políƒka │
:x=(x1-2)*39+22 u! │
:y=(y1-2)*28+128 │
:MyτNastavPozici(x,y)! │
_____________________..._____________________ │
"Smazání~políƒka ____________Animace~kamene____________ │
/:(x1+y1)%2==0 / P²esun~kamene Dotaºení │
Bílé ¼erné :StopkyNuluj()! :FishStop() │
w! b! :StopkyStart()! 5! │
*:gMyτUdálost.Tlaƒítka :x2=(x-3)/39+2! │
│ :y2=(y-114)/28+2! │
a! t! │
editaƒní
____________________:Klik(0,0)_____________________
/a /b /c /d
_____│______ 'horní~panel PGN~info dneτní~datum
Editace Test~na~zm╪ny c! d!
v! /:ok==0
:ok=1! zm╪na
:x1=(x-22)/39+2! z!
:y1=(y-128)/28+2!
_editace/info
/:tleve==1 /:tprave==1
v∞b╪r~pro~pole :Popis()
s!
______________________volby______________________
/:i==0 /:(i>1)&&(i<8) /:(i>8)&&(i<15) /:i==16
│ │ │ │
:s[x1][y1]=0! :s[x1][y1]=i-1! :s[x1][y1]=8-i! :¼istiµachovnici()
"v 'v 'v 'v
:delka=-1
:ok=0
r!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
a ;animace kamene
Myτ¼tiUdálost(gMyτUdálost);
x=gMyτUdálost.X;
y=gMyτUdálost.Y;
AnimP²edm╪tAnimuj(kamen,x,y,0);
z ;smazání partiá²e a seznamu zajat∞ch figur
delka=-1;
for (ii=0; ii<=1; ii++)
for (i=0; i<=15; i++) zajate[ii][i]=0;
t ;test tahu
if (TestTahu(x1,y1,x2,y2)==1) n=n*-1;
O GrNaƒtiBMP /* naƒte obrázek */
X ¼arujNaPozici /* X:(p²edm╪t,x,y)! 1-150, 1-15, 1-10 */
1 ;základní inicializace
mod=1;
EscPlus();
Inicializace();
for (i=0; i<=5; i++) pgn[i]="";
Konfig(1);
// naƒtení jazykového balíƒku
NaƒtiJazyk();
// inicializace centralizaƒní tabulky
ct=SouborOtev²i("*\\partie.ct",SouborP²ístup¼tení|SouborP²ístupBinární);
for (y=0; y<=3; y++)
for (x=0; x<=3; x++)
{
i=Soubor¼tiZnak(ct);
ctab[x][y]=i*placek;
ctab[7-x][y]=i*placek;
ctab[x][7-y]=i*placek;
ctab[7-x][7-y]=i*placek;
}
SouborZav²i(ct);
2 ;vykreslení prost²edí
if (mod==1)
{
VyhledejTah(1,0);
if (v[1].nejlepsi.x1==-1)
{
matpat=1;
if (partiar[delka].s<2)
{
µach();
delka++;
if ((bs==1)||(cs==1)) partiar[delka].s=2; else partiar[delka].s=3;
}
} else matpat=0;
}
if (smaz==1)
{
smaz=0;
GrNastavBarvuPozadí(kon[9]);
GrKresliVypln╪n∞Obdélník(0,18,639,479);
}
// menu
Okno(0,0,639,17,0);
TlaĒtko(2,2,vyber[0][0].nazev,0);
TlaĒtko(55,2,vyber[0][1].nazev,0);
TlaĒtko(100,2,vyber[0][2].nazev,0);
TlaĒtko(177,2,vyber[0][3].nazev,0);
TlaĒtko(254,2,vyber[0][4].nazev,0);
GrNastavBarvuPop²edí(4);
GrNastavPozici(420,3);GrPiτⁿet╪zec("by Libor Tinka & Jakub Grós");
// PGN informace
if (kon[25]==1)
{
Okno(30,22,296,122,0);
for (i=0; i<=5; i++)
{
Okno(33,25+(GrV∞τkaZnaku+6)*i,37+Grµí²kaZnaku*32,
25+(GrV∞τkaZnaku+6)*i+(GrV∞τkaZnaku+4),1);
GrNastavBarvuPop²edí(8);
switch (i)
{
case 0: str=Txt(7);break;
case 1: str=Txt(8);break;
case 2: str=Txt(9);break;
case 3: str=Txt(10);break;
case 4: str="-";break;
case 5: str="-";break;
}
GrNastavPozici
(163-StrVelikost(str)*Grµí²kaZnaku/2,27+(GrV∞τkaZnaku+6)*i);
GrPiτⁿet╪zec(str);
Piτ(34,26+(GrV∞τkaZnaku+6)*i,1,pgn[i]);
}
if (mod==0) TlaĒtko(299,73,Txt(11),0);
}
// τachovnice
Okno(20,126,335,354,1);
for (y=0; y<=7; y++)
for (x=0; x<=7; x++)
{
// vykreslení pole τachovnice
if ((x+y)%2==0)
GrKresliP²edm╪t(kon[2]*15+14,0,22+x*39,128+y*28); else
GrKresliP²edm╪t((kon[3]+1)*15,0,22+x*39,128+y*28);
// p²ípadné vykreslení figurky
if (s[x+2][y+2]>0)
GrKresliP²edm╪t(kon[0]*15+s[x+2][y+2],1,22+x*39,128+y*28); else
if (s[x+2][y+2]<0)
GrKresliP²edm╪t(kon[1]*15+s[x+2][y+2]*-1+6,1,22+x*39,128+y*28);
}
// znaƒení pole
if ((kon[29]==0) && (ox!=-1))
GrKresliP²edm╪t(103,1,(ox-2)*39+22,(oy-2)*28+128);
// sou²adnice
for (i=0; i<=7; i++)
{
GrNastavPozici(7,140+28*i);GrNastavBarvuPop²edí(8);GrPiτZnak(56-i);
GrNastavPozici(5,138+28*i);GrNastavBarvuPop²edí(7);GrPiτZnak(56-i);
GrNastavPozici(38+39*i,361);GrNastavBarvuPop²edí(8);GrPiτZnak(97+i);
GrNastavPozici(36+39*i,359);GrNastavBarvuPop²edí(7);GrPiτZnak(97+i);
}
// Fisherovy hodiny
if (kon[21]==1)
{
Okno(59,381,296,471,1);
GrKresliP²edm╪ty(1001+kon[4]*45,1,61,383,6,3);
if (kon[5]==0)
{
GrKresliP²edm╪ty(1013,1,61,383,3,3);
GrKresliP²edm╪ty(1013,1,178,383,3,3);
}
cas_f=cas_b;Fisher(119);
cas_f=cas_c;Fisher(236);
}
// partiá²
if (kon[22]==1)
{
Okno(452,35,475+Grµí²kaZnaku*19+4,41+GrV∞τkaZnaku*38,0);
ii=0;
for (i=pozice/76*76; (i<=pozice/76*76+76)&&(i<=delka); i++)
{
if (partiar[i].s<2)
{
str="";
px=partiar[i].x1+95;
if (kon[6]>0)
switch (partiar[i].k)
{
case 1:
if ((kon[6]==2) && (partiar[i].z!=0)) str=str+px;
break;
case 2: str=str+"J";break;
case 3: str=str+"S";break;
case 4: str=str+"V";break;
case 5: str=str+"D";break;
case 6: str=str+"K";break;
}
if ((kon[6]<2) || (partiar[i].dest==1))
{
py=58-partiar[i].y1;
str=str+px+py;
}
if (kon[6]<2)
{
if (kon[7]==1)
{
if (partiar[i].z==0) str=str+"-"; else str=str+"x";
} else str=str+" ";
} else
{
if (partiar[i].z!=0) str=str+"x"; else
if (partiar[i].dest==1) str=str+"-";
}
px=partiar[i].x2+95;
py=58-partiar[i].y2;
str=str+px+py;
if (partiar[i].p!=0)
switch (abs(partiar[i].p))
{
case 2: str=str+"=J";break;
case 3: str=str+"=S";break;
case 4: str=str+"=V";break;
case 5: str=str+"=D";break;
}
if ((kon[6]>0) && (partiar[i].k==6) && (abs(partiar[i].x1-partiar[i].x2)==2))
if (partiar[i].x1<partiar[i].x2) str="0-0"; else str="0-0-0";
if (partiar[i].s!=0) str=str+'+';
} else
{
if (partiar[i].s==2)
{
if (i%2==0) str="0:1"; else str="1:0";
} else str="1/2";
}
if (i==pozice) GrNastavBarvuPozadí(kon[18]); else GrNastavBarvuPozadí(kon[12]);
if (i%2==0)
{
GrNastavBarvuPop²edí(6);
GrNastavPozici(454,37+(i+1)/2*GrV∞τkaZnaku-i/76*380);
GrPiτL¼íslo((i+1)/2+1,-1);
Piτ(484,37+(i+1)/2*GrV∞τkaZnaku-i/76*380,0,str);
} else
{
Piτ(484+(ii+2)*Grµí²kaZnaku,37+((i+1)/2-1)*GrV∞τkaZnaku-i/76*380,0,str);
}
ii=StrVelikost(str);
}
}
// koncové uzly
if (kon[23]==1) LCD(318,435,count,8,kon[8]);
// zajaté figury
if (kon[24]==1)
{
Okno(351,126,432,354,0);
for (ii=0; ii<=1; ii++)
for (i=0; i<=15; i++)
if (zajate[ii][i]!=0)
{
if (zajate[ii][i]>0)
GrKresliP²edm╪t(kon[0]*15+zajate[ii][i],1,353+i%4*13,128+ii*112+i/4*28); else
GrKresliP²edm╪t(kon[1]*15+zajate[ii][i]*-1+6,1,353+i%4*13,128+ii*112+i/4*28);
}
}
S UloºScénu /* S:("soubor")! "c:\\pavel\\soubor.s00" */
m ;vypiτ ⁿet╪zec do grafického okénka
PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré */
GrPiτⁿet╪zec(ⁿet╪zec); /*vypíτe obsah prom╪nné ⁿet╪zec*/
GrNastavBarvy(PàvBarvy); /*nastaví pàvodní barvy */
b GrKresliP²edm╪t((kon[3]+1)*15,0,x,y);
w GrKresliP²edm╪t((kon[2]+1)*15-1,0,x,y);
p GrNastavPozici /* Partie */
K GrKresliP²edm╪ty /* Partie */
4 ;inicializace animovaného objektu
if (s[x1][y1]<0)
kamen=AnimP²edm╪tVytvo²(kon[1]*15+s[x1][y1]*-1+6,1,0,1); else
kamen=AnimP²edm╪tVytvo²(kon[0]*15+s[x1][y1],1,0,1);
5 ;zruτení animovaného p²edm╪tu (kamene)
AnimP²edm╪tZruτ(kamen);
u ;automatická animace kamene
x=x2;
y=y2;
if (s[x][y]<0)
kamen=AnimP²edm╪tVytvo²(kon[1]*15+s[x][y]*-1+6,1,0,1); else
kamen=AnimP²edm╪tVytvo²(kon[0]*15+s[x][y],1,0,1);
x1=(x1-2)*39+22;
y1=(y1-2)*28+128;
x2=(x2-2)*39+22;
y2=(y2-2)*28+128;
f=sqrt(sqr(x1-x2)+sqr(y1-y2))+1;
fx=(x2-x1)/f;
fy=(y2-y1)/f;
for (i=0; i<=f; i++)
{
AnimP²edm╪tAnimuj(kamen,x1+fx*i,y1+fy*i,0);
¼ekej(kon[39]);
}
AnimP²edm╪tZruτ(kamen);
if (s[x][y]<0)
GrKresliP²edm╪t(kon[1]*15+s[x][y]*-1+6,1,x2,y2); else
GrKresliP²edm╪t(kon[0]*15+s[x][y],1,x2,y2);
s ;v∞b╪r z nabídky figur
i=Nabídka(240,102,1,7);
GrNastavBarvuPozadí(kon[9]);
GrKresliVypln╪n∞Obdélník(240,102,409,378);
c ;editace okénka s hlaviƒkou PGN
i=(y-25)/(GrV∞τkaZnaku+6);
if ((i>-1) && (i<4))
{
GrNastavPozici(35,i*(GrV∞τkaZnaku+6)+27);
Grⁿádkov∞Editor(pgn[i],32,1,-1,StrVelikost(pgn[i])+1,224);
}
d ;nastaví aktuální datum do hlaviƒky PGN
SystémovéDatum(datum);
pgn[3]=StrL¼íslo(datum.Den,-1)+". ";
switch (datum.M╪síc)
{
case 1: pgn[3]=pgn[3]+Txt(25);break;
case 2: pgn[3]=pgn[3]+Txt(26);break;
case 3: pgn[3]=pgn[3]+Txt(27);break;
case 4: pgn[3]=pgn[3]+Txt(28);break;
case 5: pgn[3]=pgn[3]+Txt(29);break;
case 6: pgn[3]=pgn[3]+Txt(30);break;
case 7: pgn[3]=pgn[3]+Txt(31);break;
case 8: pgn[3]=pgn[3]+Txt(32);break;
case 9: pgn[3]=pgn[3]+Txt(33);break;
case 10: pgn[3]=pgn[3]+Txt(34);break;
case 11: pgn[3]=pgn[3]+Txt(35);break;
case 12: pgn[3]=pgn[3]+Txt(36);break;
}
pgn[3]=pgn[3]+" "+StrL¼íslo(datum.Rok,-1)+" (";
switch (datum.DenT∞dne)
{
case 0: pgn[3]=pgn[3]+Txt(37);break;
case 1: pgn[3]=pgn[3]+Txt(38);break;
case 2: pgn[3]=pgn[3]+Txt(39);break;
case 3: pgn[3]=pgn[3]+Txt(40);break;
case 4: pgn[3]=pgn[3]+Txt(41);break;
case 5: pgn[3]=pgn[3]+Txt(42);break;
case 6: pgn[3]=pgn[3]+Txt(43);break;
}
pgn[3]=pgn[3]+")";
x ;naƒtení sou²adnic tahu do pomocn∞ch prom╪nn∞ch
x1=v[1].nejlepsi.x1;y1=v[1].nejlepsi.y1;
x2=v[1].nejlepsi.x2;y2=v[1].nejlepsi.y2;
i ;spustí intro (úvodní obrazovka)
GrNaƒtiBMP(0,0,"*\\partie.bmp",0,0,-1,-1,1);
TypSoubor soubor=SouborOtev²i("*\\partie.pal",
SouborP²ístup¼tení|SouborP²ístupBinární);
GrNaƒtiPaletu("*\\partie.pal");
VyprázdniFrontuKláves();
StopkyNuluj();StopkyStart();
do Stopky(cas); while ((BylaStisknutaKlávesa()==0) && (cas.Sekundy<3));
StopkyStop();
VyprázdniFrontuKláves();
SouborZav²i(soubor);
r ;plné nabytí práva roτády
for (i=0; i<=3; i++) rosada[i]=0;
v ;poƒkání, neº uºivatel pustí (levé) tlaƒítko myτi
do Myτ¼tiUdálost(gMyτUdálost); while (gMyτUdálost.Typ!=4);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
#M ;opakuj n-krát sestupn╪ pro prom╪nnou #M:(i,8) (8x) i=7,6..0
DolàDo0
/p PràchodnostP²edm╪tuP²edB() Je 1
/x (matpat==0) && (((n==1) && (b==0)) || ((n==-1) && (c==0))) && (pozice==delka)
/a (x>21) && (y>127) && (x<334) && (y<353)
/b (x>2) && (y>2) && (x<334) && (y<15)
/c (x>20) && (y>22) && (x<286) && (y<122)
/d (x>299) && (y>73) && (x<348) && (y<86)
/q v[1].nejlepsi.x1>-1
\p P²edm╪tP²edB()??
\b Barva¼tverceP²
=SP---------------------------------------------------------------------------
//
// Konec souboru
//////////////////