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 >
Text File  |  2002-09-26  |  124KB  |  3,113 lines

  1. SGPC   5.05 034#000001035  3.08.2002 16:19:34                                    StructNo47  47
  2.  
  3. # include <sgpbalt.h>
  4.  
  5. // globální prom╪nné
  6.  float pesec = 1.0, // hodnoty figur
  7.        jezdec = 3.25,
  8.        strelec = 3.5,
  9.        vez = 5.0,
  10.        dama = 9.0,
  11.        kral = 1000.0,
  12.        pole = 0.0000001,  // hodnota volného políƒka τachovnice pro poziƒní ocen╪ní
  13.        check = 0.001,  // hodnota τachu
  14.        placek = 0.00001;  // hodnota pole pro centralizaci figur
  15.  typedef int RosadaType[4];  // stav roτád
  16.  typedef struct {  // záznam tahu
  17.           double h;  // hodnota tahu
  18.           int x1,y1,x2,y2;  // odkud kam
  19.           int z,k,s,p,  // sebraná figurka, útoƒící figurka, τach, typ p²em╪ny
  20.               dest;  // urƒení poƒáteƒní destinace figurky ve zkrácené notaci
  21.           RosadaType ros;  // zm╪ny roτád
  22.          } TahType;
  23.  typedef int Sachovnice[12][12];  // matrice pro τachovnici s okrajem
  24.  Sachovnice s,p;  // základní a pomocná τachovnice (nap². pro náhled)
  25.  RosadaType rosada;  // stav roτád
  26.  int n,ja,  // hrრna tahu: 1,-1; "obracítko" toho, kdo hraje
  27.   b,c,  // bíl∞,ƒern∞ - ƒlov╪k/poƒítaƒ
  28.   bz,cz,  // záloºní hodnoty pro vyhledávaƒ
  29.   i,ii,iii,iv,m,  // pomocné
  30.   x,y,  //pomocné - i mínusové hodnoty kvàli okrajàm τachovnice
  31.   h,  // aktuální hloubka propoƒítávání
  32.   z,o,  // pomocné
  33.   zajate[2][16],  // zajaté figurky
  34.   konec = 0,  // ukonƒovací prom╪nná
  35.   x1,y1,x2,y2, // pomocné
  36.   tleve,tprave,  // pro myτ
  37.   mod,  // mód programu (Hra/Editor pozic)
  38.   k,  // klávesa
  39.   ox,oy,  // znaƒení p²i táhnutí
  40.   matpat,  // indikace matu/patu
  41.   smaz,  // po²adavek na smazání celé plochy
  42.   posun,misto,  // ...pro pohyb v okn╪ otev²ení souboru
  43.   delka,pozice,  // délka a pozice v partiá²i
  44.   ok,  // indikace správnosti posledního tahu
  45.   bs,cs,  // stav τachu pro bílého (bs) a ƒerného (cs)
  46.   xx,yy,xi,yi; // pomocné
  47.  char* tah;  // tah hráƒe
  48.  int skoc;  // skok protivníkova kamene
  49.  struct {
  50.   int abs;  // hodnota posledního tahu není provizorní (je absolutní)
  51.   TahType nejlepsi,posledni;  // informace o v∞znamn∞ch tazích
  52.   int x,y,z;  // informace o posledním tahu
  53.  } v[11];  // varianta (sled optimálních tahà)
  54.  TahType nejtah;  // záznam nejlepτího tahu
  55.  TahType partiar[1000];  // seznam vτech tahà (max. 1000)
  56.  long count;  // poƒet koncov∞ch uzlà
  57.  float ctab[8][8];  // centralizaƒní tabulka
  58.  TypSoubor ct,  // soubor s centralizaƒní tabulkou
  59.   cfg,  // soubor s konfigurací
  60.   txt,  // textov∞ soubor (PGN,POS,LNG)
  61.   kom;  // komunikaƒní soubor (KOM)
  62.  Typ¼as cas_of,cas_f,cas_o,cas,cas_b,cas_c;  // ƒasové prom╪nné
  63.  float f,fx,fy;  // posun v osách p²i automatické animaci
  64.  char px,py,zn;  // pomocné (nap². sou²adnice u τachovnice)
  65.  string str,obsah[512],adresar;  // pomocné (nap². otevírání souborà)
  66.  TypPoloºkaAdresá²e pa;
  67.  TypAnimP²edm╪t kamen;  // ..pro animaci kamene
  68.  long limit,  // ƒasové omezení hráƒe v sekundách
  69.       l;  // pomocné
  70.  struct {
  71.          int delka;
  72.          string nazev,nabidka[17];
  73.         } vyber[2][9]; // [0][n] - menu, [1][n] - konfigurace
  74.  int kon[41];  // nastavení programu, které je moºné uloºit
  75.  char ch;  // pomocné
  76.  string pgn[12];  // PGN informace
  77.  TypDatum datum;  // datum pro zadání ƒasu do informaƒní hlaviƒky
  78.  struct {
  79.   int R,G,B;
  80.  } paleta[15];  // paleta pro úvodní rozsv╪tlení obrazu
  81.  int R,G,B;  // pomocné poloºky palety
  82.  
  83. /////////////////////
  84. // Pomocné definice
  85. //
  86.  
  87. #define NE      0
  88. #define ANO     1
  89.  
  90. #define ABS(x)  ((x)>0?(x):-(x))
  91.  
  92. #define __CYKLUS(N)   __Cyklus(1,N);__Cyklus(0,N);   //Hlava cyklu
  93. #define __MPVC_ 100   //Maximální poƒet vno²en∞ch cyklà
  94.  
  95. int __Cyklus( int Nov∞, int Poƒet )
  96. //Nov∞ > 0: Otev²ení nového cyklu s N opakováními (vƒetn╪ 0)
  97. //Nov∞ = 0: Dalτí pràchod cyklem
  98. //Nov∞ < 0: P²edƒasné ukonƒení cyklu
  99. { static int I[__MPVC_];
  100.   static int i = -1;
  101.   if( Nov∞ > 0 )
  102.   { if( ++i >= __MPVC_)
  103.     { TxtPiτⁿet╪zec("P²íliτ mnoho vno²en∞ch cyklà");
  104.       while(1) {Tón(1000);};
  105.     }else I[i]=Poƒet;
  106.   }else if( Nov∞ == 0 )
  107.   { if(--I[i]<0){ i--; return(0);}
  108.                   else return(1);
  109.   }else return(-(i--));  //Vrací zápornou aktuální hloubku vno²ení
  110. }  //Cyklus
  111.  
  112. void ¼ekejNaReakci(void)
  113. //¼eká na sitsk klávesy nebo tlaƒítka myτi
  114. { VyprázdniFrontuKláves();
  115.   MyτVyprázdniFrontuUdálostí();
  116.   ¼ekej(NaKlávesu|NaMyτ);
  117.   VyprázdniFrontuKláves();
  118.   MyτVyprázdniFrontuUdálostí();
  119. } //¼ekejNaReakci
  120.  
  121. long ¥¼ti¼íslo ( char* Text )
  122. { long Vrátit = 0;
  123.   GrNastavPozici(272, 0);
  124.   Gr¼tiL¼íslo(Text,Vrátit,8,1,0xe);
  125.   GrNastavPozici(272, 0);
  126.   GrPiτⁿet╪zec( "               " );
  127.   return Vrátit;
  128. } //¥¼ti¼íslo
  129.  
  130. long BaltEmuluj( char* Text )
  131. { long       Vrátit = 0;
  132.   int        Klávesa;
  133.   int        Konec = 0;
  134.   TypP²edm╪t P²edm╪t=1;
  135.   VyprázdniFrontuKláves();
  136.   GrNastavBarvy( 0x7 );  GrSmaºOkno();
  137.   GrPiτⁿet╪zec( Text );
  138.   Tón(1000); ¼ekej(10); VypniTón();
  139.   while (!Konec)
  140.   { int p;
  141.     GrNastavPozici(0, GrV∞τkaZnaku);
  142.     GrPiτⁿet╪zec( "ⁿá: "); GrPiτL¼íslo( PoziceBaltazaraY(), 2 );
  143.     GrPiτⁿet╪zec( ",  Sl: " ); GrPiτL¼íslo( PoziceBaltazaraX(), 2 );
  144.     GrPiτⁿet╪zec( ",  Sm: " );
  145.     int s=Sm╪rBaltazara();
  146.     GrPiτⁿet╪zec( s==V∞chod ? "V∞chod" :
  147.                   s==Jih    ? "Jih   " :
  148.                   s==Západ  ? "Západ " :
  149.                               "Sever " );
  150.     GrPiτⁿet╪zec( ",  Ba: " ); NastavBarvu¼arování( p=NastavBarvu¼arování(0));
  151.                               GrPiτL¼íslo( p, 2 );
  152.     GrPiτⁿet╪zec( ",  Ry: " ); RychlostBaltazara(p = RychlostBaltazara(0));
  153.                               GrPiτL¼íslo( p, 2 );
  154.     switch ¼tiKlávesuZFrontyS¼ekáním()
  155.     { case KlDoleva:   VlevoVbok(); break;
  156.       case KlDoprava:  VpravoVbok(); break;
  157.       case KlNahoru:   Popojdi(1); break;
  158.       case KlDolà:     ¼aruj(Baltedit()); break;
  159.       case KlIns:      Vrátit = ¥¼ti¼íslo( "¼íslo: " ); break;
  160.       case 'B':
  161.       case 'b':        NastavBarvu¼arování( ¥¼ti¼íslo("Barva: ") ); break;
  162.       case 'C':
  163.       case 'c':        ¼aruj(¼tverec); break;
  164.       case 'R':
  165.       case 'r':        RychlostBaltazara( ¥¼ti¼íslo("Rychlost: ") ); break;
  166.       case KlEnter:    Konec = 1; break;
  167.     } //switch
  168.   } //while
  169.   GrNastavBarvy( 0x77 ); GrSmaºOkno();
  170.   return Vrátit;
  171. } //BaltEmuluj
  172.  
  173.  
  174. ///////////////////
  175. // Globální makra
  176. //
  177. -o1-Globals ----------------------------------------------------------------
  178. 0 ;prom╪nné
  179.   ;globální prom╪nné (jsou definovány v globálních definicích  Ctrl+G):
  180.     ;prom╪nné celoƒíselné: gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,gKlávesa;
  181.        ;dalτí p²eddefinované globální prom╪nné mají vºdy p²edponu g..
  182.        ;a jejich názvy jsou shodné xaverov lokálními prom╪nn∞mi definovan∞mi níºe,
  183.        ;nap². gD¼íslo1, gⁿet╪zec atd.
  184.   ;lokální prom╪nné:
  185.     ;prom╪nné celoƒíselné:
  186.        int     a,b,c,d,e,f,g,h,i,j,Klávesa,      //rozsah -32768..32767
  187.                I¼íslo1,I¼íslo2,I¼íslo3,PàvBarvy;
  188.     ;prom╪nné reálné:
  189.        double  D¼íslo1,D¼íslo2,D¼íslo3;          //rozsah 5.0E-324..1.7E308
  190.     ;prom╪nná znak:
  191.        char    Znak;
  192.     ;prom╪nná ²et╪zec:
  193.        string  ⁿet╪zec;
  194. [ ;vytvo² Baltazaràv grafick∞ prostor
  195.    Vytvo²Prostor(); MyτZaƒátekObsluhy();
  196. ] ;zruτ Baltazaràv grafick∞ prostor
  197.    MyτKonecObsluhy(); ZruτProstor();
  198. a Klávesa= ¼tiKlávesuZFronty();
  199. b GrNastavBarvuPop²edí  /* Partie */
  200. c ¼aruj(¼tverec);
  201. d Gr¼tiZnak("?",Znak,1,0x07);            /*      edit ano, ƒerná/sv.τedá*/
  202. ╨ return BaltEmuluj("Hodnota?");
  203. e BezObláƒku();
  204. f VyprázdniFrontuKláves();
  205. g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f);  /*40zn, edit ano, modrá/bílá   */
  206. h Gr¼tiI¼íslo("?",I¼íslo1,6,0,0x0e);     /* 6zn, edit  ne, ƒerná/ºlutá  */
  207. i Gr¼tiD¼íslo("?",D¼íslo1,20,1,0x0f);    /*20zn, edit  ne, ƒerná/bílá   */
  208. j GrPiτZnak(Znak);
  209. k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
  210. ê BaltEmuluj("STOP");
  211. m ;vypiτ ⁿet╪zec do grafického okénka
  212.    PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré             */
  213.    GrPiτⁿet╪zec(ⁿet╪zec);                /*vypíτe obsah prom╪nné ⁿet╪zec*/
  214.    GrNastavBarvy(PàvBarvy);              /*nastaví pàvodní barvy        */
  215. n Neviditeln∞();
  216. o SObláƒkem();
  217. p GrNastavPozici  /* Partie */
  218. q GrPiτL¼íslo(I¼íslo1,-1);               /* -1 = nejkratτí v∞pis        */
  219. r VpravoVbok();
  220. t P²epniNaText();
  221. u GrPiτD¼íslo(D¼íslo1,10,2);             /*10 ƒíslic, z toho 2 desetinné*/
  222. v Viditeln∞();
  223. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  224.   ¼ekejNaReakci();
  225. x Skryj();
  226. y Odhal();
  227. z ;ƒelem vzad
  228.    VlevoVbok(); VlevoVbok();
  229. C ¼aruj                 /*     C:(p²edm╪t)!   1-150                   */
  230. ╤ return BaltEmuluj     /*     ╤:("Volno")!   "Test"                  */
  231. K GrKresliP²edm╪ty  /* Partie */
  232. L NaƒtiScénu            /*    L:("soubor")!   "c:\\pavel\\soubor.s00" */
  233. ¥ BaltEmuluj            /*      ¥:("Text")!   "Test"                  */
  234. N Náhodn╪¼aruj          /*     N:(p²edm╪t)!   1-150                   */
  235. P Popojdi               /*  P:(poƒet_polí)!   0-14                    */
  236. R RychlostBaltazara     /*    R:(rychlost)!   0-9                     */
  237. S UloºScénu             /*    S:("soubor")!   "c:\\pavel\\soubor.s00" */
  238. W ¼ekej                 /*  W:(milisekund)!   0-32000                 */
  239. X ¼arujNaPozici         /* X:(p²edm╪t,x,y)!   1-150, 1-15, 1-10       */
  240. -c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
  241. ?n PràchodnostP²edm╪tuP²edB() Je 0
  242. ?p PràchodnostP²edm╪tuP²edB() Je 1
  243. ?B Barva¼tverceP²edB()  /* Je, Není, <, >, <= ,>= */
  244. ?P P²edm╪tP²edB()       /* Je, Není, <, >, <= ,>= */
  245. ?S Sm╪rBaltazara()      /* Je, Není, <, >, <= ,>= */
  246. \b Barva¼tverceP²edB()??
  247. \p P²edm╪tP²edB()??
  248. \x Sm╪rBaltazara()??
  249. \C case
  250. #C ; n-krát                                     #C:(5)         5₧ 
  251.     __CYKLUS
  252. #A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok   #A:(i,2,10,2)  i=2,4..10
  253.     OdDoKrok
  254. #D ;opakuj sestupn╪  pro prom╪nnou od,do,krok   #D:(i,10,2,2)  i=10,8..2
  255.     OdDolàDoKrok
  256. #M ;opakuj n-krát sestupn╪  pro prom╪nnou       #M:(i,8)  (8x) i=7,6..0
  257.     DolàDo0
  258. #N ;opakuj n-krát vzestupn╪ pro prom╪nnou       #N:(i,8)  (8x) i=0,1..7
  259.     Od0
  260. ===Globals ------------------------------------------------------------------
  261. /*-hf(*/
  262. /*-hf-*/
  263. void Konfig(int typ)  // práce s konfiguraƒními soubory
  264. /*-hf-*/;
  265. void FishStop( void )  // zastaví stopky a p²iƒte ƒas táhnoucímu hráƒi
  266. /*-hf-*/;
  267. void FishP²iƒti(int komu)  // p²iƒítá ƒas a vykresluje v∞poƒetní informace
  268. /*-hf-*/;
  269. void Fisher(int x)  // vykreslí ruƒiƒky/displej Fisherov∞ch hodin
  270. /*-hf-*/;
  271. void Klik(int fish,int pockat)  // real-time práce s myτí a klávesnicí
  272. /*-hf-*/;
  273. int Muj(int cislo, int diagonalne)  // souƒást funkce µach
  274. /*-hf-*/;
  275. void µach( void )  // naplní prom╪nné bs a cs informací o stavu τachu
  276. /*-hf-*/;
  277. void TahV╪ºí(int x, int y)  // tah v╪ºí, ztráta práva na jednu roτádu
  278. /*-hf-*/;
  279. void TahKrálem( void )  // tah králem, ztráta práva roτády
  280. /*-hf-*/;
  281. void Táhni( void )  // provede nejlepτí nalezen∞ tah
  282. /*-hf-*/;
  283. void Vra£Roτády( void )  // nabytí práva roτády p²i vrácení tahu
  284. /*-hf-*/;
  285. void Vra£Tah( void )  // vrátí poslední zadan∞ tah
  286. /*-hf-*/;
  287. void DoPartiá²e( void )  // zápis do partiá²e a promítnutí následkà vzetí
  288. /*-hf-*/;
  289. void Potáhni(int X1,int Y1,int X2,int Y2)  // souƒást funkce ZkusTah
  290. /*-hf-*/;
  291. int TestTahu(int x1,int y1,int x2,int y2)  // test tahu pro uºivatele
  292. /*-hf-*/;
  293. void Skok(int max)  // zm╪na sm╪ru figury po napadení cizí
  294. /*-hf-*/;
  295. void Vyno²ení( void )  // sníºení hloubky prohledávání v herním stromu
  296. /*-hf-*/;
  297. void Zano²ení( void )  // zv∞τení hloubky prohledávaní v herním stromu
  298. /*-hf-*/;
  299. void Test(int x,int y,int z)  // souƒást funkce VyhledejTah
  300. /*-hf-*/;
  301. void Obnovµachovnici( void )  // p²enese informace o stavu τachovnice ze zálohy
  302. /*-hf-*/;
  303. void OceσPozici(int pocitat)  // ohdnotí danou pozici ƒíslem
  304. /*-hf-*/;
  305. void VyhledejTah(int maxhloubka, int pocitat)  // vypoƒítá pokraƒování
  306. /*-hf-*/;
  307. int SrovnejTah(int t1,int t2)  // porovná dva tahy partiá²e na shodnost
  308. /*-hf-*/;
  309. void Okno(int x1,int y1,int x2,int y2, int transp)  // plastické okno
  310. /*-hf-*/;
  311. void Piτ(int px,int py,int pozadi,string text)  // text se stínem, pop². pozadím
  312. /*-hf-*/;
  313. int Nabídka(int px,int py,int a, int b)  // p²eddefinovaná nabídka
  314. /*-hf-*/;
  315. void LCD(int x, int y, long cislo, int cif, int typ)  // v∞stup údajà na displej
  316. /*-hf-*/;
  317. void Notes(string poznamka)  // vypíτe poznámku k objektu pod kurzorem
  318. /*-hf-*/;
  319. string Txt(int index)  // vypíτe hláτku ƒíslo 'index' aktuálním jazykem
  320. /*-hf-*/;
  321. void Popis( void )  // popis políƒka τachovnice (kámen+pozice)
  322. /*-hf-*/;
  323. void Tlaƒítko(int x,int y,string text,int stiskle)  // vykreslí talƒítko
  324. /*-hf-*/;
  325. void Volba(int x, int y, int a,int b)  // okénko s nastavením
  326. /*-hf-*/;
  327. void MenuProst²edí( void )  // okno nastavení prost²edí
  328. /*-hf-*/;
  329. void MenuHledání( void )  // podrobné nastavení vyhledávacího algoritmu
  330. /*-hf-*/;
  331. void MenuJiné( void )  // nastavení myτi, animací
  332. /*-hf-*/;
  333. int Hláτka(int typ, string text)  // informaƒní/varovné/dotazovací okno
  334. /*-hf-*/;
  335. string Otev²ít(string ext)  // otev²e soubor s p²iponou ext
  336. /*-hf-*/;
  337. void Uloºit(string ext)  // uloºí zadan∞ soubor
  338. /*-hf-*/;
  339. void ¼istiµachovnici( void )  // vyprázdní τachovnici a nastaví její okraje
  340. /*-hf-*/;
  341. void Inicializace( void )  // deklarace prom╪nn∞ch
  342. /*-hf-*/;
  343. void NabídkaPartie( void )  // nabídka práce s partií, uonƒení programu
  344. /*-hf-*/;
  345. void NabídkaVolby( void )  // nabídka sociálních funkcí, editace, tahy
  346. /*-hf-*/;
  347. void NabídkaNastavení( void )  // nabídka nastavení uºivatelského rozhraní
  348. /*-hf-*/;
  349. void NaƒtiJazyk( void )  // naƒte jazykov∞ balíƒek (CZ+ENG) z LNG souboru
  350. /*-hf-*/;
  351. void NabídkaZobrazení( void )  // nabídka pro grafick∞ interface
  352. /*-hf-*/;
  353. void NabídkaInformace( void )  // nabídka vyvolá informaƒní okna
  354. /*-hf-*/;
  355. void RozvinovacíNabídky( void )  // veτkeré volby z horního panelu
  356. /*-hf-*/;
  357. void main( void )  // ░░▒▒▓▓██ PARTIE V1.01 (public domain) ██▓▓▒▒░░
  358. /*-hf)*/;
  359. ;-h---------------------------------------------------------------------------
  360. void Konfig(int typ)  // práce s konfiguraƒními soubory
  361. -s--Konfig                                                                      ■  16  -2  -8   3
  362.           ___________Konfig__________
  363.     ___otev²ení__    ƒtení/Zápis zav²ení
  364.     \a    \b    \c        #1       3!
  365. cfg~zápis │ def~ƒtení __zápis?__
  366.    a!     │    c!     /:typ==0 /
  367.           │          ano       ne
  368.       cfg~ƒtení      1!       2!
  369.          b!
  370. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  371. a cfg=SouborOtev²i("*\\partie.cfg",SouborP²ístupZápis|SouborP²ístupBinární);
  372. b cfg=SouborOtev²i("*\\partie.cfg",SouborP²ístup¼tení|SouborP²ístupBinární);
  373. c cfg=SouborOtev²i("*\\partie.def",SouborP²ístup¼tení|SouborP²ístupBinární);
  374. 1 ;naƒtení nastavení do buσky pole
  375.   SouborPiτL¼íslo(cfg,kon[i],4);
  376.   SouborPiτNov∞ⁿádek(cfg);
  377. 2 ;zápis buσky pole do konfiguraƒního souboru
  378.   Soubor¼tiI¼íslo(cfg,kon[i]);
  379.   Soubor¼tiNov∞ⁿádek(cfg);
  380. 3 SouborZav²i(cfg);
  381. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  382. \a typ ?? case 0:
  383. \b case 1:
  384. \c case 2:
  385. #1 i=0; i<=40; i++
  386. =SP---------------------------------------------------------------------------
  387.  
  388. ;-h---------------------------------------------------------------------------
  389. void FishStop( void )  // zastaví stopky a p²iƒte ƒas táhnoucímu hráƒi
  390. -s--FishStop                                                                    ■   4  -2 -15   3
  391.  __________FishStop______
  392. 1!           _____komu~p²iƒíst?_____
  393.              /:n==1                /
  394.            bílému               ƒernému
  395.             a!                    b!
  396. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  397. 1 ;zjiτt╪ní nam╪²eného ƒasu a zastavení stopek
  398.   if (partiar[delka].s>1) StopkyNuluj();
  399.   Stopky(cas_f);StopkyStop();
  400. a ;posun ƒasu bílého
  401.   ¼asPosuσ(cas_b,cas_f.Hodiny,cas_f.Minuty,cas_f.Sekundy,cas_f.Setiny);
  402. b ;posun ƒasu ƒerného
  403.   ¼asPosuσ(cas_c,cas_f.Hodiny,cas_f.Minuty,cas_f.Sekundy,cas_f.Setiny);
  404. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  405. =SP---------------------------------------------------------------------------
  406.  
  407. ;-h---------------------------------------------------------------------------
  408. void FishP²iƒti(int komu)  // p²iƒítá ƒas a vykresluje v∞poƒetní informace
  409. -s--FishP²iƒti                                                                  ■  24  -2  -6   3
  410.               ___FishP²iƒti__
  411.          :Stopky(cas) p²iƒtení~ƒasu
  412.                             /a
  413.                  __:MyτSchovejKurzor()___
  414.                  │            │         │
  415.         zpracování~na~hodiny  │       konec
  416.                  /:kon[21]==1 │ :MyτZobrazKurzor()
  417.           _______│______      │     :cas_o=cas
  418.        p²iƒtení    vykreslení │
  419.     :cas_of=cas_o :Fisher(x1) │
  420.       :cas_f=cas              │
  421.     komu~p²iƒíst?             │
  422.     /:komu==1   /             │
  423. bílého~ƒas ƒerného~ƒas        │
  424.    a!          b!             │
  425.                       v∞stup~na~displej
  426.                               /b
  427.                  :LCD(318,435,count,8,kon[8])
  428. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  429. a ;bílého ƒas se p²iƒte
  430.   x1=119;
  431.   ¼asPosuσ(cas_of,cas_b.Hodiny,cas_b.Minuty,cas_b.Sekundy,cas_b.Setiny);
  432.   ¼asPosuσ(cas_f,cas_b.Hodiny,cas_b.Minuty,cas_b.Sekundy,cas_b.Setiny);
  433. b ;ƒerného ƒas se p²iƒte
  434.   x1=236;
  435.   ¼asPosuσ(cas_of,cas_c.Hodiny,cas_c.Minuty,cas_c.Sekundy,cas_c.Setiny);
  436.   ¼asPosuσ(cas_f,cas_c.Hodiny,cas_c.Minuty,cas_c.Sekundy,cas_c.Setiny);
  437. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  438. /a (cas.Sekundy!=cas_o.Sekundy) && (partiar[delka].s<2)
  439. /b (kon[24]==1) && (((komu==1) && (b==0)) || ((komu==-1) && (c==0)))
  440. =SP---------------------------------------------------------------------------
  441.  
  442. ;-h---------------------------------------------------------------------------
  443. void Fisher(int x)  // vykreslí ruƒiƒky/displej Fisherov∞ch hodin
  444. -s--Fisher                                                                      ■   6  -1  20   3
  445.                                                  Fisher
  446.                                     ________ruƒiƒky/displej_________
  447.                                     /:kon[5]==0                    /
  448.                                  ruƒiƒky       _________________displej__________________
  449.                              p²emazání │   _umíst╪ní_     _____typ_____             zobrazení
  450.                             p:(0)!     │   /:x==119 /     /:kon[5]==1 /    :LCD(99,y,cas_f.Minuty,2,o)
  451.                                :ii=30  │ :y=396   :y=431 :o=1        :o=0 :LCD(181,y,cas_f.Sekundy,2,o)
  452.                              p²emazání │
  453.                                  #1    │
  454.                                ƒárka   │
  455.                                 1!     │
  456.                                    vykreslení
  457.                                        #2
  458.                            ____________│_____________
  459.            ___________typy~ruƒiƒek__________     ruƒiƒka
  460.            \1              \2              \3      1!
  461.     :i=cas_f.Hodiny :i=cas_f.Minuty :i=cas_f.Sekundy
  462.          :ii=15          :ii=25          :ii=30
  463. p:(kon[17])!    p:(kon[16])!    p:(kon[15])!
  464. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  465. 1 ;vykreslí ruƒku o délce ii v "úhlu" i
  466.   GrKresliLinku(x,425,
  467.    integer(x+ii*cos((6*i-90)*Pí/180)),
  468.    integer(425+ii*sin((6*i-90)*Pí/180)));
  469. p GrNastavBarvuPop²edí
  470. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  471. #1 i=0; i<=60; i++
  472. #2 z=1; z<=3; z++
  473. \1 z ?? case 1:
  474. \2 case 2:
  475. \3 case 3:
  476. =SP---------------------------------------------------------------------------
  477.  
  478. ;-h---------------------------------------------------------------------------
  479. void Klik(int fish,int pockat)  // real-time práce s myτí a klávesnicí
  480. -s--Klik                                                                        ■  37  -2   2   3
  481.                                 Klik
  482.                                 1!
  483.              ____________________│_____________________
  484.       zavedení~limitu     ƒasomíra  _________________klik________________
  485.              /a              /b   ƒekání    poƒkat?               __zakonƒení___
  486.       _____komu?______       │      +1         /:pockat==1 zastavení~stopek klávesa?
  487.       /:n==1         /      2!   ___│____     ano                 /b          /d /
  488. :limit=kon[36] :limit=kon[37]    │      │      +2            :FishStop()     ano ne
  489.                               "pozice limit 'pozice               /c         5! 6!
  490.                                 3!      /b                   hraje~dalτí
  491.                                   :FishP²iƒti(n)               :n=n*-1
  492.                                         /c                    :delka=-1
  493.                                    ƒas~vyprτel                :pozice=-1
  494.                                        4!
  495. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  496. 1 ;zahájení práce s myτí
  497.   MyτZobrazKurzor();
  498.   MyτZm╪σGrKurzor(13);
  499.   MyτVyprázdniFrontuUdálostí();
  500.   VyprázdniFrontuKláves();
  501. 2 ;spuτt╪ní stopek
  502.   StopkyNuluj();StopkyStart();
  503. 3 ;urƒení pozice myτi
  504.   Myτ¼tiUdálost(gMyτUdálost);
  505.   x=gMyτUdálost.X;
  506.   y=gMyτUdálost.Y;
  507. 4 ;stop cyklu
  508.   break;
  509. 5 ;naƒtení klávesy
  510.   MyτSchovejKurzor();
  511.   k=¼tiKlávesuZFronty();
  512.   tleve=0;tprave=0;
  513. 6 ;naƒtení tlaƒítek
  514.   k=KlNení;
  515.   if (gMyτUdálost.Typ==MyτUdálostLevéTlDolà) tleve=1; else tleve=0;
  516.   if (gMyτUdálost.Typ==MyτUdálostPravéTlDolà) tprave=1; else tprave=0;
  517.   MyτSchovejKurzor();if (pockat==0) ¼ekej(kon[38]);
  518. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  519. /a (fish==1) && (kon[33]==2)
  520. /b (fish==1) && (matpat==0)
  521. /c (kon[33]==2) && (cas.Hodiny*3600+cas.Minuty*60+cas.Sekundy>limit)
  522. /d BylaStisknutaKlávesa()==1
  523. +1 (gMyτUdálost.Tlaƒítka==0) && (BylaStisknutaKlávesa()==0)
  524. +2 (gMyτUdálost.Typ!=4) && (BylaStisknutaKlávesa()==0)
  525. =SP---------------------------------------------------------------------------
  526.  
  527. ;-h---------------------------------------------------------------------------
  528. int Muj(int cislo, int diagonalne)  // souƒást funkce µach
  529. -s--Muj                                                                         ■   2  -2   0   3
  530.               __________Muj___________
  531.     __moje~figurka/král?_          konec
  532.     /a                  /        :return(0)
  533.    ano          ________ne_______
  534. :return(1)      /:diagonalne==1 /
  535.           digonální~test  lineární~test
  536.                 /b              /c
  537.             :return(1)      :return(1)
  538. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  539. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  540. /a (cislo*o<0) || (abs(cislo)==6)
  541. /b (abs(cislo)==1) || (abs(cislo)==2) || (abs(cislo)==4)
  542. /c (abs(cislo)==1) || (abs(cislo)==2) || (abs(cislo)==3)
  543. =SP---------------------------------------------------------------------------
  544.  
  545. ;-h---------------------------------------------------------------------------
  546. void µach( void )  // naplní prom╪nné bs a cs informací o stavu τachu
  547. -s--µach                                                                        ■ 112  22   0   3
  548.                       µach
  549.                      :bs=0
  550.                      :cs=0
  551.              procházení~τachovnice
  552.                        #1
  553.                      x~a~y
  554.                        #2
  555.                  p²ítomen~král?
  556.                        /:abs(s[x][y])==6
  557.                   ____ano____
  558.             __obracítko__   │
  559.             /:s[x][y]<0 /   │
  560.            :o=1       :o=-1 │
  561.                             │
  562.          ____________rychlé~vylouƒení_________
  563.          /1                                  /
  564.      vylouƒení                    vylouƒení~v~osmi~sm╪rech
  565.      __"koho?_                               #3
  566.   ___│____ :break               _______parametry+test___
  567.   /:o==1 /       ___________parametry_____________     │
  568. :cs=1  :bs=1     \1     \2  \3   \4  \5  \6  \7  \8    │
  569.                :xi=-1   │ :xi=0  │ :xi=1 │ :xi=0 │     │
  570.             :yi=-1/*0*/ │ :yi=-1 │ :yi=0 │ :yi=1 │     │
  571.                         │        │       │       │     │
  572.                       :xi=-1   :xi=1   :xi=1   :xi=-1  │
  573.                       :yi=-1   :yi=-1  :yi=1   :yi=1   │
  574.                                                        │
  575.                                               prohledávací~cyklus
  576.                                           ____________:i=1___________
  577.                                   ____"podmínky_____                │
  578.                            _____pro~x______        │                │
  579.                            /:xi>0         /        │                │
  580.                     :x1=(x+i*xi)<10 :x1=(x+i*xi)>1 │                │
  581.                                                    │                │
  582.                                             _____pro~y______        │
  583.                                             /:yi>0         /        │
  584.                                      :x2=(y+i*yi)<10 :x2=(y+i*yi)>1 │
  585.                                                                     │
  586.                                                                   cyklus
  587.                                                                     *a
  588.                                                               ______│_______
  589.                                                     :iii=s[x+i*xi][y+i*yi] │
  590.                                                            /3    /2        │
  591.                                                           :i=9 'koho?    zadání
  592.                                                                           :i++
  593.                                                                        'podmínky
  594. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  595. a ;prohledávací cyklus
  596.   i=1;
  597.   if (xi>0) x1=(x+i*xi)<10; else x1=(x+i*xi)>1;
  598.   if (yi>0) y1=(y+i*yi)<10; else y1=(y+i*yi)>1;
  599.   while (x1 || y1)
  600.   {
  601.    iii=s[x+i*xy][y+i*yi];
  602.    if (Muj(iii,xi!=yi)==1) i=9; else
  603.    if ((iii==3*o) || (iii==5*o))
  604.     if (o==1) cs=1; else bs=1;
  605.    i++;
  606.    if (xi>0) x1=(x+i*xi)<10; else x1=(x+i*xi)>1;
  607.    if (yi>0) y1=(y+i*yi)<10; else y1=(y+i*yi)>1;
  608.   }
  609. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  610. /1 (s[x-1][y+1*o]==1*o) ||
  611.    (s[x+1][y+1*o]==1*o) ||
  612.    (s[x-2][y-1]==2*o) ||
  613.    (s[x-1][y-2]==2*o) ||
  614.    (s[x+1][y-2]==2*o) ||
  615.    (s[x+2][y-1]==2*o) ||
  616.    (s[x+2][y+1]==2*o) ||
  617.    (s[x+1][y+2]==2*o) ||
  618.    (s[x-1][y+2]==2*o) ||
  619.    (s[x-1][y-1]==6*o) ||
  620.    (s[x][y-1]==6*o) ||
  621.    (s[x+1][y-1]==6*o) ||
  622.    (s[x+1][y]==6*o) ||
  623.    (s[x+1][y+1]==6*o) ||
  624.    (s[x][y+1]==6*o) ||
  625.    (s[x-1][y+1]==6*o) ||
  626.    (s[x-1][y]==6*o)
  627. /2 (((abs(xi)==abs(yi)) && ((iii==3*o) || (iii==5*o)))) ||
  628.    (((abs(xi)!=abs(yi)) && ((iii==4*o) || (iii==5*o))))
  629. /3 Muj(iii,abs(xi)==abs(yi))==1
  630. #1 y=2; y<=9; y++
  631. #2 x=2; x<=9; x++
  632. #3 ii=1; ii<=8; ii++
  633. \1 ii ?? case 1:
  634. \2 case 2:
  635. \3 case 3:
  636. \4 case 4:
  637. \5 case 5:
  638. \6 case 6:
  639. \7 case 7:
  640. \8 case 8:
  641. *a x1 && x2
  642. =SP---------------------------------------------------------------------------
  643.  
  644. ;-h---------------------------------------------------------------------------
  645. void TahV╪ºí(int x, int y)  // tah v╪ºí, ztráta práva na jednu roτádu
  646. -s--TahV╪ºí                                                                     ■   4  -2  -6   3
  647.            TahV╪ºí
  648.              c!
  649.            legální?
  650.               /1
  651.          ____ano_____
  652.          /:n==1     /
  653.          │  _______kam?______
  654.          │  /:x==2          /:rosada[3]==0
  655.          │  │              :i=3
  656.          │  /:rosada[2]==0 a!
  657.          │ :i=2
  658.          │ a!
  659.          │
  660.  _______kam?______
  661.  /:x==2          /:rosada[1]==0
  662.  │              :i=1
  663.  /:rosada[0]==0 a!
  664. :i=0
  665. a!
  666. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  667. a ;zápis roτády
  668.   v[h].posledni.ros[i]=1;
  669.   rosada[i]=1;
  670. C ¼aruj                 /*     C:(p²edm╪t)!   1-150                   */
  671. c ;ƒiτt╪ní pole s právem na roτádu
  672.   for (i=0; i<=3; i++) v[h].posledni.ros[i]=0;
  673. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  674. /1 ((x==2) || (x==9)) && ((y==2) || (y==9))
  675. =SP---------------------------------------------------------------------------
  676.  
  677. ;-h---------------------------------------------------------------------------
  678. void TahKrálem( void )  // tah králem, ztráta práva roτády
  679. -s--TahKrálem                                                                   ■   4  -2 -27   3
  680. TahKrálem
  681.    c!
  682.  na~tahu?
  683.  /:n==1 /
  684. 0-1    2-3
  685.  #1     #2
  686.  │      │
  687. a!     a!
  688. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  689. a ;p²ehození roτády
  690.   if (rosada[i]==0)
  691.   {
  692.    v[h].posledni.ros[i]=1;
  693.    rosada[i]=1;
  694.   }
  695. r VpravoVbok();
  696. c ;ƒiτt╪ní pole s právem na roτádu
  697.   for (i=0; i<=3; i++) v[h].posledni.ros[i]=0;
  698. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  699. #1 i=0; i<=1; i++
  700. #2 i=2; i<=3; i++
  701. =SP---------------------------------------------------------------------------
  702.  
  703. ;-h---------------------------------------------------------------------------
  704. void Táhni( void )  // provede nejlepτí nalezen∞ tah
  705. -s--Táhni                                                                       ■  30  -2  -3   3
  706.                         Táhni
  707.                      lze~táhnout?
  708.                           /:x1>-2
  709.         _________________tah_________________
  710.  _záloha~figury__        vlastní~tah      konec
  711.  /:s[x2][y2]==0 /    :s[x2][y2]=s[x1][y1]  k!
  712.  ne            ano       :s[x1][y1]=0    :n=n*-1
  713. :z=0       :z=s[x2][y2]      :m=0
  714.                              :h=1
  715.                        speciální~tahy?
  716.                           \1   \4  \6
  717.                         p╪τec v╪º král
  718.                          1!   4!  6!
  719. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  720. 1 ;p²em╪na p╪τce
  721.   if (v[1].nejlepsi.p!=0)
  722.   {
  723.    if (((n==1) && (b=0)) || ((n==-1) && (c=0)))
  724.     m=5*n; else m=v[1].nejlepsi.p;
  725.    s[x2][y2]=m;
  726.   }
  727. 4 ;tah v╪ºí - ovlivní právo na roτádu
  728.   TahV╪ºí(x1,y1);
  729. 6 ;tah králem - roτáda
  730.   if (abs(x1-x2)==2)
  731.    if ((x2<x1) &&
  732.        (((n==1) && (rosada[0]==0)) || ((n==-1) && (rosada[2]==0))))
  733.    {
  734.     s[5][y1]=4*n;
  735.     s[2][y1]=0;
  736.    } else
  737.    if ((((n==1) && (rosada[1]==0)) || ((n==-1) && (rosada[3]==0))))
  738.    {
  739.     s[7][y1]=4*n;
  740.     s[9][y1]=0;
  741.    }
  742.   TahKrálem();
  743. k ;zápis do partiá²e
  744.   µach();
  745.   x1=v[1].nejlepsi.x1;
  746.   y1=v[1].nejlepsi.y1;
  747.   x2=v[1].nejlepsi.x2;
  748.   y2=v[1].nejlepsi.y2;
  749.   DoPartiá²e();
  750. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  751. \1 abs(s[x2][y2]) ?? case 1:
  752. \4 case 4:
  753. \6 case 6:
  754. =SP---------------------------------------------------------------------------
  755.  
  756. ;-h---------------------------------------------------------------------------
  757. void Vra£Roτády( void )  // nabytí práva roτády p²i vrácení tahu
  758. -s--Vra£Roτády                                                                  ■   9  -2 -24   3
  759.   Vra£Roτády
  760. vτechny~strany
  761.       #1
  762.    zm╪nit?
  763.       /1
  764.      ano
  765.      a!
  766. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  767. a ;zisk práva roτády
  768.   v[h].posledni.ros[i]=0;
  769.   rosada[i]=0;
  770. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  771. #1 i=0; i<=3; i++
  772. /1 v[h].posledni.ros[i]==1
  773. =SP---------------------------------------------------------------------------
  774.  
  775. ;-h---------------------------------------------------------------------------
  776. void Vra£Tah( void )  // vrátí poslední zadan∞ tah
  777. -s--Vra£Tah                                                                     ■   4  -2 -12   3
  778.                 Vra£Tah
  779.                  0a!
  780.      ______________│________________
  781.   p²em╪na?           roτáda      konec
  782.      /p                /r    :Vra£Roτády()
  783.     ano       _______jaká?___
  784. :s[x1][y1]=n  /:x2<x1       /
  785.             velká          malá
  786.              v!            m!
  787. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  788. 0 ;prom╪nné
  789.   x1=v[h].posledni.x1;
  790.   y1=v[h].posledni.y1;
  791.   x2=v[h].posledni.x2;
  792.   y2=v[h].posledni.y2;
  793. a ;základní vrácení tahu
  794.   ok=0;
  795.   s[x1][y1]=s[x2][y2];
  796.   s[x2][y2]=v[h].posledni.z;
  797. v ;dokonƒení vrácení velké roτády
  798.   s[2][y1]=4*n;
  799.   s[5][y1]=0;
  800. m ;dokonƒení vrácení malé roτády
  801.   s[9][y1]=4*n;
  802.   s[7][y1]=0;
  803. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  804. /p v[h].posledni.p!=0
  805. /r (abs(s[x1][y1])==6) && (abs(x1-x2)==2)
  806. =SP---------------------------------------------------------------------------
  807.  
  808. ;-h---------------------------------------------------------------------------
  809. void DoPartiá²e( void )  // zápis do partiá²e a promítnutí následkà vzetí
  810. -s--DoPartiá²e                                                                  ■   4  -2   0   3
  811.                 DoPartiá²e
  812.                    0!
  813.     ________________│_________________
  814.     │          ___τach?____ skoƒeno? │
  815.     │          /s         /    /z    │
  816.     │         ano         │   ano    │
  817.     │ :partiar[delka].s=1 │   z!     │
  818.     │                     ne         │
  819.  p²em╪na?        :partiar[delka].s=0 │
  820.  /:m==0 /                            │
  821.  ne    ano                    udání~destinace
  822. n!     a!             _____________:ii=0_____________
  823.                    poƒítání                    vyhodnocení
  824.        __________typ~figurky__________              /:ii>0
  825.        \2          \3        \4      \5            ano
  826.      jezdec     "st²elec    "v╪º    dáma  :partiar[delka].dest=1
  827.        /j          #1        #2   'st²elec
  828.  víc~jak~jeden "kontrola 'kontrola  'v╪º
  829.      :ii++        c!
  830. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  831. 0 ;prom╪nné
  832.   if (pozice<delka) delka=pozice;
  833.   delka++;pozice++;
  834.   partiar[delka].x1=x1;
  835.   partiar[delka].y1=y1;
  836.   partiar[delka].x2=x2;
  837.   partiar[delka].y2=y2;
  838.   partiar[delka].z=z;
  839.   partiar[delka].dest=0;
  840.   for (i=0; i<=3; i++) partiar[delka].ros[i]=v[h].posledni.ros[i];
  841. n ;zápis táhnoucí figurky
  842.   partiar[delka].k=abs(s[x2][y2]);
  843. a ;zápis p²em╪ny
  844.   partiar[delka].k=1;
  845.   partiar[delka].p=m;
  846. z ;p²idání zajaté figurky do seznamu
  847.   i=0;
  848.   if (z<0) ii=1; else ii=0;
  849.   while (zajate[ii][i]!=0) i++;
  850.   zajate[ii][i]=z;
  851. c ;hledací cyklus
  852.   i=1;
  853.   switch (iii)
  854.   {
  855.    case 1: xi=-1;yi=-1;break;
  856.    case 2: xi=1;yi=-1;break;
  857.    case 3: xi=1;yi=1;break;
  858.    case 4: xi=-1;yi=1;break;
  859.    case 5: xi=-1;yi=0;break;
  860.    case 6: xi=0;yi=-1;break;
  861.    case 7: xi=1;yi=0;break;
  862.    case 8: xi=0;yi=1;
  863.   }
  864.   while (s[x2+i*xi][y2+i*yi]==0) i++;
  865.   if (s[x2+i*xi][y2+i*yi]*n==3) ii++;
  866. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  867. /s (bs==1) || (cs==1)
  868. /z (z!=0) && (z<7)
  869. /j (s[x2-2][y2-1]*n==2) || (s[x2-1][y2-2]*n==2) || (s[x2+1][y2-2]*n==2) ||
  870.    (s[x2+2][y2-1]*n==2) || (s[x2+2][y2+1]*n==2) || (s[x2+1][y2+2]*n==2) ||
  871.    (s[x2-1][y2+2]*n==2) || (s[x2-2][y2+1]*n==2)
  872. \2 s[x2][y2]*n ?? case 2:
  873. \3 case 3:
  874. \4 case 4:
  875. \5 case 5:
  876. #1 iii=1; iii<=4; iii++
  877. #2 iii=5; iii<=8; iii++
  878. =SP---------------------------------------------------------------------------
  879.  
  880. ;-h---------------------------------------------------------------------------
  881. void Potáhni(int X1,int Y1,int X2,int Y2)  // souƒást funkce ZkusTah
  882. -s--Potáhni                                                                     ■  29  -2   0   3
  883.                  Potáhni
  884.                    0!
  885.             ________│_________
  886.       speciální~tahy má~táhnoucí~τach?
  887.        \4        \6     __:µach()__
  888.       v╪º       král    /s        /
  889. :TahV╪ºí(X1,Y1) 6!     ano      :ok=1
  890.                        v! ne~-~táhne~ƒlov╪k?
  891.                             /c          /
  892.                      _______│_______    ne
  893.             ano~-~volba~figurky? zápis z!
  894.                     /f /          d!    │
  895.                    ano ne               │
  896.                    f! :m=0              │
  897.                              ___________│___________
  898.                         __p²em╪na?_     taºeno~urƒit∞m~kamenem?
  899.                         /f        /             /t     /
  900.                        ano        ne           ano     ne
  901.                        p! :v[h].posledni.p=0 :skoc=0   /:v[h].posledni.z~Není~0
  902.                                                     :skoc=1
  903. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  904. 0 ;zákládní posun figurky
  905.   z=s[X2][Y2];
  906.   s[X2][Y2]=s[X1][Y1];
  907.   s[X1][Y1]=0;
  908. 6 ;dàsledek tahu králem (právo roτády)
  909.   TahKrálem();
  910.   if (abs(X1-X2)==2)
  911.    if (n==1)
  912.    {
  913.     if (X2<X1)
  914.     {
  915.      s[5][9]=6;µach();
  916.      if ((bs==0) && (cs==0))
  917.      {
  918.       ok=1;
  919.       s[5][9]=4;s[2][9]=0;
  920.      } else s[5][9]=0;
  921.     } else
  922.     {
  923.      s[7][9]=6;µach();
  924.      if ((bs==0) && (cs==0))
  925.      {
  926.       ok=1;
  927.        s[7][9]=4;s[9][9]=0;
  928.      } else s[7][9]=0;
  929.     }
  930.    } else
  931.    {
  932.     if (X2<X1)
  933.     {
  934.      s[5][2]=-6;µach();
  935.      if ((bs==0) && (cs==0))
  936.      {
  937.       ok=1;
  938.       s[5][2]=-4;s[2][2]=0;
  939.      } else s[5][2]=0;
  940.     } else
  941.     {
  942.      s[7][2]=-6;µach();
  943.      if ((bs==0) && (cs==0))
  944.      {
  945.       ok=1;
  946.       s[7][2]=-4;s[9][2]=0;
  947.      } else s[6][2]=0;
  948.     }
  949.    }
  950. v ;vrácení tahu
  951.   s[X1][Y1]=s[X2][Y2];
  952.   s[X2][Y2]=z;
  953.   Vra£Roτády();
  954. f ;v∞b╪r p²em╪ny p╪τce
  955.   Okno(241,224,400,256,0);
  956.   for (i=0; i<=3; i++)
  957.    if (n==1)
  958.     GrKresliP²edm╪t(kon[0]*15+(i+2),1,243+i*39,226); else
  959.     GrKresliP²edm╪t(kon[1]*15+i+8,1,243+i*39,226);
  960.   do Klik(1,1); while (!((x>242) && (y>225) && (x<399) && (y<255)));
  961.   GrNastavBarvuPozadí(0);GrKresliVypln╪n∞Obdélník(241,224,400,256);
  962.   m=((x-243)/39+2)*n;
  963.   s[X2][Y2]=m;
  964.   µach();
  965. d ;zápis do partiá²e
  966.   x1=X1;y1=Y1;x2=X2;y2=Y2;
  967.   DoPartiá²e();
  968. z ;zápis do varianty
  969.   ok=1;
  970.   v[h].posledni.h=0;
  971.   v[h].posledni.x1=X1;
  972.   v[h].posledni.y1=Y1;
  973.   v[h].posledni.x2=X2;
  974.   v[h].posledni.y2=Y2;
  975.   v[h].posledni.z=z;
  976.   v[h].abs=0;
  977. p ;automatická p²em╪na na dámu
  978.   s[X2][Y2]=5*n;
  979.   v[h].posledni.p=5*n;
  980. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  981. /s ((n==1) && (bs==1)) ||  ((n==-1) && (cs==1))
  982. /c ((n==1) && (b==1)) || ((n==-1) && (c==1))
  983. /f (abs(s[X2][Y2])==1) && (((n==1) && (Y2==2)) || ((n==-1) && (Y2==9)))
  984. /t (abs(s[X2][Y2])==1) || (abs(s[X2][Y2])==2) || (abs(s[X2][Y2])==6)
  985. \4 abs(s[X2][Y2]) ?? case 4:
  986. \6 case 6:
  987. =SP---------------------------------------------------------------------------
  988.  
  989. ;-h---------------------------------------------------------------------------
  990. int TestTahu(int x1,int y1,int x2,int y2)  // test tahu pro uºivatele
  991. -s--TestTahu                                                                    ■  37  -2   2   3
  992.                              TestTahu
  993.                               :ok=0
  994.      ___________________________│____________________________
  995.  delτí~tah?                   základní~kontrola           konec
  996.      /l                               /t               :return(ok)
  997. ano~kontrola              ____________│________________
  998.     l!      ____individuální~kontrola_____         táhnout?
  999.             \1    \2      \3    \4  \5   \6           /:ok==1
  1000.           p╪τec jezdec st²elec v╪º dáma král        :ok=0
  1001.            1!    2!      3!    4!  5!   6!  :Potáhni(x1,y1,x2,y2);
  1002. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1003. l ;kontrola proti p²eskoƒení figury
  1004.   skoc=0;x=x1;y=y1;
  1005.   while (((x!=x2) || (y!=y2)) && (skoc==0))
  1006.   {
  1007.    if (x1<x2) x++; else if (x1>x2) x--;
  1008.    if (y1<y2) y++; else if (y1>y2) y--;
  1009.    if (((x!=x2) || (y!=y2)) && (s[x][y]!=0)) skoc=1;
  1010.   }
  1011. 1 ;kontrola pro p╪τce
  1012.   if (((y1-y2)*n>0) && (abs(y1-y2)<3))
  1013.    if (x1==x2)
  1014.    {
  1015.     if (s[x2][y2]==0)
  1016.      if (abs(y1-y2)==2)
  1017.      {
  1018.       if ((s[x1][y1-n]==0) && ((y1==3) || (y1==8))) ok=1;
  1019.      } else ok=1;
  1020.    } else
  1021.    if (abs(x1-x2)==1)
  1022.     if (s[x2][y2]*n<0) ok=1;
  1023. 2 ;kontrola pro jezdce
  1024.   if (((abs(x1-x2)==2) && (abs(y1-y2)==1)) ||
  1025.       ((abs(x1-x2)==1) && (abs(y1-y2)==2))) ok=1;
  1026. 3 ;kontrola pro st²elce
  1027.   if (abs(x1-x2)==abs(y1-y2)) ok=1;
  1028. 4 ;kontrola pro v╪º
  1029.   if (((x1!=x2) && (y1==y2)) || ((x1==x2) && (y1!=y2))) ok=1;
  1030. 5 ;kontrola pro dámu
  1031.   if ((abs(x1-x2)==abs(y1-y2)) ||
  1032.      (((x1!=x2) && (y1=y2)) || ((x1==x2) && (y1!=y2)))) ok=1;
  1033. 6 ;kontrola pro krále
  1034.   if ((abs(x1-x2)<2) && (abs(y1-y2)<2)) ok=1; else
  1035.   if ((abs(x1-x2)==2) && (y1==y2) && ((y1==2) || (y1==9)))
  1036.   {
  1037.    µach();
  1038.    if (((n==1) && (bs==0)) || ((n==-1) && (cs==0)))
  1039.    {
  1040.     if (n==1)
  1041.     {
  1042.      if (x2<x1)
  1043.      {
  1044.       if ((rosada[0]==0) && (s[2][9]==4) &&
  1045.           (s[5][9]==0) && (s[4][9]==0) && (s[3][9]==0)) ok=1;
  1046.      } else
  1047.      if ((rosada[1]==0) && (s[9][9]==4) &&
  1048.          (s[7][9]==0) && (s[8][9]==0)) ok=1;
  1049.     } else
  1050.     if (x2<x1)
  1051.     {
  1052.      if ((rosada[2]==0) && (s[2][2]==-4) &&
  1053.          (s[5][2]==0) && (s[4][2]==0) && (s[3][2]==0)) ok=1;
  1054.     } else
  1055.     if ((rosada[3]==0) && (s[9][2]==-4) &&
  1056.         (s[7][2]==0) && (s[8][2]==0)) ok=1;
  1057.    }
  1058.   }
  1059. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1060. /l ((abs(x1-x2)>1) || (abs(y1-y2)>1)) && (abs(s[x1][y1])!=2)
  1061. /t (skoc==0) &&
  1062.    ((x1!=x2) || (y1!=y2)) && (x1>1) && (x1<10) && (y1>1) && (y1<10) &&
  1063.    (x2>1) && (x2<10) && (y2>1) && (y2<10) &&
  1064.    (((s[x1][y1]>0) && (n==1)) || ((s[x1][y1]<0) && (n==-1))) &&
  1065.    (s[x2][y2]*n<=0)
  1066. \1 abs(s[x1][y1]) ?? case 1:
  1067. \2 case 2:
  1068. \3 case 3:
  1069. \4 case 4:
  1070. \5 case 5:
  1071. \6 case 6:
  1072. =SP---------------------------------------------------------------------------
  1073.  
  1074. ;-h---------------------------------------------------------------------------
  1075. void Skok(int max)  // zm╪na sm╪ru figury po napadení cizí
  1076. -s--Skok                                                                        ■   2  -2 -28   3
  1077.  Skok
  1078. màºe?
  1079.   /1
  1080.  ano
  1081.  1!
  1082. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1083. 1 ;zm╪na direkce figurky
  1084.   skoc=0;
  1085.   v[h].z=(v[h].z/9+1)*9-1;
  1086.   if (v[h].z>max) v[h].z=0;
  1087. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1088. /1 skoc==1
  1089. =SP---------------------------------------------------------------------------
  1090.  
  1091. ;-h---------------------------------------------------------------------------
  1092. void Vyno²ení( void )  // sníºení hloubky prohledávání v herním stromu
  1093. -s--Vyno²ení                                                                    ■   4  -2 -27   3
  1094. Vyno²ení
  1095.   1!
  1096. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1097. 1 ;t╪lo
  1098.   if (v[h].nejlepsi.x1==-1)
  1099.   {
  1100.    µach();
  1101.    if ((bs==0) && (cs==0)) v[h].nejlepsi.h=9000; else
  1102.     if (n==ja) v[h].nejlepsi.h=-10000; else v[h].nejlepsi.h=10000;
  1103.   }
  1104.   v[h-1].posledni.h=v[h].nejlepsi.h;
  1105.   if (h>1)
  1106.   {
  1107.    h--;n=n*-1;
  1108.    ok=1;
  1109.   } else h--;
  1110.   v[h].abs=1;
  1111. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1112. =SP---------------------------------------------------------------------------
  1113.  
  1114. ;-h---------------------------------------------------------------------------
  1115. void Zano²ení( void )  // zv∞τení hloubky prohledávaní v herním stromu
  1116. -s--Zano²ení                                                                    ■   4  -2 -27   3
  1117. Zano²ení
  1118.   1!
  1119. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1120. 1 ;t╪lo
  1121.   h++;n=n*-1;
  1122.   for (i=0; i<=3; i++) v[h].posledni.ros[i]=0;
  1123.   v[h].nejlepsi.h=0;
  1124.   v[h].nejlepsi.x1=-1;
  1125.   v[h].x=1;
  1126.   v[h].y=2;
  1127.   v[h].z=0;
  1128.   ok=0;
  1129. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1130. =SP---------------------------------------------------------------------------
  1131.  
  1132. ;-h---------------------------------------------------------------------------
  1133. void Test(int x,int y,int z)  // souƒást funkce VyhledejTah
  1134. -s--Test                                                                        ■   4  -2 -29   3
  1135. Test
  1136. 1!
  1137. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1138. 1 ;t╪lo
  1139.   ok=0;
  1140.   if ((skoc==0) && (s[x][y]*n<=0) &&
  1141.       (v[h].x>1) && (v[h].x<10) && (v[h].y>1) && (v[h].y<10) &&
  1142.       (x>1) && (x<10) && (y>1) && (y<10)) Potáhni(v[h].x,v[h].y,x,y);
  1143.   if ((ok==0) && (z>-1)) v[h].z=z;
  1144. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1145. =SP---------------------------------------------------------------------------
  1146.  
  1147. ;-h---------------------------------------------------------------------------
  1148. void Obnovµachovnici( void )  // p²enese informace o stavu τachovnice ze zálohy
  1149. -s--Obnovµachovnici                                                             ■   2  -2 -24   3
  1150. Obnovµachovnici
  1151.   první~rozm╪r
  1152.        #1
  1153.   druh∞~rozm╪r
  1154.        #2
  1155. :s[x][y]=p[x][y]
  1156. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1157. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1158. #1 y=2; y<=9; y++
  1159. #2 x=2; x<=9; x++
  1160. =SP---------------------------------------------------------------------------
  1161.  
  1162. ;-h---------------------------------------------------------------------------
  1163. void OceσPozici(int pocitat)  // ohdnotí danou pozici ƒíslem
  1164. -s--OceσPozici                                                                  ■  15  -2 -15   3
  1165.              OceσPozici
  1166.       ___________│_
  1167.      0! procházení~τachovnice
  1168.                   #y
  1169.                   │
  1170.                   #x
  1171.          _______cen╪ní_________
  1172.   _>>obracítko<<____   │ centralizace
  1173.   /:s[x][y]*ja<0   /   │     c!
  1174. :o=-1             :o=1 │
  1175.                        │
  1176.           materiální~&~poziƒní~cen╪ní
  1177.              \1  \2   \3   \4 \5  \6
  1178.            p╪τec │ st²elec │ dáma │
  1179.             1!   │   3!    │ 5!   │
  1180.                  │         │      │
  1181.                jezdec     v╪º    král
  1182.                 2!        4!     6!
  1183. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1184. 0 ;inicializace: hodnoty + p²iƒtení uzlu a τachu
  1185.   v[h].posledni.h=0;
  1186.   if (pocitat==1) count++;
  1187.   v[h].abs=1;
  1188.   µach();
  1189.   if ((bs==1) || (cs==1)) v[h].posledni.h=v[h].posledni.h+check;
  1190. 1 ;materiální a poziƒní ocen╪ní p╪τce
  1191.   v[h].posledni.h=v[h].posledni.h+pesec*o;
  1192.   i=1;
  1193.   while ((s[x][y-i*ja]==0) && (i<3))
  1194.   {
  1195.    if (i==2)
  1196.    {
  1197.     if (ja==1)
  1198.     {
  1199.      if (y==8) v[h].posledni.h=v[h].posledni.h+pole*o;
  1200.     } else if (y==3) v[h].posledni.h=v[h].posledni.h+pole*o;
  1201.    } else v[h].posledni.h=v[h].posledni.h+pole*o;
  1202.    i++;
  1203.   }
  1204. 2 ;materiální a poziƒní ocen╪ní jezdce
  1205.   v[h].posledni.h=v[h].posledni.h+jezdec*o;
  1206.   if (s[x-2][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1207.   if (s[x-1][y-2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1208.   if (s[x+1][y-2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1209.   if (s[x+2][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1210.   if (s[x+2][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1211.   if (s[x+1][y+2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1212.   if (s[x-1][y+2]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1213.   if (s[x-2][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1214. 3 ;materiální a poziƒní ocen╪ní st²elce
  1215.   v[h].posledni.h=v[h].posledni.h+strelec*o;
  1216.   i=1;while (s[x-i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1217.   i=1;while (s[x+i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1218.   i=1;while (s[x+i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1219.   i=1;while (s[x-i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1220. 4 ;materiální a poziƒní ocen╪ní v╪ºe
  1221.   v[h].posledni.h=v[h].posledni.h+vez*o;
  1222.   i=1;while (s[x-i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1223.   i=1;while (s[x][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1224.   i=1;while (s[x+i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1225.   i=1;while (s[x][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1226. 5 ;materiální a poziƒní ocen╪ní dámy
  1227.   v[h].posledni.h=v[h].posledni.h+dama*o;
  1228.   i=1;while (s[x-i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1229.   i=1;while (s[x-i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1230.   i=1;while (s[x][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1231.   i=1;while (s[x+i][y-i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1232.   i=1;while (s[x+i][y]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1233.   i=1;while (s[x+i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1234.   i=1;while (s[x][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1235.   i=1;while (s[x-i][y+i]==0) { v[h].posledni.h=v[h].posledni.h+pole*o;i++; }
  1236. 6 ;materiální a poziƒní ocen╪ní krále
  1237.   v[h].posledni.h=v[h].posledni.h+kral*o;
  1238.   if (s[x-1][y]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1239.   if (s[x-1][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1240.   if (s[x][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1241.   if (s[x+1][y-1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1242.   if (s[x+1][y]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1243.   if (s[x+1][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1244.   if (s[x][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1245.   if (s[x-1][y+1]==0) v[h].posledni.h=v[h].posledni.h+pole*o;
  1246. c ;centralizaƒní faktor
  1247.   v[h].posledni.h=v[h].posledni.h+ctab[x-2][y-2]*o;
  1248. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1249. #y y=2; y<=9; y++
  1250. #x x=2; x<=9; x++
  1251. \1 abs(s[x][y]) ?? case 1:
  1252. \2 case 2:
  1253. \3 case 3:
  1254. \4 case 4:
  1255. \5 case 5:
  1256. \6 case 6:
  1257. =SP---------------------------------------------------------------------------
  1258.  
  1259. ;-h---------------------------------------------------------------------------
  1260. void VyhledejTah(int maxhloubka, int pocitat)  // vypoƒítá pokraƒování
  1261. -s--VyhledejTah                                                                 ■   2  -2  13   3
  1262.                                 ________________VyhledejTah_________________
  1263.                      limit+~záloha~τachovnice inicializace hlavní~cyklus konec
  1264.                                 /:pocitat==1      0!             +c       u!
  1265.                  _______________│_______________                 │
  1266.                limit                  │      záloha              │
  1267.    ______________│_______________     │     :count=0             │
  1268.    \a    \b          \2         \3    │        #y                │
  1269. pàltahy  │       __turnaj__ nekoneƒno │        │                 │
  1270. :limit=0 │       /:n==1   /  :limit=0 │        #x                │
  1271.          │      bíl∞      │           │ :p[x][y]=s[x][y]         │
  1272.          │ :limit=kon[36] │           │                          │
  1273.          │                │           │                          │
  1274.         ƒas             ƒern∞         │                          │
  1275.    :limit=kon[35]   :limit=kon[37]    │                          │
  1276.                                       │                          │
  1277.                                    hloubka                       │
  1278.                                       /:kon[33]>0                │
  1279.                                 :maxhloubka=4                    │
  1280.                                                                  │
  1281.                   _______________________________________________│________________________________________________
  1282.               __posun__                   test~figur              konec~τachovnice?     vratiteln∞~tah vykreslení~a~p²eruτení
  1283.              kam? :v[h].z++ __________________│__________________         /k                  /:ok==1           p!
  1284.               /:v[h].z==0   \1    \2      \3    \4  \5   \6     \        ano          _______ano________
  1285.         ______│______     p╪τec jezdec st²elec v╪º dáma král   nic   :Vyno²ení() max~hloubka?       vrácení
  1286.         /:v[h].x==9 /      1!    2!      3!    4!  5!   6!  :v[h].z=0                 /:h==maxhloubka v!
  1287.     :v[h].x=2   :v[h].x++                                                            ano
  1288.     :v[h].y++                                                                :OceσPozici(pocitat)
  1289. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1290. 0 ;inicializace
  1291.   bz=b;cz=c;
  1292.   b=0;c=0;
  1293.   ja=n;
  1294.   v[0].nejlepsi.x1=-1;
  1295.   h=0;
  1296.   Zano²ení();
  1297.   n=ja;
  1298.   skoc=0;
  1299.   StopkyNuluj();StopkyStart();
  1300.   MyτZm╪σGrKurzor(43);MyτZobrazKurzor();
  1301.   VyprázdniFrontuKláves();
  1302. u ;dokonƒení
  1303.   MyτSchovejKurzor();
  1304.   if (v[1].nejlepsi.x1==-2)
  1305.   {
  1306.    StopkyStop();
  1307.    ¼ekej(kon[38]);MyτVyprázdniFrontuUdálostí();
  1308.    Myτ¼tiUdálost(gMyτUdálost);
  1309.    x=gMyτUdálost.X;
  1310.    y=gMyτUdálost.Y;
  1311.    RozvinovacíNabídky();
  1312.   } else FishStop();
  1313.   b=bz;c=cz;
  1314. 1 ;test pro p╪τce
  1315.   switch (v[h].z)
  1316.   {
  1317.    case 1:
  1318.     if (s[v[h].x][v[h].y-1*n]==0) Test(v[h].x,v[h].y-1*n,-1); else skoc=1;
  1319.    break;
  1320.    case 2:
  1321.     if ((s[v[h].x][v[h].y-2*n]==0) &&
  1322.         (((n==1) && (v[h].y==8)) || ((n==-1) && (v[h].y==3))))
  1323.      Test(v[h].x,v[h].y-2*n,-1);
  1324.     skoc=0;
  1325.    break;
  1326.    case 3:
  1327.     if (s[v[h].x-1][v[h].y-n]*n<0) Test(v[h].x-1,v[h].y-n,-1);
  1328.    break;
  1329.    case 4:
  1330.     if (s[v[h].x+1][v[h].y-n]*n<0) Test(v[h].x+1,v[h].y-n,-1);
  1331.     v[h].z=0;
  1332.   }
  1333. 2 ;test pro jezdce
  1334.   switch (v[h].z)
  1335.   {
  1336.    case 1: Test(v[h].x-2,v[h].y-1,-1);break;
  1337.    case 2: Test(v[h].x-1,v[h].y-2,-1);break;
  1338.    case 3: Test(v[h].x+1,v[h].y-2,-1);break;
  1339.    case 4: Test(v[h].x+2,v[h].y-1,-1);break;
  1340.    case 5: Test(v[h].x+2,v[h].y+1,-1);break;
  1341.    case 6: Test(v[h].x+1,v[h].y+2,-1);break;
  1342.    case 7: Test(v[h].x-1,v[h].y+2,-1);break;
  1343.    case 8:
  1344.     Test(v[h].x-2,v[h].y+1,-1);
  1345.     v[h].z=0;
  1346.   }
  1347. 3 ;test pro st²elce
  1348.   switch (v[h].z/9)
  1349.   {
  1350.    case 0: Test(v[h].x-v[h].z,v[h].y-v[h].z,8);break;
  1351.    case 1: Test(v[h].x+(v[h].z-8),v[h].y-(v[h].z-8),17);break;
  1352.    case 2: Test(v[h].x+(v[h].z-17),v[h].y+(v[h].z-17),26);break;
  1353.    case 3: Test(v[h].x-(v[h].z-26),v[h].y+(v[h].z-26),0);break;
  1354.    default: v[h].z=0;
  1355.   }
  1356.   Skok(26);
  1357. 4 ;test pro v╪º
  1358.   switch (v[h].z/9)
  1359.   {
  1360.    case 0: Test(v[h].x-v[h].z,v[h].y,8);break;
  1361.    case 1: Test(v[h].x,v[h].y-(v[h].z-8),17);break;
  1362.    case 2: Test(v[h].x+(v[h].z-17),v[h].y,26);break;
  1363.    case 3: Test(v[h].x,v[h].y+(v[h].z-26),0);break;
  1364.    default: v[h].z=0;
  1365.   }
  1366.   Skok(26);
  1367. 5 ;test pro dámu
  1368.   switch (v[h].z/9)
  1369.   {
  1370.    case 0: Test(v[h].x-v[h].z,v[h].y,8);break;
  1371.    case 1: Test(v[h].x-(v[h].z-8),v[h].y-(v[h].z-8),17);break;
  1372.    case 2: Test(v[h].x,v[h].y-(v[h].z-17),26);break;
  1373.    case 3: Test(v[h].x+(v[h].z-26),v[h].y-(v[h].z-26),35);break;
  1374.    case 4: Test(v[h].x+(v[h].z-35),v[h].y,44);break;
  1375.    case 5: Test(v[h].x+(v[h].z-44),v[h].y+(v[h].z-44),53);break;
  1376.    case 6: Test(v[h].x,v[h].y+(v[h].z-53),62);break;
  1377.    case 7: Test(v[h].x-(v[h].z-62),v[h].y+(v[h].z-62),0);break;
  1378.    default: v[h].z=0;
  1379.   }
  1380.   Skok(62);
  1381. 6 ;test pro krále
  1382.   switch (v[h].z)
  1383.   {
  1384.    case 1: Test(v[h].x-1,v[h].y,-1);break;
  1385.    case 2: Test(v[h].x-1,v[h].y-1,-1);break;
  1386.    case 3: Test(v[h].x,v[h].y-1,-1);break;
  1387.    case 4: Test(v[h].x+1,v[h].y-1,-1);break;
  1388.    case 5: Test(v[h].x+1,v[h].y,-1);break;
  1389.    case 6: Test(v[h].x+1,v[h].y+1,-1);break;
  1390.    case 7: Test(v[h].x,v[h].y+1,-1);break;
  1391.    case 8: Test(v[h].x-1,v[h].y+1,-1);break;
  1392.    case 9:
  1393.     if ((v[h].y==2) || (v[h].y==9))
  1394.     {
  1395.      µach();
  1396.      if (((n==1) && (bs==0)) || ((n==-1) && (cs==0)))
  1397.      {
  1398.       if (n==1)
  1399.       {
  1400.        if ((rosada[0]==0) && (s[2][9]==4) &&
  1401.            (s[5][9]==0) && (s[4][9]==0) && (s[3][9]==0)) Test(v[h].x-2,v[h].y,-1);
  1402.       } else
  1403.       {
  1404.        if ((rosada[2]==0) && (s[2][2]==-4) &&
  1405.            (s[5][2]==0) && (s[4][2]==0) && (s[3][2]==0)) Test(v[h].x-2,v[h].y,-1);
  1406.       }
  1407.      }
  1408.     }
  1409.    break;
  1410.    case 10:
  1411.     if ((v[h].y==2) || (v[h].y==9))
  1412.     {
  1413.      µach();
  1414.      if (((n==1) && (bs==0)) || ((n==-1) && (cs==0)))
  1415.      {
  1416.       if (n==1)
  1417.       {
  1418.        if ((rosada[1]==0) && (s[9][9]==4) &&
  1419.             (s[7][9]==0) && (s[8][9]==0)) Test(v[h].x+2,v[h].y,-1);
  1420.       } else
  1421.       {
  1422.        if ((rosada[3]==0) && (s[9][2]==-4) &&
  1423.            (s[7][2]==0) && (s[8][2]==0)) Test(v[h].x+2,v[h].y,-1);
  1424.       }
  1425.      }
  1426.     }
  1427.     v[h].z=0;
  1428.   }
  1429. v ;vrácení tahu + vyno²ení/zano²ení
  1430.   if (v[h].abs==1)
  1431.    if (v[h].nejlepsi.x1==-1) v[h].nejlepsi=v[h].posledni; else
  1432.     if (h%2==1)
  1433.     {
  1434.      if (v[h].posledni.h>v[h].nejlepsi.h) v[h].nejlepsi=v[h].posledni;
  1435.     } else
  1436.     if (v[h].posledni.h<v[h].nejlepsi.h) v[h].nejlepsi=v[h].posledni;
  1437.   if ((v[h].abs==1) && (h>1) &&
  1438.      (v[h-1].nejlepsi.x1!=-1) &&
  1439.      (((h%2==1) && (v[h].posledni.h>v[h-1].nejlepsi.h)) ||
  1440.       ((h%2==0) && (v[h].posledni.h<v[h-1].nejlepsi.h))))
  1441.   {
  1442.    Vra£Tah();Vyno²ení();
  1443.    Vra£Tah();
  1444.   } else
  1445.   if (v[h].abs==1) Vra£Tah(); else Zano²ení();
  1446. p ;vykreslení hodin a moºné p²ijetí podn╪tu k p²eruτení
  1447.   FishP²iƒti(ja);
  1448.   if (pocitat==1)
  1449.   {
  1450.    if (((kon[33]==1) || (kon[33]==2)) &&
  1451.       ((cas.Hodiny*3600+cas.Minuty*60+cas.Sekundy)+1>=limit))
  1452.    {
  1453.     if (v[1].nejlepsi.x1==-1) v[1].nejlepsi=v[1].posledni;
  1454.     Obnovµachovnici();
  1455.     h=0;n=ja;
  1456.    } else
  1457.    {
  1458.     if (BylaStisknutaKlávesa()==1)
  1459.     {
  1460.      if ((¼tiKlávesuZFronty()==KlEsc) && (count>0))
  1461.      {
  1462.       if (v[1].nejlepsi.x1==-1) v[1].nejlepsi=v[1].posledni;
  1463.       Obnovµachovnici();
  1464.       h=0;n=ja;
  1465.      }
  1466.     } else
  1467.     {
  1468.      Myτ¼tiUdálost(gMyτUdálost);
  1469.      x=gMyτUdálost.X;
  1470.      y=gMyτUdálost.Y;
  1471.      if ((gMyτUdálost.Tlaƒítka!=0) && (x>2) && (y>2) && (x<334) && (y<15))
  1472.      {
  1473.       Obnovµachovnici();
  1474.       v[1].nejlepsi.x1=-2;
  1475.       h=0;n=ja;
  1476.      }
  1477.     }
  1478.    }
  1479.   }
  1480. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1481. /k (v[h].z==0) && (v[h].x==9) && (v[h].y==9)
  1482. #y y=2; y<=9; y++
  1483. #x x=2; x<=9; x++
  1484. +c h!=0
  1485. \a kon[33] ?? case 0:
  1486. \b case 1:
  1487. \1 s[v[h].x][v[h].y]*n ?? case 1:
  1488. \2 case 2:
  1489. \3 case 3:
  1490. \4 case 4:
  1491. \5 case 5:
  1492. \6 case 6:
  1493. =SP---------------------------------------------------------------------------
  1494.  
  1495. ;-h---------------------------------------------------------------------------
  1496. int SrovnejTah(int t1,int t2)  // porovná dva tahy partiá²e na shodnost
  1497. -s--SrovnejTah                                                                  ■   2  -2 -21   3
  1498.      SrovnejTah
  1499.     __rovnost?__
  1500.     /1         /
  1501.    ano         ne
  1502. :return(1) :return(0)
  1503. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1504. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1505. /1 (partiar[t1].x1==partiar[t2].x1) &&
  1506.    (partiar[t1].y1==partiar[t2].y1) &&
  1507.    (partiar[t1].x2==partiar[t2].x2)  &&
  1508.    (partiar[t1].y2==partiar[t2].y2)
  1509. =SP---------------------------------------------------------------------------
  1510.  
  1511. ;-h---------------------------------------------------------------------------
  1512. void Okno(int x1,int y1,int x2,int y2, int transp)  // plastické okno
  1513. -s--Okno                                                                        ■   4  -2 -20   3
  1514.  ________Okno
  1515. 1! transparentní?
  1516.          /:transp==0
  1517.         ano
  1518.         2!
  1519. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1520. 1 ;vykreslení plastického okna
  1521.   GrNastavBarvuPop²edí(0);
  1522.   GrKresliLinku(x1+1,y1+1,x2-1,y1+1);GrKresliLinku(x2-1,y1+1,x2-1,y2-1);
  1523.   GrKresliLinku(x2-1,y2-1,x1+1,y2-1);GrKresliLinku(x1+1,y2-1,x1+1,y1+1);
  1524.   GrNastavBarvuPop²edí(kon[14]);
  1525.   GrKresliLinku(x2,y1,x2,y2);GrKresliLinku(x2,y2,x1,y2);
  1526.   GrNastavBarvuPop²edí(kon[13]);
  1527.   GrKresliLinku(x1,y1,x2,y1);GrKresliLinku(x1,y1,x1,y2);
  1528. 2 ;prokreslení vnit²ní ƒásti (netransparentní okno)
  1529.   GrNastavBarvuPozadí(kon[12]);
  1530.   GrKresliVypln╪n∞Obdélník(x1+2,y1+2,x2-2,y2-2);
  1531. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1532. =SP---------------------------------------------------------------------------
  1533.  
  1534. ;-h---------------------------------------------------------------------------
  1535. void Piτ(int px,int py,int pozadi,string text)  // text se stínem, pop². pozadím
  1536. -s--Piτ                                                                         ■   3  -2 -37   3
  1537.             Piτ
  1538.    :GrNastavText(pozadi)
  1539.   b:(kon[11])!
  1540. p:(px+1,py+1)!
  1541.     :GrPiτⁿet╪zec(text)
  1542.       :GrNastavText(1)
  1543.   b:(kon[10])!
  1544.     p:(px,py)!
  1545.     :GrPiτⁿet╪zec(text)
  1546. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1547. b GrNastavBarvuPop²edí
  1548. p GrNastavPozici
  1549. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1550. =SP---------------------------------------------------------------------------
  1551.  
  1552. ;-h---------------------------------------------------------------------------
  1553. int Nabídka(int px,int py,int a, int b)  // p²eddefinovaná nabídka
  1554. -s--Nabídka                                                                     ■  20  -2  -4   3
  1555.                         Nabídka
  1556.       ___________________:ii=0____________________
  1557. nejdelτí~text základ vnit²ek     volba   bylo~n╪co~zvoleno?
  1558.       #c       o!       #c     :Klik(0,1)     /v     /
  1559.     delτí?        okno~s~textem              ano     ne
  1560.       /s               p!                    v! :return(-1)
  1561.      ano
  1562.      1!
  1563. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1564. 1 ;p²i²azení indexu zatím nejdelτího ²et╪zce
  1565.   ii=StrVelikost(vyber[a][b].nabidka[i]);
  1566. o ;základní okno
  1567.   Okno(px,py,px+ii*Grµí²kaZnaku+9,py+(GrV∞τkaZnaku+6)*(vyber[a][b].delka+1)+4,0);
  1568. p ;podruºné okno + text
  1569.   Okno(px+2+1,py+(GrV∞τkaZnaku+6)*i+3,
  1570.        px+ii*Grµí²kaZnaku+4+2,py+(GrV∞τkaZnaku+6)*(i+1)+1,1);
  1571.   Piτ(px+3+1,py+(GrV∞τkaZnaku+6)*i+5,1,vyber[a][b].nabidka[i]);
  1572. v ;návrat zvolené hodnoty
  1573.   return((y-py-3)/(GrV∞τkaZnaku+6));
  1574. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1575. /s StrVelikost(vyber[a][b].nabidka[i])>ii
  1576. /v (x>px+2) && (x<px+ii*Grµí²kaZnaku+7) &&
  1577.    (y>py+2) && (y<py+(GrV∞τkaZnaku+6)*(vyber[a][b].delka+1)+2)
  1578. #c i=0; i<=vyber[a][b].delka; i++
  1579. =SP---------------------------------------------------------------------------
  1580.  
  1581. ;-h---------------------------------------------------------------------------
  1582. void LCD(int x, int y, long cislo, int cif, int typ)  // v∞stup údajà na displej
  1583. -s--LCD                                                                         ■   4  -2 -19   3
  1584.  __________LCD__________
  1585. 1! v∞poƒet~základu  ƒíslice
  1586.           #1           +1
  1587.   :zaklad=zaklad*10 pokraƒuj
  1588.                       2!
  1589. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1590. 1 ;deklarace + hlavní okno
  1591.   long stare=cislo;
  1592.   long zaklad=1;
  1593.   Okno(x-2,y-2,x+cif*39+1,y+30,1);
  1594. 2 ;vykreslení ƒíslice a úprava hodnot
  1595.   zaklad=zaklad/10;
  1596.   ii=cislo/zaklad;
  1597.   if (cislo-ii*zaklad==stare)
  1598.    GrKresliP²edm╪t(2011+15*typ,0,x,y); else
  1599.    GrKresliP²edm╪t(2001+15*typ+ii,0,x,y);
  1600.   cislo=cislo-ii*zaklad;
  1601.   x=x+39;
  1602. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1603. #1 i=1; i<=cif; i++
  1604. +1 zaklad>1
  1605. =SP---------------------------------------------------------------------------
  1606.  
  1607. ;-h---------------------------------------------------------------------------
  1608. void Notes(string poznamka)  // vypíτe poznámku k objektu pod kurzorem
  1609. -s--Notes                                                                       ■   5  -2 -28   3
  1610.  Notes
  1611. :smaz=1
  1612.   1!
  1613. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1614. 1 ;napíτe poznámku a p²iƒte ƒas
  1615.   StopkyNuluj();StopkyStart();
  1616.   Okno(x-2,y-2,x+StrVelikost(poznamka)*Grµí²kaZnaku+2,y+GrV∞τkaZnaku+2,1);
  1617.   GrNastavText(0);
  1618.   GrNastavBarvuPop²edí(0);GrNastavBarvuPozadí(kon[19]);
  1619.   GrNastavPozici(x,y);GrPiτⁿet╪zec(poznamka);
  1620.   do Myτ¼tiUdálost(gMyτUdálost); while (gMyτUdálost.Tlaƒítka!=0);
  1621.   GrNastavBarvuPozadí(0);
  1622.   GrKresliVypln╪n∞Obdélník
  1623.    (x-2,y-2,x+StrVelikost(poznamka)*Grµí²kaZnaku+2,y+GrV∞τkaZnaku+2);
  1624.   FishStop();
  1625. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1626. =SP---------------------------------------------------------------------------
  1627.  
  1628. ;-h---------------------------------------------------------------------------
  1629. string Txt(int index)  // vypíτe hláτku ƒíslo 'index' aktuálním jazykem
  1630. -s--Txt                                                                         ■   4  -2 -30   3
  1631. Txt
  1632. 1!
  1633. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1634. 1 ;t╪lo
  1635.   txt=SouborOtev²i("*\\partie.lng",SouborP²ístup¼tení|SouborP²ístupTextov∞);
  1636.   do{
  1637.    Soubor¼tiSⁿet╪zec(txt,str);
  1638.    StrSmaº(str,StrVelikost(str)-1,1);
  1639.   } while (str!="***");
  1640.   for (z=0; z<=index; z++)
  1641.    for (iii=0; iii<=1; iii++)
  1642.     if (iii==kon[40]) 
  1643.      Soubor¼tiSⁿet╪zec(txt,str);
  1644.     else Soubor¼tiNov∞ⁿádek(txt);
  1645.   StrSmaº(str,StrVelikost(str)-1,1);
  1646.   SouborZav²i(txt);
  1647.   return(str);
  1648. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1649. =SP---------------------------------------------------------------------------
  1650.  
  1651. ;-h---------------------------------------------------------------------------
  1652. void Popis( void )  // popis políƒka τachovnice (kámen+pozice)
  1653. -s--Popis                                                                       ■   5  -2  12   3
  1654.                                       Popis
  1655.                                   Urƒení~pozice
  1656.                                :px=x1+95!
  1657.                                :py=58-y1!
  1658.          _____________________________misto+figurka_____________________________
  1659.          \1          \2         \3          \4         \5          \6          \
  1660. :Notes(Txt(0)+px+py) │ :Notes(Txt(2)+px+py) │ :Notes(Txt(4)+px+py) │   :Notes(""+px+py);
  1661.                      │                      │                      │
  1662.            :Notes(Txt(1)+px+py);   :Notes(Txt(3)+px+py)   :Notes(Txt(5)+px+py)
  1663. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1664. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1665. \1 abs(s[x1][y1]) ?? case 1:
  1666. \2 case 2:
  1667. \3 case 3:
  1668. \4 case 4:
  1669. \5 case 5:
  1670. \6 case 6:
  1671. =SP---------------------------------------------------------------------------
  1672.  
  1673. ;-h---------------------------------------------------------------------------
  1674. void Tlaƒítko(int x,int y,string text,int stiskle)  // vykreslí talƒítko
  1675. -s--Tlaƒítko                                                                    ■   2  -2 -18   3
  1676.          Tlaƒítko
  1677.            1!
  1678.        _____│_____
  1679.  ___stisklé?___ text
  1680.  /:stiskle==1 / 4!
  1681. ano           ne
  1682. 2!           3!
  1683. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1684. 1 ;vykreslení základu tlaƒítka
  1685.   GrNastavBarvuPozadí(kon[12]);
  1686.   GrKresliVypln╪n∞Obdélník
  1687.    (x+2,y+2,x+StrVelikost(text)*Grµí²kaZnaku+1,y+GrV∞τkaZnaku+3);
  1688. 2 ;stisklé tlaƒítko
  1689.   Okno(x+StrVelikost(text)*Grµí²kaZnaku+3,y+GrV∞τkaZnaku+3,x,y,1);
  1690. 3 ;volné tlaƒítko
  1691.   Okno(x,y,x+StrVelikost(text)*Grµí²kaZnaku+3,y+GrV∞τkaZnaku+3,1);
  1692. 4 ;text v tlaƒítku
  1693.   Piτ(x+1,y+1,1,text);
  1694. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1695. =SP---------------------------------------------------------------------------
  1696.  
  1697. ;-h---------------------------------------------------------------------------
  1698. void Volba(int x, int y, int a,int b)  // okénko s nastavením
  1699. -s--Volba                                                                       ■   4  -2 -29   3
  1700. Volba
  1701.  1!
  1702. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1703. 1 ;t╪lo
  1704.   ii=0;
  1705.   for (i=0; i<=vyber[1][a].delka; i++)
  1706.    if (StrVelikost(vyber[1][a].nabidka[i])>ii)
  1707.     ii=StrVelikost(vyber[1][a].nabidka[i]);
  1708.   Okno(x,y,x+ii*Grµí²kaZnaku+4,y+GrV∞τkaZnaku+3,1);
  1709.   Piτ(x+1,y+1,1,vyber[1][a].nabidka[kon[b]]);
  1710. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1711. =SP---------------------------------------------------------------------------
  1712.  
  1713. ;-h---------------------------------------------------------------------------
  1714. void MenuProst²edí( void )  // okno nastavení prost²edí
  1715. -s--MenuProst²edí                                                               ■   9  -2  83   3
  1716.                                                                                           MenuProst²edí
  1717.                                                                                            :ok=0!
  1718.                                                                                                 *:ok==0
  1719.                                                                                        Nastavení~prost²edí
  1720.                                                                                                1!
  1721.                                                                                             :Klik(0,1)
  1722.           _______________________________________________________________________________oblasti~kliknutí_______________________________________________________________
  1723.           /a             /b            /c            /d            /e            /f            /g               /h          /i                          /j      /k     /l
  1724.        bílé~kameny  ƒerné~kameny   bílá~pole     ƒerná~pole   povrch~hodin   typ~hodin       notace       pomlƒky~k²íºky displej                      barva typ~barvy  OK
  1725.            │             │             │             │             │             │             │          /:kon[7]==1 /     │ :kon[9+kon[20]]=(x-127)/10!       │ :ok=1!
  1726.            │  :i=Nabídka(129,157,1,0)  │  :i=Nabídka(129,217,1,1)  │  :i=Nabídka(129,277,1,3)  │          │           │     │                                   │     3!
  1727.            │             /x            │             /x            │             /x            │ :kon[7]=0!  :kon[7]=1!     │                                   │
  1728.            │             │             │             │             │             │             │                            │                                   │
  1729.            │    :kon[1]=i!             │    :kon[3]=i!             │    :kon[5]=i!             │                            │                                   │
  1730.            │                           │                           │                           │                            │                                   │
  1731. :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)
  1732.            /x                          /x                          /x                          /x                           /x                                  /x
  1733.            │                           │                           │                           │                            │                                   │
  1734.   :kon[0]=i!                  :kon[2]=i!                  :kon[4]=i!                  :kon[6]=i!                   :kon[8]=i!                         :kon[20]=i!
  1735. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1736. f VyprázdniFrontuKláves();
  1737. 1 ;vykreslení okna nastavení prost²edí
  1738.   Okno(121,94,519,386,0);
  1739.   Piτ(125,98,1,Txt(44));Volba(125,112,0,0);
  1740.   Piτ(125,128,1,Txt(45));Volba(125,142,0,1);
  1741.   Piτ(125,158,1,Txt(46));Volba(125,172,1,2);
  1742.   Piτ(125,188,1,Txt(47));Volba(125,202,1,3);
  1743.   Piτ(125,218,1,Txt(48));Volba(125,232,2,4);
  1744.   Piτ(125,248,1,Txt(49));Volba(125,262,3,5);
  1745.   Piτ(125,278,1,Txt(50));Volba(125,292,4,6);
  1746.   Okno(125,308,137,308+GrV∞τkaZnaku,0);
  1747.   if (kon[7]==1)
  1748.   {
  1749.    GrNastavBarvuPop²edí(15);
  1750.    GrKresliLinku(127,310,135,306+GrV∞τkaZnaku);
  1751.    GrKresliLinku(135,310,127,306+GrV∞τkaZnaku);
  1752.   }
  1753.   Piτ(141,308,1,Txt(51));
  1754.   Piτ(125,324,1,Txt(52));Volba(125,338,5,8);
  1755.   Okno(125,355,289,366,1);
  1756.   for (i=0; i<=15; i++)
  1757.   {
  1758.    GrNastavBarvuPozadí(i);
  1759.    GrKresliVypln╪n∞Obdélník(127+i*10,357,137+i*10,364);
  1760.   }
  1761.   Okno(291,355,305,366,1);
  1762.   GrNastavBarvuPozadí(kon[9+kon[20]]);
  1763.   GrKresliVypln╪n∞Obdélník(293,357,303,364);
  1764.   Volba(125,370,6,20);
  1765.   Okno(279,97,516,219,1);
  1766.   for (i=1; i<=6; i++)
  1767.   {
  1768.    GrKresliP²edm╪t(kon[0]*15+i,1,242+i*39,99);
  1769.    GrKresliP²edm╪t(kon[1]*15+i+6,1,242+i*39,129);
  1770.    if (i%2==1)
  1771.     GrKresliP²edm╪t(kon[2]*15+14,0,242+i*39,159); else
  1772.     GrKresliP²edm╪t((kon[3]+1)*15,0,242+i*39,159);
  1773.    GrKresliP²edm╪t(1000+kon[4]*45+i,1,242+i*39,189);
  1774.   }
  1775.   Tlaƒítko(497,370,"OK",0);
  1776. 3 ;zruτení okna
  1777.   GrNastavBarvuPozadí(kon[9]);GrKresliVypln╪n∞Obdélník(121,94,519,386);
  1778. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1779. *n PràchodnostP²edm╪tuP²edB() Je 0
  1780. /a (x>125) && (y>112) && (x<248) && (y<125)
  1781. /b (x>125) && (y>142) && (x<248) && (y<155)
  1782. /c (x>125) && (y>172) && (x<281) && (y<185)
  1783. /d (x>125) && (y>202) && (x<281) && (y<215)
  1784. /e (x>125) && (y>232) && (x<217) && (y<245)
  1785. /f (x>125) && (y>262) && (x<337) && (y<275)
  1786. /g (x>125) && (y>292) && (x<361) && (y<305)
  1787. /h (x>125) && (y>308) && (x<137) && (y<318)
  1788. /i (x>125) && (y>338) && (x<200) && (y<353)
  1789. /j (x>126) && (y>356) && (x<288) && (y<365)
  1790. /k (x>125) && (y>370) && (x<280) && (y<385)
  1791. /l (x>497) && (y>370) && (x<518) && (y<385)
  1792. /x i!=-1
  1793. =SP---------------------------------------------------------------------------
  1794.  
  1795. ;-h---------------------------------------------------------------------------
  1796. void MenuHledání( void )  // podrobné nastavení vyhledávacího algoritmu
  1797. -s--MenuHledání                                                                 ■   8  -2 -13   3
  1798.                                MenuHledání
  1799.                                   :ok=0
  1800.                                     *:ok==0
  1801.                             Nastavení~hledání
  1802.                                    1!
  1803.            ____________________:Klik(0,1);__________________
  1804.            /a                 /b   /c /d  /e  /f  /g  /h   /i
  1805.         typ~hry            pàltahy bm bs tbm tbs tcm tcs :ok=1
  1806. :i=Nabídka(192,207,1,8)      b!   c! d!  e!  f!  g!  h!
  1807.            /:i~Není~-1
  1808.        :kon[33]=i
  1809. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1810. 1 ;vykreslení
  1811.   Okno(186,176,454,306,0);
  1812.   Piτ(188,178,0,Txt(16));
  1813.   Volba(189,192,8,33);
  1814.   GrNastavBarvuPozadí(6);
  1815.   for (i=0; i<=3; i++)
  1816.   {
  1817.    if (i==0) str="  "; else str="  :  ";
  1818.    Piτ(188,220+i*24,0,str);
  1819.    Piτ(188,208+i*24,1,Txt(17+i));
  1820.   }
  1821.   Tlaƒítko(432,290,"OK",0);
  1822.   GrNastavBarvuPop²edí(14);
  1823.   GrNastavPozici(188,220);GrPiτL¼íslo(kon[34],-1);
  1824.   for (i=0; i<=2; i++)
  1825.   {
  1826.    GrNastavPozici(188,244+i*24);GrPiτL¼íslo(kon[35+i]/60,-1);
  1827.    GrNastavPozici(212,244+i*24);GrPiτL¼íslo(kon[35+i]%60,-1);
  1828.   }
  1829.   /*GrNastavPozici(188,244);GrPiτL¼íslo(kon[35]/60,-1);
  1830.   GrNastavPozici(212,244);GrPiτL¼íslo(kon[35]%60,-1);
  1831.   GrNastavPozici(188,268);GrPiτL¼íslo(kon[36]/60,-1);
  1832.   GrNastavPozici(212,268);GrPiτL¼íslo(kon[36]%60,-1);
  1833.   GrNastavPozici(188,292);GrPiτL¼íslo(kon[37]/60,-1);
  1834.   GrNastavPozici(212,292);GrPiτL¼íslo(kon[37]%60,-1);*/
  1835. b ;pàltahy
  1836.   GrNastavPozici(189,221);
  1837.   Gr¼tiI¼íslo("",i,2,0,224);
  1838.   if (i>0) kon[34]=i;
  1839. c ;ƒas na tah (minuty)
  1840.   GrNastavPozici(189,245);
  1841.   Gr¼tiI¼íslo("",i,2,0,224);
  1842.   if ((abs(i)*60+kon[35]%60)>1) kon[35]=abs(i)*60+kon[35]%60;
  1843. d ;ƒas na tah (sekundy)
  1844.   GrNastavPozici(213,245);
  1845.   Gr¼tiI¼íslo("",i,2,0,224);
  1846.   if ((kon[35]/60*60+abs(i))>1) kon[35]=kon[35]/60*60+abs(i);
  1847. e ;turnaj - ƒas pro bílého (minuty)
  1848.   GrNastavPozici(189,269);
  1849.   Gr¼tiI¼íslo("",i,2,0,224);
  1850.   if ((abs(i)*60+kon[36]%60)>1) kon[36]=abs(i)*60+kon[36]%60;
  1851. f ;turnaj - ƒas pro bílého (sekundy)
  1852.   GrNastavPozici(213,269);
  1853.   Gr¼tiI¼íslo("",i,2,0,224);
  1854.   if ((kon[36]/60*60+abs(i))>1) kon[36]=kon[36]/60*60+abs(i);
  1855. g ;turnaj - ƒas pro ƒerného (minuty)
  1856.   GrNastavPozici(189,293);
  1857.   Gr¼tiI¼íslo("",i,2,0,224);
  1858.   if ((abs(i)*60+kon[37]%60)>1) kon[37]=abs(i)*60+kon[37]%60;
  1859. h ;turnaj - ƒas pro ƒerného (sekundy)
  1860.   GrNastavPozici(213,293);
  1861.   Gr¼tiI¼íslo("",i,2,0,224);
  1862.   if ((kon[37]/60*60+abs(i))>1) kon[37]=kon[37]/60*60+abs(i);
  1863. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1864. /a (x>189) && (y>192) && (x<257) && (y<205)
  1865. /b (x>188) && (y>220) && (x<212) && (y<230)
  1866. /c (x>188) && (y>244) && (x<212) && (y<254)
  1867. /d (x>212) && (y>244) && (x<228) && (y<254)
  1868. /e (x>188) && (y>269) && (x<212) && (y<279)
  1869. /f (x>212) && (y>269) && (x<228) && (y<279)
  1870. /g (x>188) && (y>293) && (x<212) && (y<303)
  1871. /h (x>212) && (y>293) && (x<228) && (y<303)
  1872. /i (x>432) && (y>290) && (x<450) && (y<303)
  1873. =SP---------------------------------------------------------------------------
  1874.  
  1875. ;-h---------------------------------------------------------------------------
  1876. void MenuJiné( void )  // nastavení myτi, animací
  1877. -s--MenuJiné                                                                    ■   8  -2  -6   3
  1878.                      MenuJiné
  1879.                       :ok=0
  1880.                         *:ok==0
  1881.                 Nastavení~prodlev
  1882.                        1!
  1883.         ____________:Klik(0,1)________________
  1884.         /a                 /b                /c
  1885. prodleva~kliknutí   prodleva~animace       :ok=1
  1886.        a!                 b!
  1887. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1888. 1 ;vykreslení
  1889.   Okno(213,214,427,266,0);
  1890.   GrNastavBarvuPozadí(6);
  1891.   Piτ(215,216,1,Txt(21));
  1892.   Piτ(215,228,0,"   ");
  1893.   Piτ(215,240,1,Txt(22));
  1894.   Piτ(215,252,0,"  ");
  1895.   Tlaƒítko(405,250,"OK",0);
  1896.   GrNastavBarvuPop²edí(14);
  1897.   GrNastavPozici(215,228);GrPiτL¼íslo(kon[38],-1);
  1898.   GrNastavPozici(215,252);GrPiτL¼íslo(kon[39],-1);
  1899. a ;naƒtení prodlevy myτi
  1900.   GrNastavPozici(216,229);
  1901.   Gr¼tiI¼íslo("",i,3,0,224);
  1902.   if (i>50) kon[38]=i;
  1903. b ;naƒtení prodlevy animace
  1904.   GrNastavPozici(216,253);
  1905.   Gr¼tiI¼íslo("",i,2,0,224);
  1906.   kon[39]=abs(i);
  1907. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1908. /a (x>215) && (y>228) && (x<239) && (y<238)
  1909. /b (x>215) && (y>252) && (x<231) && (y<262)
  1910. /c (x>405) && (y>250) && (x<423) && (y<263)
  1911. =SP---------------------------------------------------------------------------
  1912.  
  1913. ;-h---------------------------------------------------------------------------
  1914. int Hláτka(int typ, string text)  // informaƒní/varovné/dotazovací okno
  1915. -s--Hláτka                                                                      ■  33  -2  -1   3
  1916.                            Hláτka
  1917.                             1!
  1918.             _________________│__________________
  1919.     ____typ~ikony?____  text _tlaƒítka_ ƒekání~na~volbu
  1920.     \0       \1      \2 t!   /:typ==2 /        *:1
  1921. informace varování dotaz   ano/ne     ok   :Klik(0,1)
  1922.    2!       3!      4!      a!       b!    stlaƒeno?
  1923.                                               v!
  1924. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1925. 1 ;vykreslení pat²iƒn╪ velkého okna
  1926.   i=StrVelikost(text)*Grµí²kaZnaku+1;
  1927.   Okno((592-i)/2,215,(688+i)/2,265,0);
  1928. 2 ;ikonka informace
  1929.   GrKresliP²edm╪t(58,1,(592-i)/2+3,218);
  1930. 3 ;ikonka varování
  1931.   GrKresliP²edm╪t(73,1,(592-i)/2+3,218);
  1932. 4 ;ikonka dotaz
  1933.   GrKresliP²edm╪t(88,1,(592-i)/2+3,218);
  1934. t ;text hláτky
  1935.   Piτ((592-i)/2+46,227,1,text);
  1936. v ;stlaƒeno tlaƒítko?
  1937.   if (typ==2)
  1938.   {
  1939.    if (((x>(688+i)/2-53) && (y>249) && (x<(688+i)/2-26) && (y<262)) ||
  1940.        (k==KlEnter)) return(1);
  1941.    if (((x>(688+i)/2-22) && (y>249) && (x<(688+i)/2-3) && (y<262)) ||
  1942.        (k==KlEsc)) return(0);
  1943.   } else
  1944.   if (((x>(688+i)/2-22) && (y>249) && (x<(688+i)/2-3) && (y<262)) ||
  1945.       (k==KlEnter)) return(-1);
  1946. a ;tlaƒítka ANO, NE
  1947.   Tlaƒítko((688+i)/2-53,249,"ANO",0);
  1948.   Tlaƒítko((688+i)/2-22,249,"NE",0);
  1949. b ;tlaƒítko OK
  1950.   Tlaƒítko((688+i)/2-22,249,"OK",0);
  1951. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  1952. \0 typ ?? case 0:
  1953. \1 case 1:
  1954. \2 case 2:
  1955. =SP---------------------------------------------------------------------------
  1956.  
  1957. ;-h---------------------------------------------------------------------------
  1958. string Otev²ít(string ext)  // otev²e soubor s p²iponou ext
  1959. -s--Otev²ít                                                                     ■  10  -2   2   3
  1960.                                                Otev²ít
  1961.                                                  1!
  1962.                                            Nekoneƒn∞~cyklus
  1963.                                                   *:1
  1964.                                           vykreslení~souborà
  1965.                                                  2!
  1966.                    ___________________________:Klik(0,0)___________________________
  1967.                    /:tleve==1 /:k==KlEnter             /:k==KlNahoru  /:k==KlDolà /:k==KlEsc
  1968.                    │         'ano                      │              │         konec
  1969.                    │                                   │              │      :return("")
  1970.                    /a                                  │              │
  1971.               zm╪na~posun                         ___nahoru__         │
  1972.          :y=(y-22)/GrV∞τkaZnaku                   /:posun>0 /:misto>0 │
  1973.              ____volba?____                     kurzor    posun       │
  1974.              /:y==posun   /:(y<44)&&(y<m) :posun--! :posun=0!         │
  1975.             "ano          ne                        :misto--!         │
  1976.       :Inicializace()  :posun=y                                       │
  1977.      :Obnovµachovnici()                                  ____________dolà___________
  1978. :return(obsah[misto+posun])                              /:(posun<44)&&(posun<m-1) /:misto<m-45
  1979.                                                        kurzor                    posun
  1980.                                                  :posun++!                :posun=44!
  1981.                                                                            :misto++!
  1982. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  1983. 1 ;naƒtení souborà do pole
  1984.   Adresá²NastavAktuální("*\\");
  1985.   adresar=SouborAbsolutníCesta(adresar);
  1986.   if (adresar[StrVelikost(adresar)-1]!='\\') adresar+='\\';
  1987.   PoloºkaAdresá²eNajdiPrvní
  1988.   (adresar+"*."+ext,SouborAtributSkryt∞|SouborAtributAdresá²,pa);
  1989.   m=0;
  1990.   while ((! DOSChyba()) && (m<512))
  1991.   {
  1992.    obsah[m++]=pa.Jméno;
  1993.    PoloºkaAdresá²eNajdiDalτí(pa);
  1994.   }
  1995.   if (m==0)
  1996.   {
  1997.    Hláτka(1,Txt(6));
  1998.    return("");
  1999.   }
  2000.   for (i=0; i<m-1; i++)
  2001.    for (ii=i+1; ii<m; ii++)
  2002.     if (obsah[ii]<obsah[i])
  2003.     {
  2004.      str=obsah[ii];
  2005.      obsah[ii]=obsah[i];
  2006.      obsah[i]=str;
  2007.     }
  2008.   misto=0;posun=0;
  2009. 2 ;vykreslení
  2010.   Okno(270,20,370,474,0);
  2011.   for (z=0; (z<45) && (z<m); z++)
  2012.   {
  2013.    GrNastavBarvuPozadí(kon[18]);
  2014.    Piτ(271,21+z*GrV∞τkaZnaku,posun!=z,obsah[misto+z]);
  2015.   }
  2016.   if (ext=="POS")
  2017.   {
  2018.    for (y=2; y<=9; y++)
  2019.     for (x=2; x<=9; x++) p[x][y]=0;
  2020.    txt=SouborOtev²i("*\\"+obsah[misto+posun],SouborP²ístup¼tení|SouborP²ístupTextov∞);
  2021.    for (i=0; i<=5; i++)
  2022.    {
  2023.     pgn[i]="";
  2024.     do zn=Soubor¼tiZnak(txt); while (zn!='"');
  2025.     do {
  2026.      zn=Soubor¼tiZnak(txt);
  2027.      if (zn!='"') pgn[i]=pgn[i]+zn;
  2028.     } while (zn!='"');
  2029.    }
  2030.    z=0;
  2031.    while (SouborKonec(txt)==0)
  2032.    {
  2033.     px=Soubor¼tiZnak(txt);
  2034.     if ((z%2!=0) && (px!=' ') && (px!=';') && (px!=':'))
  2035.     {
  2036.      o=1;
  2037.      switch (px)
  2038.      {
  2039.       case 'J': o=2;break;
  2040.       case 'S': o=3;break;
  2041.       case 'V': o=4;break;
  2042.       case 'D': o=5;break;
  2043.       case 'K': o=6;break;
  2044.      }
  2045.      if (o!=1) px=Soubor¼tiZnak(txt);
  2046.      o=o*z;
  2047.      py=Soubor¼tiZnak(txt);
  2048.      p[px-95][58-py]=o;
  2049.     }
  2050.     if (px==':')
  2051.      if (z==0) z=1; else z=-1;
  2052.     if (px==';') z=2;
  2053.    }
  2054.    SouborZav²i(txt);
  2055.    s=p;
  2056.    Okno(390,20,481,111,1);
  2057.    for (y=0; y<=7; y++)
  2058.     for (x=0; x<=7; x++)
  2059.     {
  2060.      if ((x+y)%2==0)
  2061.       GrKresliP²edm╪t(148,1,392+x*11,22+y*11); else
  2062.       GrKresliP²edm╪t(149,1,392+x*11,22+y*11);
  2063.      if (p[x+2][y+2]!=0)
  2064.       if (p[x+2][y+2]<0)
  2065.        GrKresliP²edm╪t(141+p[x+2][y+2]*-1,1,392+x*11,22+y*11); else
  2066.        GrKresliP²edm╪t(135+p[x+2][y+2],1,392+x*11,22+y*11);
  2067.     }
  2068.   }
  2069. x P²epniNaText();
  2070.   for (i=0; i<=5; i++) TxtPiτⁿet╪zec(pgn[i]+"\n");
  2071.   ¼ekejNaKlávesu();
  2072. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2073. /a (x>271) && (y>21) && (x<369) && (y<468)
  2074. =SP---------------------------------------------------------------------------
  2075.  
  2076. ;-h---------------------------------------------------------------------------
  2077. void Uloºit(string ext)  // uloºí zadan∞ soubor
  2078. -s--Uloºit                                                                      ■   4  -2 -28   3
  2079. Uloºit
  2080.  1!
  2081. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2082. 1 ;t╪lo
  2083.   Okno(213,232,427,248,0);
  2084.   GrNastavPozici(216,234);
  2085.   Gr¼tiSⁿet╪zec("[soubor."+ext+"]: ",str,12,0,14);
  2086.   if (str=="") Hláτka(1,"Nic nezadáno."); else
  2087.   {
  2088.    str="*\\"+str;
  2089.    if (SouborExistuje(str)!=0) SouborSmaº(str);
  2090.    txt=SouborOtev²i(str,SouborP²ístupZápis|SouborP²ístupTextov∞);
  2091.    SouborPiτⁿet╪zec(txt,"[ White \""+pgn[0]+"\" ]\n");
  2092.    SouborPiτⁿet╪zec(txt,"[ Black \""+pgn[1]+"\" ]\n");
  2093.    SouborPiτⁿet╪zec(txt,"[ Site \""+pgn[2]+"\" ]\n");
  2094.    SouborPiτⁿet╪zec(txt,"[ Date \""+pgn[3]+"\" ]\n");
  2095.    if (ext!="PGN")
  2096.    {
  2097.     SouborPiτⁿet╪zec(txt,"[ Check \""+pgn[4]+"\" ]\n");
  2098.     SouborPiτⁿet╪zec(txt,"[ Changes \""+pgn[5]+"\" ]\n");
  2099.    }
  2100.    if (ext=="PGN")
  2101.    {
  2102.     for (i=0; i<=delka; i++)
  2103.     {
  2104.      if (partiar[i].s<2)
  2105.      {
  2106.       str="";
  2107.       switch (partiar[i].k)
  2108.       {
  2109.        case 2: str=str+"J";break;
  2110.        case 3: str=str+"S";break;
  2111.        case 4: str=str+"V";break;
  2112.        case 5: str=str+"D";break;
  2113.        case 6: str=str+"K";break;
  2114.       }
  2115.       px=partiar[i].x1+95;
  2116.       py=58-partiar[i].y1;
  2117.       str=str+px+py;
  2118.       if (partiar[i].z==0) str=str+"-"; else str=str+"x";
  2119.       px=partiar[i].x2+95;
  2120.       py=58-partiar[i].y2;
  2121.       str=str+px+py;
  2122.       if (partiar[i].p!=0)
  2123.        switch (abs(partiar[i].p))
  2124.        {
  2125.         case 2: str=str+"=J";break;
  2126.         case 3: str=str+"=S";break;
  2127.         case 4: str=str+"=V";break;
  2128.         case 5: str=str+"=D";break;
  2129.        }
  2130.       if ((kon[6]>0) && (partiar[i].k==6) && (abs(partiar[i].x1-partiar[i].x2)==2))
  2131.        if (partiar[i].x1<partiar[i].x2) str="0-0"; else str="0-0-0";
  2132.       if (partiar[i].s==1) str=str+'+';
  2133.      } else
  2134.      {
  2135.       if (partiar[i].s==2)
  2136.       {
  2137.        if (i%2==0) str="0:1"; else str="1:0";
  2138.       } else str="1/2";
  2139.      }
  2140.      if (i%2==0)
  2141.      {
  2142.       if (partiar[i].s<2)
  2143.       {
  2144.        SouborPiτL¼íslo(txt,(i+1)/2+1,-1);
  2145.        SouborPiτZnak(txt,'.');
  2146.       }
  2147.       SouborPiτⁿet╪zec(txt,str+" ");
  2148.      } else SouborPiτⁿet╪zec(txt,str+" ");
  2149.     }
  2150.    } else
  2151.    {
  2152.     for (z=1; z<=4; z++)
  2153.     {
  2154.      switch (z)
  2155.      {
  2156.       case 1: SouborPiτⁿet╪zec(txt,"Bíl∞: ");break;
  2157.       case 3:
  2158.        SouborPiτZnak(txt,';');
  2159.        SouborPiτNov∞ⁿádek(txt);
  2160.        SouborPiτⁿet╪zec(txt,"¼ern∞: ");
  2161.       break;
  2162.      }
  2163.      for (y=2; y<=9; y++)
  2164.       for (x=2; x<=9; x++)
  2165.       {
  2166.        px=x+95;
  2167.        py=58-y;
  2168.        str=""+px+py+" ";
  2169.        if (((z==1) && (s[x][y]==1)) || ((z==3) && (s[x][y]==-1)))
  2170.         SouborPiτⁿet╪zec(txt,str);
  2171.        if (((z==2) && (s[x][y]>1)) || ((z==4) && (s[x][y]<-1)))
  2172.        {
  2173.         switch (abs(s[x][y]))
  2174.         {
  2175.          case 2: str="J"+str;break;
  2176.          case 3: str="S"+str;break;
  2177.          case 4: str="V"+str;break;
  2178.          case 5: str="D"+str;break;
  2179.          case 6: str="K"+str;break;
  2180.         }
  2181.         SouborPiτⁿet╪zec(txt,str);
  2182.        }
  2183.       }
  2184.     }
  2185.    }
  2186.    SouborZav²i(txt);
  2187.   }
  2188. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2189. =SP---------------------------------------------------------------------------
  2190.  
  2191. ;-h---------------------------------------------------------------------------
  2192. void ¼istiµachovnici( void )  // vyprázdní τachovnici a nastaví její okraje
  2193. -s--¼istiµachovnici                                                             ■   2  -2 -24   3
  2194. ¼istiµachovnici
  2195.       1!
  2196. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2197. 1 ;ƒiτtení τachovnice a definice okrajà
  2198.   for (y=0; y<=11; y++)
  2199.    for (x=0; x<=11; x++)
  2200.     if ((x==0)||(y==0)||(x==1)||(y==1)||(x==10)||(y==10)||(x==11)||(x==12))
  2201.      s[x][y]=9; else s[x][y]=0;
  2202. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2203. =SP---------------------------------------------------------------------------
  2204.  
  2205. ;-h---------------------------------------------------------------------------
  2206. void Inicializace( void )  // deklarace prom╪nn∞ch
  2207. -s--Inicializace                                                                ■   2  -2 -25   3
  2208. Inicializace
  2209.     1!
  2210. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2211. 1 ;t╪lo
  2212.  
  2213.   ¼istiµachovnici();
  2214.  
  2215.   // vkládání figurek
  2216.   for (y=8; y<=9; y++)
  2217.    for (x=2; x<=9; x++)
  2218.    {
  2219.     if (y==8)  // p²ední linie (p╪τci)
  2220.      s[x][y]=1; else // zadní linie (v╪º╪,jezdci,st²elci,dáma,král)
  2221.     {
  2222.      switch (x)
  2223.      {
  2224.       case 2: s[x][y]=4;break;
  2225.       case 3: s[x][y]=2;break;
  2226.       case 4: s[x][y]=3;break;
  2227.       case 5: s[x][y]=5;break;
  2228.       case 6: s[x][y]=6;break;
  2229.       case 7: s[x][y]=3;break;
  2230.       case 8: s[x][y]=2;break;
  2231.       case 9: s[x][y]=4;
  2232.      }
  2233.     }
  2234.     s[x][11-y]=s[x][y]*-1;
  2235.    }
  2236.  
  2237.   // nadeklarování základních parametrà
  2238.   n=1; // zaƒíná bíl∞
  2239.   delka=-1;  // partiá² je zatím prázdn∞
  2240.   pozice=-1;
  2241.   for (i=0; i<=3; i++) rosada[i]=0;  // uvoln╪ní práva roτády
  2242.   for (ii=0; ii<=1; ii++)
  2243.    for (i=0; i<=15; i++) zajate[ii][i]=0;
  2244.   ox=-1;
  2245.   matpat=0;
  2246.   smaz=1;
  2247.   count=0;
  2248.   cas_b.Hodiny=0;cas_b.Minuty=0;cas_b.Sekundy=0;cas_b.Setiny=0;
  2249.   cas_c=cas_b;
  2250. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2251. =SP---------------------------------------------------------------------------
  2252.  
  2253. ;-h---------------------------------------------------------------------------
  2254. void NabídkaPartie( void )  // nabídka práce s partií, uonƒení programu
  2255. -s--NabídkaPartie                                                               ■   2  -2  -3   3
  2256.                                  NabídkaPartie
  2257.                                       a!
  2258.        ___________________________menu~partie___________________________
  2259.        \A                     \1                 \2                    \3
  2260.     opravdu?                  │               ukládání               KONEC
  2261.        /:Hláτka(2,Txt(53))==1 │       _________zápis__________ :konec=1!
  2262. :Inicializace()               │       /:(mod==1)&&(delka>-1) /:mod==0
  2263.       g!                      │ :Uloºit("PGN")         :Uloºit("POS")
  2264.                               │
  2265.                              z!
  2266.                     ________ƒtení_________
  2267.                     /:(mod==1)           /
  2268.                   partie               pozice
  2269.            :str=Otev²ít("PGN"); :str=Otev²ít("POS");
  2270.                 /x       /               /:str==""
  2271.                 │ obnovení~starého    obnovení
  2272.                p!       o!              o!
  2273. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2274. a Tlaƒítko(2,2,vyber[0][0].nazev,1);
  2275. p ;naƒtení partie
  2276.   Inicializace();
  2277.   b=1;c=1; // pro nov╪ naƒtenou partii budou oba hráƒi lidé
  2278.   txt=SouborOtev²i("*\\"+str,SouborP²ístup¼tení|SouborP²ístupTextov∞);
  2279.   for (i=0; i<=3; i++)
  2280.   {
  2281.    pgn[i]="";
  2282.    do zn=Soubor¼tiZnak(txt); while (zn!='"');
  2283.    do {
  2284.     zn=Soubor¼tiZnak(txt);
  2285.     if (zn!='"') pgn[i]=pgn[i]+zn;
  2286.    } while (zn!='"');
  2287.   }
  2288.   for (i=1; i<=3; i++) Soubor¼tiZnak(txt);
  2289.   zn=Soubor¼tiZnak(txt);
  2290.   while (SouborKonec(txt)==0)
  2291.   {
  2292.    if (zn==':')
  2293.    {
  2294.     delka++;
  2295.     partiar[delka].s=2;break;
  2296.    } else
  2297.    if (zn=='/')
  2298.    {
  2299.     delka++;
  2300.     partiar[delka].s=3;break;
  2301.    } else
  2302.    {
  2303.     if (n==1)
  2304.     {
  2305.      while (zn!='.') zn=Soubor¼tiZnak(txt);
  2306.      zn=Soubor¼tiZnak(txt);
  2307.     }
  2308.     if (zn=='0')
  2309.     {
  2310.      Soubor¼tiZnak(txt);Soubor¼tiZnak(txt);
  2311.      zn=Soubor¼tiZnak(txt);
  2312.      v[1].nejlepsi.x1=6;
  2313.      v[1].nejlepsi.y1=9;v[1].nejlepsi.y2=9;
  2314.      if (zn=='-')
  2315.      {
  2316.       v[1].nejlepsi.x2=4;
  2317.       Soubor¼tiZnak(txt);
  2318.      } else
  2319.      {
  2320.       v[1].nejlepsi.x2=8;
  2321.       SouborNastavPozici(txt,SouborPozice(txt)-1,0);
  2322.      }
  2323.     } else
  2324.     if (zn=='-')
  2325.     {
  2326.      Soubor¼tiZnak(txt);
  2327.      zn=Soubor¼tiZnak(txt);
  2328.      v[1].nejlepsi.x1=6;
  2329.      v[1].nejlepsi.y1=2;v[1].nejlepsi.y2=2;
  2330.      if (zn=='-')
  2331.      {
  2332.       v[1].nejlepsi.x2=4;
  2333.       Soubor¼tiZnak(txt);
  2334.      } else
  2335.      {
  2336.       v[1].nejlepsi.x2=8;
  2337.       SouborNastavPozici(txt,SouborPozice(txt)-1,0);
  2338.      }
  2339.     } else
  2340.     {
  2341.      if ((zn=='J') || (zn=='S') || (zn=='V') || (zn=='D') || (zn=='K'))
  2342.       zn=Soubor¼tiZnak(txt);
  2343.      v[1].nejlepsi.x1=zn-95;
  2344.      v[1].nejlepsi.y1=58-Soubor¼tiZnak(txt);
  2345.      Soubor¼tiZnak(txt);
  2346.      v[1].nejlepsi.x2=Soubor¼tiZnak(txt)-95;
  2347.      v[1].nejlepsi.y2=58-Soubor¼tiZnak(txt);
  2348.     }
  2349.     zn=Soubor¼tiZnak(txt);
  2350.     if (zn=='=')
  2351.     {
  2352.      zn=Soubor¼tiZnak(txt);
  2353.      switch (zn)
  2354.      {
  2355.       case 'J': v[1].nejlepsi.p=2*n;break;
  2356.       case 'S': v[1].nejlepsi.p=3*n;break;
  2357.       case 'V': v[1].nejlepsi.p=4*n;break;
  2358.       case 'D': v[1].nejlepsi.p=5*n;break;
  2359.      }
  2360.     } else
  2361.     {
  2362.      if (zn=='+') Soubor¼tiZnak(txt);
  2363.      v[1].nejlepsi.p=0;
  2364.     }
  2365.     x1=v[1].nejlepsi.x1;
  2366.     y1=v[1].nejlepsi.y1;
  2367.     x2=v[1].nejlepsi.x2;
  2368.     y2=v[1].nejlepsi.y2;
  2369.     Táhni();
  2370.    }
  2371.    zn=Soubor¼tiZnak(txt);
  2372.    if (zn=='+')
  2373.    { Soubor¼tiZnak(txt);zn=Soubor¼tiZnak(txt); }
  2374.    if ((zn=='0') || (zn=='1')) zn=Soubor¼tiZnak(txt);
  2375.   }
  2376.   SouborZav²i(txt);
  2377. z ;zálohování PGN informací
  2378.   for (i=0; i<=5; i++)  pgn[i+6]=pgn[i];
  2379. o ;obnovení PGN informací
  2380.   for (i=6; i<=11; i++)  pgn[i-6]=pgn[i];
  2381. c ¼aruj(¼tverec);
  2382. g ;p²emazání PGN informací
  2383.   for (i=0; i<=5; i++) pgn[i]="";
  2384. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2385. /x str!=""
  2386. \A Nabídka(2,19,0,0) ?? case 0:
  2387. \1 case 1:
  2388. \2 case 2:
  2389. \3 case 3:
  2390. =SP---------------------------------------------------------------------------
  2391.  
  2392. ;-h---------------------------------------------------------------------------
  2393. void NabídkaVolby( void )  // nabídka sociálních funkcí, editace, tahy
  2394. -s--NabídkaVolby                                                                ■   5  -2  -9   3
  2395.                 NabídkaVolby
  2396.                     a!
  2397.  ________________menu~volby_______________
  2398.  \A     \1      \2      \3    \4         \5
  2399. zp╪t dop²edu prohodit vzdát remis na~tahu~ƒlov╪k?
  2400.  /t     /t      /t      /k    /k         /c
  2401.  │      │   :pozice=-1  │     │      _hra/edit_
  2402. z!     v!   :delka=-1  e!    r!      /:mod==1 /
  2403.              :n=n*-1                 │        │
  2404.                                :mod=0!  :mod=1!
  2405. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2406. a Tlaƒítko(55,2,vyber[0][1].nazev,1);
  2407. z ;tah zp╪t
  2408.   if (pozice>-1)
  2409.   {
  2410.    if (partiar[pozice].s<2)
  2411.    {
  2412.     h=1;
  2413.     v[1].posledni=partiar[pozice];
  2414.     for (i=0; i<=3; i++) v[1].posledni.ros[i]=partiar[pozice].ros[i];
  2415.     n=n*-1;Vra£Tah();
  2416.    }
  2417.    pozice--;
  2418.   }
  2419. v ;vp²ed
  2420.   if (pozice<delka)
  2421.    if (partiar[pozice+1].s<2)
  2422.    {
  2423.     v[1].nejlepsi=partiar[pozice+1];
  2424.     x1=partiar[pozice+1].x1;
  2425.     y1=partiar[pozice+1].y1;
  2426.     x2=partiar[pozice+1].x2;
  2427.     y2=partiar[pozice+1].y2;
  2428.     iv=delka;Táhni();delka=iv;
  2429.    } else pozice++;
  2430. e ;hláτka o rezignaci a za²azení této informace do partiá²e
  2431.   if (delka>-1)
  2432.   {
  2433.    if (n==1) i=0; else i=1;
  2434.    Hláτka(1,Txt(7+i)+Txt(54));
  2435.    partiar[++delka].s=2;pozice++;
  2436.   }
  2437. r ;nabídka remízy oponujícímu hráƒi (ƒlov╪ku/poƒítaƒi)
  2438.   if (delka>-1)
  2439.    if (((n==1) && (c==1)) || ((n==-1) &&  (b==1)))
  2440.    {
  2441.     if (Hláτka(2,Txt(55))==1)
  2442.     {
  2443.      partiar[++delka].s=3;pozice++;
  2444.     }
  2445.    } else
  2446.    {
  2447.     ja=n*-1;OceσPozici(0);
  2448.     if (v[h].posledni.h<=0)
  2449.     {
  2450.      partiar[++delka].s=3;pozice++;
  2451.      Hláτka(0,Txt(56));
  2452.     } else Hláτka(0,Txt(57));
  2453.    }
  2454. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2455. /c ((n==1) && (b==1)) || ((n==-1) && (c==1))
  2456. /t kon[33]!=2
  2457. /k (mod==1) && (partiar[delka].s<2)
  2458. \A Nabídka(55,19,0,1) ?? case 0:
  2459. \1 case 1:
  2460. \2 case 2:
  2461. \3 case 3:
  2462. \4 case 4:
  2463. \5 case 5:
  2464. =SP---------------------------------------------------------------------------
  2465.  
  2466. ;-h---------------------------------------------------------------------------
  2467. void NabídkaNastavení( void )  // nabídka nastavení uºivatelského rozhraní
  2468. -s--NabídkaNastavení                                                            ■   2  -2  64   3
  2469.                                                                 NabídkaNastavení
  2470.                                                                       a!
  2471.                   _______________________________________________menu~nastavení______________________________________________
  2472.                   \A                        \1                \2                     \3      \4         \5    \6     \7     \8
  2473.         ____animace~figur____               │                 │                      │ :MenuHledání()   │  ƒti~cfg   │ :MenuJiné()
  2474.         /:kon[28]==1        /               │                 │                      │                  │ :Konfig(1) │
  2475.        vyp                 zap              │                 │             _____poƒ~ƒern∞_____         │            │
  2476.     :kon[28]=0          :kon[28]=1          │                 │             /:kon[32]==0      /      uloº~cfg     ƒti~def
  2477.         "v                  "z              │                 │            vyp               zap    :Konfig(0)   :Konfig(2)
  2478. :Hláτka(0,Txt(12)) :Hláτka(0,Txt(13));      │                 │         :kon[32]=1        :kon[32]=0
  2479.                                       ____p²etah____          │             │     :Hláτka(0,Txt(8)+Txt(15));
  2480.                                       /:kon[29]==1 /          │             │
  2481.                                      vyp          zap         │ :Hláτka(0,Txt(8)+Txt(14))
  2482.                                   :kon[29]=0   :kon[29]=1     │
  2483.                                       'v           'z         │
  2484.                                                      ______poƒ~bíl∞_____
  2485.                                                      /:kon[31]==0      /
  2486.                                                     vyp               zap
  2487.                                                  :kon[31]=1        :kon[31]=0
  2488.                                                      │     :Hláτka(0,Txt(7)+Txt(15));
  2489.                                                      │
  2490.                                          :Hláτka(0,Txt(7)+Txt(14))
  2491. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2492. a Tlaƒítko(100,2,vyber[0][2].nazev,1);
  2493. v Viditeln∞();
  2494. z ;ƒelem vzad
  2495.    VlevoVbok(); VlevoVbok();
  2496. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2497. \A Nabídka(100,19,0,2) ?? case 0:
  2498. \1 case 1:
  2499. \2 case 2:
  2500. \3 case 3:
  2501. \4 case 4:
  2502. \5 case 5:
  2503. \6 case 6:
  2504. \7 case 7:
  2505. \8 case 8:
  2506. =SP---------------------------------------------------------------------------
  2507.  
  2508. ;-h---------------------------------------------------------------------------
  2509. void NaƒtiJazyk( void )  // naƒte jazykov∞ balíƒek (CZ+ENG) z LNG souboru
  2510. -s--NaƒtiJazyk                                                                  ■   2  -2 -26   3
  2511. NaƒtiJazyk
  2512.    1!
  2513. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2514. 1 ;naƒtení jazykového balíƒku
  2515.   txt=SouborOtev²i("*\\partie.lng",SouborP²ístup¼tení|SouborP²ístupTextov∞);
  2516.   Soubor¼tiNov∞ⁿádek(txt);
  2517.   for (y=0; y<=1; y++)
  2518.   {
  2519.    Soubor¼tiI¼íslo(txt,z);Soubor¼tiNov∞ⁿádek(txt);
  2520.    for (i=0; i<=z; i++)
  2521.    {
  2522.     Soubor¼tiI¼íslo(txt,vyber[y][i].delka);Soubor¼tiNov∞ⁿádek(txt);
  2523.     for (ii=0; ii<=vyber[y][i].delka+1; ii++)
  2524.      for (iii=0; iii<=1; iii++)
  2525.      {
  2526.       Soubor¼tiSⁿet╪zec(txt,str);
  2527.       StrSmaº(str,StrVelikost(str)-1,1);
  2528.       if (ii==0)
  2529.       {
  2530.        if (iii==kon[40]) vyber[y][i].nazev=str;
  2531.       } else
  2532.       if (iii==kon[40]) vyber[y][i].nabidka[ii-1]=str;
  2533.      }
  2534.    }
  2535.   }
  2536.   SouborZav²i(txt);
  2537. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2538. =SP---------------------------------------------------------------------------
  2539.  
  2540. ;-h---------------------------------------------------------------------------
  2541. void NabídkaZobrazení( void )  // nabídka pro grafick∞ interface
  2542. -s--NabídkaZobrazení                                                            ■   2  -2 -11   3
  2543.                  NabídkaZobrazení
  2544.                        a!
  2545.  _________________menu~zobrazení________________
  2546.  \A \1    \2    \3    \4   \5       \6         \7
  2547.  3D │  Partiá²  │  figurky │   prost²edí..     │
  2548. A!  │ :i=2!p    │ :i=4!p   │ :MenuProst²edí()  │
  2549.     │           │          │                   │
  2550. Fisherovky ocen╪né~uzly PGN~info      _______jazyk________
  2551. :i=1!p      :i=3!p     :i=5!p   ____zm╪na_____        naƒtení
  2552.                                 /:kon[40]==0 /     :NaƒtiJazyk()
  2553.                             :kon[40]=1   :kon[40]=0
  2554. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2555. a Tlaƒítko(177,2,vyber[0][3].nazev,1);
  2556. p ;prohodní konfiguraƒní hodnoty (0,1)
  2557.   if (kon[i+20]==1)
  2558.   {
  2559.    kon[i+20]=0;
  2560.    str=Txt(23);
  2561.   } else
  2562.   {
  2563.    kon[i+20]=1;
  2564.    str=Txt(24);
  2565.   }
  2566.   Hláτka(0,str+vyber[0][3].nabidka[i]);
  2567. d Gr¼tiZnak("?",Znak,1,0x07);            /*      edit ano, ƒerná/sv.τedá*/
  2568. b GrNastavBarvuPop²edí  /* Partie */
  2569. A ;spustí externí program 3D τachovnice
  2570.   P²epniNaText();
  2571.   if (SouborExistuje("*\\partie.kom")!=0) SouborSmaº("*\\partie.kom");
  2572.   kom=SouborOtev²i("*\\partie.kom",SouborP²ístupZápis|SouborP²ístupBinární);
  2573.   SouborPiτⁿet╪zec(kom,"[ PARTIE communication file (for subprograms) ]");
  2574.   SouborPiτNov∞ⁿádek(kom);
  2575.   for (y=2; y<=9; y++)
  2576.    for (x=2; x<=9; x++) SouborPiτL¼íslo(kom,s[x][y],2);
  2577.   SouborZav²i(kom);
  2578.   ¼ekej(1000);str="*\\partie3d.exe";DOSProve╘(str);
  2579.   kom=SouborOtev²i("*\\partie.kom",SouborP²ístup¼tení|SouborP²ístupBinární);
  2580.   Soubor¼tiNov∞ⁿádek(kom);Soubor¼tiL¼íslo(kom,l);SouborZav²i(kom);
  2581.   cas.Hodiny=l/3600;l-=l/3600*3600;cas.Minuty=l/60;l-=l/60*60;cas.Sekundy=l;
  2582.   if (n==1)
  2583.    ¼asPosuσ(cas_b,cas.Hodiny,cas.Minuty,cas.Sekundy,cas.Setiny); else
  2584.    ¼asPosuσ(cas_c,cas.Hodiny,cas.Minuty,cas.Sekundy,cas.Setiny);
  2585.   GrNastavMód(2);GrNastavPàvodníPaletu();
  2586. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2587. \A Nabídka(177,19,0,3) ?? case 0:
  2588. \1 case 1:
  2589. \2 case 2:
  2590. \3 case 3:
  2591. \4 case 4:
  2592. \5 case 5:
  2593. \6 case 6:
  2594. \7 case 7:
  2595. =SP---------------------------------------------------------------------------
  2596.  
  2597. ;-h---------------------------------------------------------------------------
  2598. void NabídkaInformace( void )  // nabídka vyvolá informaƒní okna
  2599. -s--NabídkaInformace                                                            ■  14  -2 -23   3
  2600. NabídkaInformace
  2601.  menu~informace
  2602.       a!
  2603.  menu~informace
  2604.      \A     \1
  2605.     Vτe O~programu
  2606.     A!     3!
  2607. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2608. a Tlaƒítko(254,2,vyber[0][4].nazev,1);
  2609. 3 ;okno s informací
  2610.   Okno(15,8,626,464,0);
  2611.   GrNaƒtiBMP(17,10,"*\\partie_L.bmp",0,0,-1,-1,1);
  2612.   GrNaƒtiBMP(453,193,"*\\partie_K.bmp",0,0,-1,-1,1);
  2613.   Piτ(206,10,1,"PARTIE V1.01 (public domain)");
  2614.   Piτ(206,34,1,"Program, design: Libor Tinka (vlevo)");
  2615.   Piτ(206,46,1,"Grafika: Jakub Grós (vpravo)");
  2616.   Piτ(206,70,1,"Tuto verzi programu (1.00) je moºné voln╪ τí²it,");
  2617.   Piτ(206,82,1,"ne vτak za úƒelem zisku.");
  2618.   Piτ(206,94,1,"Firma SGP tedy màºe tento program publikovat.");
  2619.   Piτ(206,106,1,"Program slouºí k uºívání a demonstraƒním úƒelàm,");
  2620.   Piτ(206,118,1,"jakékoliv pozm╪σování zdrojového kódu nebo pouºívání");
  2621.   Piτ(206,130,1,"urƒit∞ch blokà programu samostatn╪ je moºné pouze");
  2622.   Piτ(206,142,1,"po dohod╪ s programátorem hry.");
  2623.   Piτ(206,154,1,"Pozm╪σování grafiky hry prost²ednictvím k tomu");
  2624.   Piτ(206,166,1,"urƒen∞mi nástroji, nebo pouºívání n╪kter∞ch");
  2625.   Piτ(206,178,1,"grafick∞ch ƒástí programu je moºné pouze");
  2626.   Piτ(206,190,1,"po dohod╪ s grafikem hry.");
  2627.   Piτ(206,214,1,"Kontakt s autory:");
  2628.   Piτ(206,238,1,"Libor Tinka");
  2629.   Piτ(206,250,1,"Kurτova 6");
  2630.   Piτ(206,262,1,"Brno");
  2631.   Piτ(206,274,1,"63500");
  2632.   Piτ(206,286,1,"ltinka@gvid.cz");
  2633.   Piτ(206,310,1,"Jakub Grós");
  2634.   Piτ(206,322,1,"Sokolovská 277");
  2635.   Piτ(206,334,1,"Uherské Hradiτt╪");
  2636.   Piτ(206,346,1,"68601");
  2637.   Piτ(206,358,1,"Jakub Grós");
  2638.   Piτ(206,370,1,"jagous2@seznam.cz");
  2639.   Piτ(57,410,1,"http://partie.webzdarma.cz");
  2640.   Klik(0,1);
  2641.   GrNastavPàvodníPaletu();
  2642. A ;zobrazí nápov╪dní okno
  2643.   ii=0;
  2644.   do {
  2645.    txt=SouborOtev²i("*\\partie.hlp",SouborP²ístup¼tení|SouborP²ístupTextov∞);
  2646.    for (i=1; i<=ii; i++) Soubor¼tiNov∞ⁿádek(txt);
  2647.    Okno(0,68,639,413,0);
  2648.    for (i=0; i<=30; i++)
  2649.    {
  2650.     Soubor¼tiSⁿet╪zec(txt,str);StrSmaº(str,StrVelikost(str)-1,1);
  2651.     Piτ(2,70+i*11,1,str);
  2652.    }
  2653.    SouborZav²i(txt);
  2654.    Klik(0,1);
  2655.    if ((k==KlNahoru) && (ii>0)) ii--;
  2656.    if ((k==KlDolà) && (ii<105)) ii++;
  2657.    if ((k==KlPageUp) && (ii-15>0)) ii-=15;
  2658.    if ((k==KlPageDown) && (ii<90)) ii+=15;
  2659.   } while (k!=KlEsc);
  2660. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2661. \A Nabídka(254,19,0,4) ?? case 0:
  2662. \1 case 1:
  2663. =SP---------------------------------------------------------------------------
  2664.  
  2665. ;-h---------------------------------------------------------------------------
  2666. void RozvinovacíNabídky( void )  // veτkeré volby z horního panelu
  2667. -s--RozvinovacíNabídky                                                          ■   5  -2   7   3
  2668.                                     RozvinovacíNabídky
  2669.                                          :smaz=1
  2670.        ___________________________Ràzné~oblasti~kliknutí___________________________
  2671.        /a               /b                /c                  /d                  /e
  2672. :NabídkaPartie() :NabídkaVolby() :NabídkaNastavení() :NabídkaZobrazení() :NabídkaInformace()
  2673. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2674. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  2675. /a (x>2) && (y>2) && (x<53) && (y<15)
  2676. /b (x>55) && (y>2) && (x<97) && (y<15)
  2677. /c (x>100) && (y>2) && (x<175) && (y<15)
  2678. /d (x>177) && (y>2) && (x<252) && (y<15)
  2679. /e (x>254) && (y>2) && (x<329) && (y<15)
  2680. =SP---------------------------------------------------------------------------
  2681.  
  2682. ;-h---------------------------------------------------------------------------
  2683. void main( void )  // ░░▒▒▓▓██ PARTIE V1.01 (public domain) ██▓▓▒▒░░
  2684. -s--Partie                                                                      ■  14  -2  27   3
  2685.                                            _______________Partie______________
  2686.                                       Inicializace                 │       Konec
  2687.                                           1!                       │ :MyτKonecObsluhy()
  2688.                             :GrNastavMód(2)!                       │
  2689.                          :GrNastavV∞stup(2)!                       │
  2690.                            :GrNastavText(1)!                       │
  2691.                                      Spuτt╪ní~intra                │
  2692.                                           i!             Uºivatelské~prost²edí
  2693.                                 :GrNastavPàvodníPaletu()     Hlavní~cyklus
  2694.                                   :MyτZaƒátekObsluhy()             *:konec==0
  2695.                     :GrNastavBarvuPozadí(0)!                   Vykreslení
  2696.                               :GrSmaºOkno()!                   :b=kon[31]
  2697.                      :AnimNastavGrV∞stup(2)!                   :c=kon[32]
  2698.                                                                   2!
  2699.                                         __________________________Mód?__________________________
  2700.                                         /:mod==1                                               /
  2701.                                       herní                                                    │
  2702.                                 :tah="~"!                                                      │
  2703.                   ______________Je~na~tahu~ƒlov╪k?______________                               │
  2704.                   /x                                           /                               │
  2705.           Ne~-~v∞poƒet~tahu                            Ano~-~práce~s~myτí                      │
  2706.       vyhledávání       taºení                             :Klik(1,0)                          │
  2707. :VyhledejTah(kon[34],1)   /q                             ¼ekání~na~klik                        │
  2708.                        animace                                 │                               │
  2709.                          x!                                    │                               │
  2710.                        :Táhni()            __________Ràzné~oblasti~kliknutí_________           │
  2711.                          x!                /a                  /b                  /           │
  2712.                           /:kon[28]==1 τachovnice         "horní~panel           pozadí        │
  2713.                        'animace     :x1=(x-22)/39+2           v!                   /:tprave==1 │
  2714.                                     :y1=(y-128)/28+2 :RozvinovacíNabídky();      pozn.         │
  2715.                                     __typ~pohybu?__                        :Notes("pozadí");   │
  2716.                                     /:kon[29]==1  /                                            │
  2717.                                     │        tah/oznaƒení                                      │
  2718.                                     │         /:ox==-1 /                                       │
  2719.                                     │      znaƒení    tah                                      │
  2720.                                     │       :ox=x1   :x2=x1                                    │
  2721.                                     │       :oy=y1   :y2=y1                                    │
  2722.                                     │                :x1=ox                                    │
  2723.                                     │                :y1=oy                                    │
  2724.                                     │                :ox=-1                                    │
  2725.                                     │                :oy=n                                     │
  2726.                                     │                 t!                                       │
  2727.                               ___tah/info___       Animovat?                                   │
  2728.                               /:tleve==1   /:tprave==1 /:(oy~Není~n)&&(kon[28]==1)             │
  2729.                        _klik~na~kámen?_ :Popis()    "animace                                   │
  2730.                        /:s[x1][y1]==0 /         :x=(x1-2)*39+22                                │
  2731.                        Ne            Ano        :y=(y1-2)*28+128                               │
  2732.                                      4!         'Smazání~políƒka                               │
  2733.                                :x=(x1-2)*39+22        u!                                       │
  2734.                                :y=(y1-2)*28+128                                                │
  2735.                  :MyτNastavPozici(x,y)!                                                        │
  2736.                 _____________________..._____________________                                  │
  2737.          "Smazání~políƒka                 ____________Animace~kamene____________               │
  2738.          /:(x1+y1)%2==0 /           P²esun~kamene                           Dotaºení           │
  2739.         Bílé          ¼erné :StopkyNuluj()!                               :FishStop()          │
  2740.         w!             b!   :StopkyStart()!                                   5!               │
  2741.                                           *:gMyτUdálost.Tlaƒítka :x2=(x-3)/39+2!               │
  2742.                                           │                    :y2=(y-114)/28+2!               │
  2743.                                          a!                                   t!               │
  2744.                                                                                             editaƒní
  2745.                                                                        ____________________:Klik(0,0)_____________________
  2746.                                                                        /a                      /b             /c         /d
  2747.                                                                   _____│______            'horní~panel     PGN~info dneτní~datum
  2748.                                                                Editace Test~na~zm╪ny                         c!         d!
  2749.                                                                  v!          /:ok==0
  2750.                                                              :ok=1!        zm╪na
  2751.                                                    :x1=(x-22)/39+2!         z!
  2752.                                                   :y1=(y-128)/28+2!
  2753.                                                             _editace/info
  2754.                                                             /:tleve==1  /:tprave==1
  2755.                                                       v∞b╪r~pro~pole :Popis()
  2756.                                                            s!
  2757.                                     ______________________volby______________________
  2758.                                     /:i==0          /:(i>1)&&(i<8)  /:(i>8)&&(i<15) /:i==16
  2759.                                     │               │               │               │
  2760.                         :s[x1][y1]=0! :s[x1][y1]=i-1! :s[x1][y1]=8-i!       :¼istiµachovnici()
  2761.                                     "v              'v              'v              'v
  2762.                                 :delka=-1
  2763.                                   :ok=0
  2764.                                    r!
  2765. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  2766. a ;animace kamene
  2767.   Myτ¼tiUdálost(gMyτUdálost);
  2768.   x=gMyτUdálost.X;
  2769.   y=gMyτUdálost.Y;
  2770.   AnimP²edm╪tAnimuj(kamen,x,y,0);
  2771. z ;smazání partiá²e a seznamu zajat∞ch figur
  2772.   delka=-1;
  2773.   for (ii=0; ii<=1; ii++)
  2774.    for (i=0; i<=15; i++) zajate[ii][i]=0;
  2775. t ;test tahu
  2776.   if (TestTahu(x1,y1,x2,y2)==1) n=n*-1;
  2777. O GrNaƒtiBMP  /* naƒte obrázek */
  2778. X ¼arujNaPozici         /* X:(p²edm╪t,x,y)!   1-150, 1-15, 1-10       */
  2779. 1 ;základní inicializace
  2780.  
  2781.   mod=1;
  2782.   EscPlus();
  2783.   Inicializace();
  2784.   for (i=0; i<=5; i++) pgn[i]="";
  2785.   Konfig(1);
  2786.  
  2787.   // naƒtení jazykového balíƒku
  2788.   NaƒtiJazyk();
  2789.  
  2790.   // inicializace centralizaƒní tabulky
  2791.   ct=SouborOtev²i("*\\partie.ct",SouborP²ístup¼tení|SouborP²ístupBinární);
  2792.   for (y=0; y<=3; y++)
  2793.    for (x=0; x<=3; x++)
  2794.    {
  2795.     i=Soubor¼tiZnak(ct);
  2796.     ctab[x][y]=i*placek;
  2797.     ctab[7-x][y]=i*placek;
  2798.     ctab[x][7-y]=i*placek;
  2799.     ctab[7-x][7-y]=i*placek;
  2800.    }
  2801.   SouborZav²i(ct);
  2802.  
  2803. 2 ;vykreslení prost²edí
  2804.  
  2805.   if (mod==1)
  2806.   {
  2807.    VyhledejTah(1,0);
  2808.    if (v[1].nejlepsi.x1==-1)
  2809.    {
  2810.     matpat=1;
  2811.     if (partiar[delka].s<2)
  2812.     {
  2813.      µach();
  2814.      delka++;
  2815.      if ((bs==1)||(cs==1)) partiar[delka].s=2; else partiar[delka].s=3;
  2816.     }
  2817.    } else matpat=0;
  2818.   }
  2819.  
  2820.   if (smaz==1)
  2821.   {
  2822.    smaz=0;
  2823.    GrNastavBarvuPozadí(kon[9]);
  2824.    GrKresliVypln╪n∞Obdélník(0,18,639,479);
  2825.   }
  2826.  
  2827.   // menu
  2828.   Okno(0,0,639,17,0);
  2829.   Tlaƒítko(2,2,vyber[0][0].nazev,0);
  2830.   Tlaƒítko(55,2,vyber[0][1].nazev,0);
  2831.   Tlaƒítko(100,2,vyber[0][2].nazev,0);
  2832.   Tlaƒítko(177,2,vyber[0][3].nazev,0);
  2833.   Tlaƒítko(254,2,vyber[0][4].nazev,0);
  2834.   GrNastavBarvuPop²edí(4);
  2835.   GrNastavPozici(420,3);GrPiτⁿet╪zec("by Libor Tinka & Jakub Grós");
  2836.  
  2837.   // PGN informace
  2838.  
  2839.   if (kon[25]==1)
  2840.   {
  2841.    Okno(30,22,296,122,0);
  2842.    for (i=0; i<=5; i++)
  2843.    {
  2844.     Okno(33,25+(GrV∞τkaZnaku+6)*i,37+Grµí²kaZnaku*32,
  2845.          25+(GrV∞τkaZnaku+6)*i+(GrV∞τkaZnaku+4),1);
  2846.     GrNastavBarvuPop²edí(8);
  2847.     switch (i)
  2848.     {
  2849.      case 0: str=Txt(7);break;
  2850.      case 1: str=Txt(8);break;
  2851.      case 2: str=Txt(9);break;
  2852.      case 3: str=Txt(10);break;
  2853.      case 4: str="-";break;
  2854.      case 5: str="-";break;
  2855.     }
  2856.     GrNastavPozici
  2857.      (163-StrVelikost(str)*Grµí²kaZnaku/2,27+(GrV∞τkaZnaku+6)*i);
  2858.     GrPiτⁿet╪zec(str);
  2859.     Piτ(34,26+(GrV∞τkaZnaku+6)*i,1,pgn[i]);
  2860.    }
  2861.    if (mod==0) Tlaƒítko(299,73,Txt(11),0);
  2862.   }
  2863.  
  2864.   // τachovnice
  2865.   Okno(20,126,335,354,1);
  2866.   for (y=0; y<=7; y++)
  2867.    for (x=0; x<=7; x++)
  2868.    {
  2869.     // vykreslení pole τachovnice
  2870.     if ((x+y)%2==0)
  2871.      GrKresliP²edm╪t(kon[2]*15+14,0,22+x*39,128+y*28); else
  2872.      GrKresliP²edm╪t((kon[3]+1)*15,0,22+x*39,128+y*28);
  2873.     // p²ípadné vykreslení figurky
  2874.     if (s[x+2][y+2]>0)
  2875.      GrKresliP²edm╪t(kon[0]*15+s[x+2][y+2],1,22+x*39,128+y*28); else
  2876.     if (s[x+2][y+2]<0)
  2877.      GrKresliP²edm╪t(kon[1]*15+s[x+2][y+2]*-1+6,1,22+x*39,128+y*28);
  2878.    }
  2879.   // znaƒení pole
  2880.   if ((kon[29]==0) && (ox!=-1))
  2881.    GrKresliP²edm╪t(103,1,(ox-2)*39+22,(oy-2)*28+128);
  2882.  
  2883.   // sou²adnice
  2884.   for (i=0; i<=7; i++)
  2885.   {
  2886.    GrNastavPozici(7,140+28*i);GrNastavBarvuPop²edí(8);GrPiτZnak(56-i);
  2887.    GrNastavPozici(5,138+28*i);GrNastavBarvuPop²edí(7);GrPiτZnak(56-i);
  2888.    GrNastavPozici(38+39*i,361);GrNastavBarvuPop²edí(8);GrPiτZnak(97+i);
  2889.    GrNastavPozici(36+39*i,359);GrNastavBarvuPop²edí(7);GrPiτZnak(97+i);
  2890.   }
  2891.  
  2892.   // Fisherovy hodiny
  2893.   if (kon[21]==1)
  2894.   {
  2895.    Okno(59,381,296,471,1);
  2896.    GrKresliP²edm╪ty(1001+kon[4]*45,1,61,383,6,3);
  2897.    if (kon[5]==0)
  2898.    {
  2899.     GrKresliP²edm╪ty(1013,1,61,383,3,3);
  2900.     GrKresliP²edm╪ty(1013,1,178,383,3,3);
  2901.    }
  2902.    cas_f=cas_b;Fisher(119);
  2903.    cas_f=cas_c;Fisher(236);
  2904.   }
  2905.  
  2906.   // partiá²
  2907.   if (kon[22]==1)
  2908.   {
  2909.    Okno(452,35,475+Grµí²kaZnaku*19+4,41+GrV∞τkaZnaku*38,0);
  2910.    ii=0;
  2911.    for (i=pozice/76*76; (i<=pozice/76*76+76)&&(i<=delka); i++)
  2912.    {
  2913.     if (partiar[i].s<2)
  2914.     {
  2915.      str="";
  2916.      px=partiar[i].x1+95;
  2917.      if (kon[6]>0)
  2918.      switch (partiar[i].k)
  2919.      {
  2920.       case 1:
  2921.        if ((kon[6]==2) && (partiar[i].z!=0)) str=str+px;
  2922.       break;
  2923.       case 2: str=str+"J";break;
  2924.       case 3: str=str+"S";break;
  2925.       case 4: str=str+"V";break;
  2926.       case 5: str=str+"D";break;
  2927.       case 6: str=str+"K";break;
  2928.      }
  2929.      if ((kon[6]<2) || (partiar[i].dest==1))
  2930.      {
  2931.       py=58-partiar[i].y1;
  2932.       str=str+px+py;
  2933.      }
  2934.      if (kon[6]<2)
  2935.      {
  2936.       if (kon[7]==1)
  2937.       {
  2938.        if (partiar[i].z==0) str=str+"-"; else str=str+"x";
  2939.       } else str=str+" ";
  2940.      } else
  2941.      {
  2942.       if (partiar[i].z!=0) str=str+"x"; else
  2943.        if (partiar[i].dest==1) str=str+"-";
  2944.      }
  2945.      px=partiar[i].x2+95;
  2946.      py=58-partiar[i].y2;
  2947.      str=str+px+py;
  2948.      if (partiar[i].p!=0)
  2949.       switch (abs(partiar[i].p))
  2950.       {
  2951.        case 2: str=str+"=J";break;
  2952.        case 3: str=str+"=S";break;
  2953.        case 4: str=str+"=V";break;
  2954.        case 5: str=str+"=D";break;
  2955.       }
  2956.      if ((kon[6]>0) && (partiar[i].k==6) && (abs(partiar[i].x1-partiar[i].x2)==2))
  2957.       if (partiar[i].x1<partiar[i].x2) str="0-0"; else str="0-0-0";
  2958.      if (partiar[i].s!=0) str=str+'+';
  2959.     } else
  2960.     {
  2961.      if (partiar[i].s==2)
  2962.      {
  2963.       if (i%2==0) str="0:1"; else str="1:0";
  2964.      } else str="1/2";
  2965.     }
  2966.     if (i==pozice) GrNastavBarvuPozadí(kon[18]); else GrNastavBarvuPozadí(kon[12]);
  2967.     if (i%2==0)
  2968.     {
  2969.      GrNastavBarvuPop²edí(6);
  2970.      GrNastavPozici(454,37+(i+1)/2*GrV∞τkaZnaku-i/76*380);
  2971.      GrPiτL¼íslo((i+1)/2+1,-1);
  2972.      Piτ(484,37+(i+1)/2*GrV∞τkaZnaku-i/76*380,0,str);
  2973.     } else
  2974.     {
  2975.      Piτ(484+(ii+2)*Grµí²kaZnaku,37+((i+1)/2-1)*GrV∞τkaZnaku-i/76*380,0,str);
  2976.     }
  2977.     ii=StrVelikost(str);
  2978.    }
  2979.   }
  2980.  
  2981.   // koncové uzly
  2982.   if (kon[23]==1) LCD(318,435,count,8,kon[8]);
  2983.  
  2984.   // zajaté figury
  2985.   if (kon[24]==1)
  2986.   {
  2987.    Okno(351,126,432,354,0);
  2988.    for (ii=0; ii<=1; ii++)
  2989.      for (i=0; i<=15; i++)
  2990.      if (zajate[ii][i]!=0)
  2991.       {
  2992.       if (zajate[ii][i]>0)
  2993.        GrKresliP²edm╪t(kon[0]*15+zajate[ii][i],1,353+i%4*13,128+ii*112+i/4*28); else
  2994.        GrKresliP²edm╪t(kon[1]*15+zajate[ii][i]*-1+6,1,353+i%4*13,128+ii*112+i/4*28);
  2995.      }
  2996.   }
  2997.  
  2998. S UloºScénu             /*    S:("soubor")!   "c:\\pavel\\soubor.s00" */
  2999. m ;vypiτ ⁿet╪zec do grafického okénka
  3000.    PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré             */
  3001.    GrPiτⁿet╪zec(ⁿet╪zec);                /*vypíτe obsah prom╪nné ⁿet╪zec*/
  3002.    GrNastavBarvy(PàvBarvy);              /*nastaví pàvodní barvy        */
  3003. b GrKresliP²edm╪t((kon[3]+1)*15,0,x,y);
  3004. w GrKresliP²edm╪t((kon[2]+1)*15-1,0,x,y);
  3005. p GrNastavPozici  /* Partie */
  3006. K GrKresliP²edm╪ty  /* Partie */
  3007. 4 ;inicializace animovaného objektu
  3008.   if (s[x1][y1]<0)
  3009.    kamen=AnimP²edm╪tVytvo²(kon[1]*15+s[x1][y1]*-1+6,1,0,1); else
  3010.    kamen=AnimP²edm╪tVytvo²(kon[0]*15+s[x1][y1],1,0,1);
  3011. 5 ;zruτení animovaného p²edm╪tu (kamene)
  3012.   AnimP²edm╪tZruτ(kamen);
  3013. u ;automatická animace kamene
  3014.   x=x2;
  3015.   y=y2;
  3016.   if (s[x][y]<0)
  3017.    kamen=AnimP²edm╪tVytvo²(kon[1]*15+s[x][y]*-1+6,1,0,1); else
  3018.    kamen=AnimP²edm╪tVytvo²(kon[0]*15+s[x][y],1,0,1);
  3019.   x1=(x1-2)*39+22;
  3020.   y1=(y1-2)*28+128;
  3021.   x2=(x2-2)*39+22;
  3022.   y2=(y2-2)*28+128;
  3023.   f=sqrt(sqr(x1-x2)+sqr(y1-y2))+1;
  3024.   fx=(x2-x1)/f;
  3025.   fy=(y2-y1)/f;
  3026.   for (i=0; i<=f; i++)
  3027.   {
  3028.    AnimP²edm╪tAnimuj(kamen,x1+fx*i,y1+fy*i,0);
  3029.    ¼ekej(kon[39]);
  3030.   }
  3031.   AnimP²edm╪tZruτ(kamen);
  3032.   if (s[x][y]<0)
  3033.    GrKresliP²edm╪t(kon[1]*15+s[x][y]*-1+6,1,x2,y2); else
  3034.    GrKresliP²edm╪t(kon[0]*15+s[x][y],1,x2,y2);
  3035. s ;v∞b╪r z nabídky figur
  3036.   i=Nabídka(240,102,1,7);
  3037.   GrNastavBarvuPozadí(kon[9]);
  3038.   GrKresliVypln╪n∞Obdélník(240,102,409,378);
  3039. c ;editace okénka s hlaviƒkou PGN
  3040.   i=(y-25)/(GrV∞τkaZnaku+6);
  3041.   if ((i>-1) && (i<4))
  3042.   {
  3043.    GrNastavPozici(35,i*(GrV∞τkaZnaku+6)+27);
  3044.    Grⁿádkov∞Editor(pgn[i],32,1,-1,StrVelikost(pgn[i])+1,224);
  3045.   }
  3046. d ;nastaví aktuální datum do hlaviƒky PGN
  3047.   SystémovéDatum(datum);
  3048.   pgn[3]=StrL¼íslo(datum.Den,-1)+". ";
  3049.   switch (datum.M╪síc)
  3050.   {
  3051.    case 1: pgn[3]=pgn[3]+Txt(25);break;
  3052.    case 2: pgn[3]=pgn[3]+Txt(26);break;
  3053.    case 3: pgn[3]=pgn[3]+Txt(27);break;
  3054.    case 4: pgn[3]=pgn[3]+Txt(28);break;
  3055.    case 5: pgn[3]=pgn[3]+Txt(29);break;
  3056.    case 6: pgn[3]=pgn[3]+Txt(30);break;
  3057.    case 7: pgn[3]=pgn[3]+Txt(31);break;
  3058.    case 8: pgn[3]=pgn[3]+Txt(32);break;
  3059.    case 9: pgn[3]=pgn[3]+Txt(33);break;
  3060.    case 10: pgn[3]=pgn[3]+Txt(34);break;
  3061.    case 11: pgn[3]=pgn[3]+Txt(35);break;
  3062.    case 12: pgn[3]=pgn[3]+Txt(36);break;
  3063.   }
  3064.   pgn[3]=pgn[3]+" "+StrL¼íslo(datum.Rok,-1)+" (";
  3065.   switch (datum.DenT∞dne)
  3066.   {
  3067.    case 0: pgn[3]=pgn[3]+Txt(37);break;
  3068.    case 1: pgn[3]=pgn[3]+Txt(38);break;
  3069.    case 2: pgn[3]=pgn[3]+Txt(39);break;
  3070.    case 3: pgn[3]=pgn[3]+Txt(40);break;
  3071.    case 4: pgn[3]=pgn[3]+Txt(41);break;
  3072.    case 5: pgn[3]=pgn[3]+Txt(42);break;
  3073.    case 6: pgn[3]=pgn[3]+Txt(43);break;
  3074.   }
  3075.   pgn[3]=pgn[3]+")";
  3076. x ;naƒtení sou²adnic tahu do pomocn∞ch prom╪nn∞ch
  3077.   x1=v[1].nejlepsi.x1;y1=v[1].nejlepsi.y1;
  3078.   x2=v[1].nejlepsi.x2;y2=v[1].nejlepsi.y2;
  3079. i ;spustí intro (úvodní obrazovka)
  3080.   GrNaƒtiBMP(0,0,"*\\partie.bmp",0,0,-1,-1,1);
  3081.   TypSoubor soubor=SouborOtev²i("*\\partie.pal",
  3082.                                 SouborP²ístup¼tení|SouborP²ístupBinární);
  3083.   GrNaƒtiPaletu("*\\partie.pal");
  3084.   VyprázdniFrontuKláves();
  3085.   StopkyNuluj();StopkyStart();
  3086.   do Stopky(cas); while ((BylaStisknutaKlávesa()==0) && (cas.Sekundy<3));
  3087.   StopkyStop();
  3088.   VyprázdniFrontuKláves();
  3089.   SouborZav²i(soubor);
  3090. r ;plné nabytí práva roτády
  3091.   for (i=0; i<=3; i++) rosada[i]=0;
  3092. v ;poƒkání, neº uºivatel pustí (levé) tlaƒítko myτi
  3093.   do Myτ¼tiUdálost(gMyτUdálost); while (gMyτUdálost.Typ!=4);
  3094. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  3095. #N ;opakuj n-krát vzestupn╪ pro prom╪nnou       #N:(i,8)  (8x) i=0,1..7
  3096.     Od0
  3097. #M ;opakuj n-krát sestupn╪  pro prom╪nnou       #M:(i,8)  (8x) i=7,6..0
  3098.     DolàDo0
  3099. /p PràchodnostP²edm╪tuP²edB() Je 1
  3100. /x (matpat==0) && (((n==1) && (b==0)) || ((n==-1) && (c==0))) && (pozice==delka)
  3101. /a (x>21) && (y>127) && (x<334) && (y<353)
  3102. /b (x>2) && (y>2) && (x<334) && (y<15)
  3103. /c (x>20) && (y>22) && (x<286) && (y<122)
  3104. /d (x>299) && (y>73) && (x<348) && (y<86)
  3105. /q v[1].nejlepsi.x1>-1
  3106. \p P²edm╪tP²edB()??
  3107. \b Barva¼tverceP²
  3108. =SP---------------------------------------------------------------------------
  3109.  
  3110. //
  3111. // Konec souboru
  3112. //////////////////
  3113.