home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 December / PCWorld_2002-12_cd.bin / Software / Komercni / Baltik / katA.exe / katA / SDH / SDH_PISK.SGP < prev    next >
Text File  |  2002-09-20  |  27KB  |  735 lines

  1. SGPC   5.05 032#000000151 18.08.2002 11:08:22                                    StructNo 3   3
  2.  
  3. # include <sgpbalt.h>
  4.  
  5. ///////////////////
  6. // Konstanty
  7. //
  8.  
  9. #define POCITAC 0
  10. #define CLOVEK  1
  11.  
  12. #define RADKY   10    //Poƒet ²ádkà na hrací ploτe
  13. #define SLOUPCE 15    //Poƒet sloupcà na hrací ploτe
  14.  
  15. #define MIN_X   26    //Nejmenτí X-ové sou²adnice hrací plochy
  16. #define MIN_Y   10    //Nejmenτí Y-ové sou²adnice hrací plochy
  17.  
  18. //Nejv╪tτí X-ové a X-ové sou²adnice hrací plochy
  19. #define MAX_X   SLOUPCE * X_PREDMET+MIN_X+X_PREDMET
  20. #define MAX_Y   RADKY * Y_PREDMET+MIN_Y+Y_PREDMET
  21.  
  22. #define X_PREDMET   39      //Velikost jednoho p²edm╪tu na τí²ku
  23. #define Y_PREDMET   29      //Velikost jednoho p²edm╪tu na v∞τku
  24.  
  25. //První sada
  26. #define KAMEN1       17001      //Kámen prvního hráƒe
  27. #define KAMEN2       17002      //Kámen druhého hráƒe
  28. #define KAMEN0       17003      //Kámen hracího pole
  29. #define ZVYRAZNENI1  17004      //Zv∞razn╪ní piτkvorky 1. hráƒe
  30. #define ZVYRAZNENI2  17005      //Zv∞razn╪ní piτkvorky 2. hráƒe
  31.  
  32. //Druhá sada
  33. #define KAMEN11      17016      //Kámen prvního hráƒe
  34. #define KAMEN12      17017      //Kámen druhého hráƒe
  35. #define KAMEN10      17018      //Kámen hracího pole
  36. #define ZVYRAZNENI11 17019      //Zv∞razn╪ní piτkvorky 1. hráƒe
  37. #define ZVYRAZNENI12 17020      //Zv∞razn╪ní piτkvorky 2. hráƒe
  38.  
  39. //T²etí sada
  40. #define KAMEN21      17031      //Kámen prvního hráƒe
  41. #define KAMEN22      17032      //Kámen druhého hráƒe
  42. #define KAMEN20      17033      //Kámen hracího pole
  43. #define ZVYRAZNENI21 17034      //Zv∞razn╪ní piτkvorky 1. hráƒe
  44. #define ZVYRAZNENI22 17035      //Zv∞razn╪ní piτkvorky 2. hráƒe
  45.  
  46. //¼tvrtá sada
  47. #define KAMEN31      17046      //Kámen prvního hráƒe
  48. #define KAMEN32      17047      //Kámen druhého hráƒe
  49. #define KAMEN30      17048      //Kámen hracího pole
  50. #define ZVYRAZNENI31 17049      //Zv∞razn╪ní piτkvorky 1. hráƒe
  51. #define ZVYRAZNENI32 17050      //Zv∞razn╪ní piτkvorky 2. hráƒe
  52.  
  53. #define NIC     0   //Na políƒku nic neleºí
  54. #define H1      1   //Na políƒku leºí kámen 1. hráƒe
  55. #define H2      2   //Na políƒku leºí kámen 2. hráƒe
  56. #define ZED     3   //
  57.  
  58. #define DX_KT  35      //Vzdálenost sloupcà kontrolních tiskà
  59. #define DY_KT  15      //Vzdálenost ²ádkà kontrolních tiskà
  60. #define X0_KT  (SLOUPCE * X_PREDMET+MIN_X)
  61. #define XM_KT  (MIN_X + 15*X_PREDMET)
  62.  
  63. #define Y0_KT1 MIN_Y
  64. #define YM_KT1 (Y0_KT1 + DY_KT*RADKY)
  65. #define Y0_KT2 (YM_KT1 + DY_KT)
  66. #define YM_KT2 (Y0_KT2 + DY_KT*RADKY)
  67.  
  68. #define X0_KT3 MIN_X
  69. #define Y0_KT3 (YM_KT2+DY_KT)
  70. #define YM_KT3 (MIN_Y + 10*Y_PREDMET)
  71.  
  72. #define KT2S   "     "
  73.  
  74.  
  75. ///////////////////
  76. // Konstanty
  77. //
  78.  
  79. typedef short bool;         //Logické hodnoty
  80.  
  81.  
  82.  
  83. //////////////////////
  84. // Globální prom╪nné
  85. //
  86.  
  87. //Kandidáti na lokální
  88. int  gXp[5];        //Pracovní X p²i hledání piτkvorky
  89. int  gYp[5];        //Pracovní Y p²i hledání piτkvorky
  90. int  gHráƒi[2];     //Pamatuje si, jestli hraƒem je ƒlov╪k ƒi poƒítaƒ
  91. bool gHráƒ;         //Hrრna tahu 1, 0
  92. int  gX, gY;        //Sou²adnice pole, na které se práv╪ poloºil kámen
  93. int  gP²edm╪t;      //Kámen hráƒe, kter∞ je práv╪ na tahu
  94. int  gKámen0;       //P²edm╪t prázdného pole
  95. int  gKámen1;       //Kámen prvního hráƒe
  96. int  gKámen2 ;      //Kámen druhého hráƒe
  97. int  gKamenà;       //Poƒet kamenà na desce
  98. int  gKonec;        //Neni zapln╪na plocha?
  99. int  gZv∞razn╪ní1;  //Kámen, kter∞m se zv∞razní hotová piτkvorka 1. hráƒe
  100. int  gZv∞razn╪ní2;  //Kámen, kter∞m se zv∞razní hotová piτkvorka 2. hráƒe
  101. int  Táhnul;
  102. int  Kameny;
  103. //Zm╪na sou²adnice ve sm╪ru x a y p²i p²echodu na sousední pole v daném sm╪ru
  104. int  DX[] = { 1,  1,  0, -1 };
  105. int  DY[] = { 0, -1, -1, -1 };
  106.  
  107. //Hrací pole - kameny na jednotliv∞ch polích
  108. int  A[SLOUPCE][RADKY];
  109.  
  110. //Váha moºnosti umíst╪ní kamene poƒítaƒe a hráƒe
  111. int  Váha[2][5] = {{1,5,25,125,1000},{1,4,20,100,400}};
  112.  
  113. //Sm╪ry X-ov∞ch a Y-ov∞ch so²adnic, p²i hledání dobrého tahu
  114. int  dX[] = {1,1,0,-1};
  115. int  dY[] = {0,1,1, 1};
  116.  
  117. bool Vyhrál;        //Poloºil p╪t kamenà
  118. int gVítKam;        //Poƒet kamenà ve vít╪zné piτkvorce
  119.  
  120.  
  121. /////////////////////
  122. // Pomocné definice
  123. //
  124.  
  125. #define NE      0
  126. #define ANO     1
  127.  
  128. #define ABS(x)  ((x)>0?(x):-(x))
  129.  
  130. #define __CYKLUS(N)   __Cyklus(1,N);__Cyklus(0,N);   //Hlava cyklu
  131. #define __MPVC_ 100   //Maximální poƒet vno²en∞ch cyklà
  132.  
  133. int __Cyklus( int Nov∞, int Poƒet )
  134. //Nov∞ > 0: Otev²ení nového cyklu s N opakováními (vƒetn╪ 0)
  135. //Nov∞ = 0: Dalτí pràchod cyklem
  136. //Nov∞ < 0: P²edƒasné ukonƒení cyklu
  137. { static int I[__MPVC_];
  138.   static int i = -1;
  139.   if( Nov∞ > 0 )
  140.   { if( ++i >= __MPVC_)
  141.     { TxtPiτⁿet╪zec("P²íliτ mnoho vno²en∞ch cyklà");
  142.       while(1) {Tón(1000);};
  143.     }else I[i]=Poƒet;
  144.   }else if( Nov∞ == 0 )
  145.   { if(--I[i]<0){ i--; return(0);}
  146.                   else return(1);
  147.   }else return(-(i--));  //Vrací zápornou aktuální hloubku vno²ení
  148. }  //Cyklus
  149.  
  150. void ¼ekejNaReakci(void)
  151. //¼eká na sitsk klávesy nebo tlaƒítka myτi
  152. { VyprázdniFrontuKláves();
  153.   MyτVyprázdniFrontuUdálostí();
  154.   ¼ekej(NaKlávesu|NaMyτ);
  155.   VyprázdniFrontuKláves();
  156.   MyτVyprázdniFrontuUdálostí();
  157. } //¼ekejNaReakci
  158.  
  159. long ¥¼ti¼íslo ( char* Text )
  160. { long Vrátit = 0;
  161.   GrNastavPozici(272, 0);
  162.   Gr¼tiL¼íslo(Text,Vrátit,8,1,0xe);
  163.   GrNastavPozici(272, 0);
  164.   GrPiτⁿet╪zec( "               " );
  165.   return Vrátit;
  166. } //¥¼ti¼íslo
  167.  
  168. void ╤( string s ) {
  169.   GrNastavPozici(0,0);
  170.   GrPiτⁿet╪zec(s+"         ");
  171. }
  172.  
  173.  
  174. -o1-Globals ----------------------------------------------------------------
  175. 0 ;Lokální prom╪nné
  176. a Klávesa= ¼tiKlávesuZFronty();
  177. d Gr¼tiZnak("?",Znak,1,0x07);            /*      edit ano, ƒerná/sv.τedá*/
  178. f VyprázdniFrontuKláves();
  179. g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f);  /*40zn, edit ano, modrá/bílá   */
  180. h Gr¼tiI¼íslo("?",I¼íslo1,6,0,0x0e);     /* 6zn, edit  ne, ƒerná/ºlutá  */
  181. i Gr¼tiD¼íslo("?",D¼íslo1,20,1,0x0f);    /*20zn, edit  ne, ƒerná/bílá   */
  182. j GrPiτZnak(Znak);
  183. k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
  184. m ;vypiτ ⁿet╪zec do grafického okénka
  185.    PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré             */
  186.    GrPiτⁿet╪zec(ⁿet╪zec);                /*vypíτe obsah prom╪nné ⁿet╪zec*/
  187.    GrNastavBarvy(PàvBarvy);              /*nastaví pàvodní barvy        */
  188. q GrPiτL¼íslo(I¼íslo1,-1);               /* -1 = nejkratτí v∞pis        */
  189. t P²epniNaText();
  190. u GrPiτD¼íslo(D¼íslo1,10,2);             /*10 ƒíslic, z toho 2 desetinné*/
  191. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  192.   ¼ekejNaReakci();
  193. W ¼ekej                 /*  W:(milisekund)!   0-32000                 */
  194. X ¼arujNaPozici         /* X:(p²edm╪t,x,y)!   1-150, 1-15, 1-10       */
  195. -c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
  196. \C case
  197. #C ; n-krát                                     #C:(5)         5╫
  198.     __CYKLUS
  199. #A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok   #A:(i,2,10,2)  i=2,4..10
  200.     OdDoKrok
  201. #D ;opakuj sestupn╪  pro prom╪nnou od,do,krok   #D:(i,10,2,2)  i=10,8..2
  202.     OdDolàDoKrok
  203. #M ;opakuj n-krát sestupn╪  pro prom╪nnou       #M:(i,8)  (8x) i=7,6..0
  204.     DolàDo0
  205. #N ;opakuj n-krát vzestupn╪ pro prom╪nnou       #N:(i,8)  (8x) i=0,1..7
  206.     Od0
  207. ===Globals --------------------------------------------------------------
  208. /*-hf(*/
  209. /*-hf-*/
  210. void Inicializace( void )
  211. /* Inicializuje globální prm╪nné, vykreslí prázdné pole
  212.    a vynuluje pole A, kam se budou zaznamenávat tahy. */
  213. /*-hf-*/;
  214. void TáhneHráƒ( void )
  215.  /*¼eká na událost myτi Levé tlaƒítko nahoru,
  216.    P²evede sou²adnice myτi na políƒkové
  217.    a zapamatuje si je v gX a gY */
  218. /*-hf-*/;
  219. void PoloºKámen( void )
  220. /* Na sou²adnice v globálníh prom╪nn∞ch gX a gY
  221.    poloºí p²edm╪t gP²edm╪t = kámen hráƒe, kter∞ táhnul.
  222.    Pokud je zapln╪né celé pole, dá do gKonec hodnotu ANO┤. */
  223. /*-hf-*/;
  224. void OznaƒVít╪ze( void )
  225. /* Je volána pokud n╪kdo poloºí pát∞ kámen do své piτkvorky.
  226.    Funkce oznaƒí piτkvorku a vytiskne nápis pro vít╪ze. */
  227. /*-hf-*/;
  228. void V∞hra ( void )
  229. /* Zjistí, jestli po vloºení kamene na políƒko o sou²adnicích [gX;gY]
  230.    nevznikne celá piτkorka.
  231.    Pokud vznikne, vrátí 1, jinak vrátí 0.
  232. */
  233. /*-hf-*/;
  234. int JakDobré(int PX, int PY)
  235. /* Najde piτkvorky procházející polem [PX;PY]
  236.   a vyhodnotí jejich váhu podle jejich majitele a poƒtu kamenà.
  237.   Hodnota pole je souƒet vah piτkvorek. */
  238. /*-hf-*/;
  239. void TáhnePoƒítaƒ( void )
  240. /*Prohledá hrací pole a ohodnotí stav piτkvorek */
  241. /*-hf-*/;
  242. void main( void )
  243. /*-hf)*/;
  244. ;-h---------------------------------------------------------------------------
  245. void Inicializace( void )
  246. /* Inicializuje globální prm╪nné, vykreslí prázdné pole
  247.    a vynuluje pole A, kam se budou zaznamenávat tahy. */
  248. -s--Inicializace                                                                ■  10  -2  -5 259
  249.              _Inicializace_____________________
  250.          0abd!     P²iprav~τachovnici     Ukonƒí~se
  251.             g!          a~pole~A             º!
  252.             c!             #x
  253.  ___________Sada_______   ⁿada
  254.  /1     /2     /3     /    #y
  255. Pole Klávesy  Barvy Láhve Pole
  256. 1!     4!      5!    6!   2!3
  257. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  258. 0 ;Lokální prom╪nné
  259.   int x, y;                     //Sou²adnice na tisk hracího pole
  260.   string Vstup;                 //Parametry o hráƒích
  261.   int Vstup1;                   //¼íslo sady kamenà kterou hrრvybral
  262.   bool Chyba;                   //Nepovedlo se p²evéct
  263. 1 //Inicializace globálních prom╪nn∞ch
  264.   gKámen0=KAMEN0;
  265.   gKámen1=KAMEN1;
  266.   gKámen2=KAMEN2;
  267.   gP²edm╪t=gKámen1;
  268.   gZv∞razn╪ní1=ZVYRAZNENI1;
  269.   gZv∞razn╪ní2=ZVYRAZNENI2;
  270. 2 A[x][y]=0;                          //Vτechny pole jsou prázdné
  271. 3 ¼arujNaPozici(gKámen0,x+1,y+1)
  272. 4 //Inicializace globálních prom╪nn∞ch
  273.   gKámen0=KAMEN10;
  274.   gKámen1=KAMEN11;
  275.   gKámen2=KAMEN12;
  276.   gP²edm╪t=gKámen1;
  277.   gZv∞razn╪ní1=ZVYRAZNENI11;
  278.   gZv∞razn╪ní2=ZVYRAZNENI12;
  279.  
  280. 5 //Inicializace globálních prom╪nn∞ch
  281.   gKámen0=KAMEN20;
  282.   gKámen1=KAMEN21;
  283.   gKámen2=KAMEN22;
  284.   gP²edm╪t=gKámen1;
  285.   gZv∞razn╪ní1=ZVYRAZNENI21;
  286.   gZv∞razn╪ní2=ZVYRAZNENI22;
  287.  
  288. 6 //Inicializace globálních prom╪nn∞ch
  289.   gKámen0=KAMEN30;
  290.   gKámen1=KAMEN31;
  291.   gKámen2=KAMEN32;
  292.   gP²edm╪t=gKámen1;
  293.   gZv∞razn╪ní1=ZVYRAZNENI31;
  294.   gZv∞razn╪ní2=ZVYRAZNENI32;
  295.  
  296. a Vstup=DOSArgument(1);
  297.   gHráƒi[0]=(int)StrNaL¼íslo( Vstup, (int*)&Chyba );
  298. b Vstup=DOSArgument(2);
  299.   gHráƒi[1]=(int)StrNaL¼íslo( Vstup, (int*)&Chyba );
  300. c Vstup=DOSArgument(3);
  301.   Vstup1=(int)StrNaL¼íslo( Vstup, (int*)&Chyba );
  302. d EscPlus();
  303. g GrNastavV∞stup(3|8, X0_KT,  Y0_KT1, XM_KT, YM_KT1 );
  304.   GrNastavV∞stup(4|8, X0_KT,  Y0_KT2, XM_KT, YM_KT2 );
  305.   GrNastavV∞stup(5|8, X0_KT3, Y0_KT3, XM_KT, YM_KT3 );
  306.   GrNastavV∞stup(3);
  307.   GrSmaºOkno();
  308. ╪ //Vytiskni obsah pole A[x,y]
  309.   GrNastavPozici(x*DX_KT,y*DY_KT);
  310.   GrPiτL¼íslo(A[x][y],-1);
  311. τ GrPiτL¼íslo((SLOUPCE * X_PREDMET+MIN_X),-1);GrPiτⁿet╪zec(", ");
  312.   GrPiτL¼íslo((MIN_Y)                    ,-1);GrPiτⁿet╪zec(", ");
  313.   GrPiτL¼íslo((15 * X_PREDMET+MIN_X)     ,-1);GrPiτⁿet╪zec(", ");
  314.   GrPiτL¼íslo((10 * Y_PREDMET+MIN_Y)     ,-1);GrPiτⁿet╪zec(", ");
  315. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  316.   ¼ekejNaReakci();
  317. m ;vypiτ ⁿet╪zec do grafického okénka
  318.    PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré             */
  319.    GrPiτⁿet╪zec(ⁿet╪zec);                /*vypíτe obsah prom╪nné ⁿet╪zec*/
  320.    GrNastavBarvy(PàvBarvy);              /*nastaví pàvodní barvy        */
  321. k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
  322. j GrPiτZnak(Znak);
  323. º /*Okénko*/ GrNastavV∞stup(0);
  324.   GrNastavBarvuPozadí(0);
  325.   GrNastavBarvuPop²edí(14);
  326.   GrSmaºOkno();
  327.   GrPiτⁿet╪zec("Esc=Konec");
  328. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  329. #x x=0; x<SLOUPCE; x++       //Pokryjeme Prázdn∞m kamenem urƒit∞ poƒet sloupcà
  330. #y y=0; y<RADKY; y++         //Pokryjeme Prázdn∞m kamenem urƒit∞ poƒet
  331. /1 Vstup1==1
  332. /2 Vstup1==0
  333. /3 Vstup1==2
  334. =SP---------------------------------------------------------------------------
  335.  
  336. ;-h---------------------------------------------------------------------------
  337. void TáhneHráƒ( void )
  338.  /*¼eká na událost myτi Levé tlaƒítko nahoru,
  339.    P²evede sou²adnice myτi na políƒkové
  340.    a zapamatuje si je v gX a gY */
  341. -s--TáhneHrრ                                                                  ■  21  -2  -4 259
  342.    TáhneHráƒ
  343. Zaƒátek   Tah
  344.   0!       +1
  345.          Oznaƒ
  346.           6a!
  347.      _____Konec?_____
  348.      /m             /e
  349.   Puτt╪no        Ukonƒil
  350.      /p            k!
  351.   Prázdno    :break;!
  352.     v!
  353. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  354. 0 int Volno = NE;  //Táhnout màºe jen na volné místo
  355. 6 Myτ¼tiUdálost(gMyτUdálost);
  356. a gX=(gMyτUdálost.X - MIN_X)/X_PREDMET;
  357.   gY=(gMyτUdálost.Y - MIN_Y)/Y_PREDMET;
  358. v Volno = ANO;
  359. ╪ GrPiτⁿet╪zec("Bod 1");
  360. τ GrPiτⁿet╪zec("                     ");
  361. ƒ GrPiτⁿet╪zec("Myτ: ["+
  362.     StrL¼íslo(gMyτUdálost.X,-1)+";"+
  363.     StrL¼íslo(gMyτUdálost.Y,-1)+"]     " );
  364. k gKonec=2;
  365. s MyτSchovejKurzor();
  366. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  367. /m gMyτUdálost.Typ == MyτUdálostLevéTlNahoru
  368. /p P²edm╪tNaPozici(gX+1,gY+1)==gKámen0
  369. /n PràchodnostP²edm╪tuP²edB() Je 0
  370. /j gP²edm╪t == KAMEN1
  371. /a gMyτUdálost.X<=MAX_X && gMyτUdálost.Y<=MAX_Y
  372. /e ¼tiKlávesuZFronty() == KlEsc
  373. +1 Volno==NE
  374.  
  375. =SP---------------------------------------------------------------------------
  376.  
  377. ;-h---------------------------------------------------------------------------
  378. void PoloºKámen( void )
  379. /* Na sou²adnice v globálníh prom╪nn∞ch gX a gY
  380.    poloºí p²edm╪t gP²edm╪t = kámen hráƒe, kter∞ táhnul.
  381.    Pokud je zapln╪né celé pole, dá do gKonec hodnotu ANO┤. */
  382. -s--PoloºKámen                                                                  ■   6  -2  -3 259
  383.    ____________PoloºKámen______________
  384. Zaƒátek        Prost²edek           Konec
  385.                   p!3                /K
  386.         :gKamenà+=1!              Zapln╪no
  387.         Zaznamenej~p²edm╪t          k!
  388.           /1            /
  389.         Druh∞        První
  390.          2!            1!
  391. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  392. 1 A[gX][gY]=H1;
  393. 2 A[gX][gY]=H2;
  394. 3 MyτNastavPozici((gX+1)*X_PREDMET+3,(gY+1)*Y_PREDMET-3);
  395. p //Vyƒaruj p²edm╪t
  396.   MyτSchovejKurzor();
  397.   ¼arujNaPozici(gP²edm╪t,gX+1,gY+1);
  398.   MyτZobrazKurzor();       //Kurzor by p²emazal kámen
  399. k gKonec=1;
  400. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  401.   ¼ekejNaReakci();
  402. ╪ //Vytiskni obsah pole A[x,y]
  403.   GrNastavV∞stup(3);
  404.   GrNastavPozici(gX*DX_KT,gY*DY_KT);
  405.   GrPiτL¼íslo(A[gX][gY],-1);
  406. ƒ GrNastavPozici(0,0);
  407.   GrPiτⁿet╪zec("Sou²adnice["+
  408.     StrL¼íslo(gX,-1)+";"+
  409.     StrL¼íslo(gY,-1)+"]     " );
  410. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  411. /K gKamenà==RADKY*SLOUPCE
  412. /1 (gHrრ== 1)
  413. =SP---------------------------------------------------------------------------
  414.  
  415. ;-h---------------------------------------------------------------------------
  416. void OznaƒVít╪ze( void )
  417. /* Je volána pokud n╪kdo poloºí pát∞ kámen do své piτkvorky.
  418.    Funkce oznaƒí piτkvorku a vytiskne nápis pro vít╪ze. */
  419. -s--OznaƒVít╪ze                                                                 ■   9  -2  -2 259
  420.    _____________OznaƒVít╪ze_________________
  421. Zaƒátek      Vyhrál________              Konec
  422.  02!s   __Vyhrál?    Zobraz~²adu          k!
  423.         /1     /         #A:(²ada,0,4,1)
  424.        Ano     Ne       Pole
  425.         !╪     !τ       1!
  426. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  427. 0 ;Lokální prom╪nné
  428.   int ²ada;
  429.   int Zv∞razn╪ní = (gHrრ== 0) ? gZv∞razn╪ní1 : gZv∞razn╪ní2;
  430. k MyτZobrazKurzor();
  431. s MyτSchovejKurzor();
  432. X ¼arujNaPozici         /* X:(p²edm╪t,x,y)!   1-150, 1-15, 1-10       */
  433. ╪ ╤("Blahop²eji k vít╪zství");
  434. τ ╤("Musíτ se opravdu jeτt╪ uƒit");
  435. 1 ¼arujNaPozici(Zv∞razn╪ní,gXp[²ada],gYp[²ada])
  436. 2 /*Okénko*/ GrNastavV∞stup(0);
  437.   GrNastavBarvuPozadí(9);
  438.   GrNastavBarvuPop²edí(12);
  439.   GrSmaºOkno();
  440.   GrNastavPozici(0,0);
  441. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  442.   ¼ekejNaReakci();
  443. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  444. #A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok   #A:(i,2,10,2)  i=2,4..10
  445.     OdDoKrok
  446. /1 gHráƒi[gHráƒ] == CLOVEK
  447. =SP---------------------------------------------------------------------------
  448.  
  449. ;-h---------------------------------------------------------------------------
  450. void V∞hra ( void )
  451. /* Zjistí, jestli po vloºení kamene na políƒko o sou²adnicích [gX;gY]
  452.    nevznikne celá piτkorka.
  453.    Pokud vznikne, vrátí 1, jinak vrátí 0.
  454. */
  455. -s--V∞hra                                                                       ■  54  -2  -1 259
  456.                  _________V∞hra_________
  457.               Zaƒátek        │      Odpov╪z
  458.                07!           │        2!
  459.                              │
  460.                            Cyklus
  461.                              #A:(sm╪r,0,3,1)
  462.       ______________________Sm╪r______________________
  463.     Vp²ed                Vzad                    _Vyhrál?
  464.     35!                  5!                      /5
  465.       #:;;                #:;;              Nepokraƒujem
  466.    Doprava              Doleva                  6!
  467.      f!                  g!               :break;!
  468.   _Rozhodni_         __Rozhodni__
  469.   /1       /         /3         /
  470. Naτli   Nenaτli    Naτli     Nenaτli
  471.  4!1    !:break;   41!   :break;!
  472. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  473. ß return Vyhrál;
  474. 0 ;Lokální prom╪nné
  475.   int  Piτkvorka[5]; //Vít╪z musí poskládat piτkvorku z p╪ti kamenà
  476.   int  Pole;         //Kámen v piτkvorce
  477.   int  X;            //Pracovní X
  478.   int  Y;            //Pracovní Y
  479.   int  dX;           //Pomocné X
  480.   int  dY;           //Pomocné Y
  481.   int  sm╪r;         //Sm╪r kontroly
  482.   int  ²ada;         //Po²adí p²edm╪tu v poli gXp a gYp
  483. 1 //Uloºíme sou²adnice dalτího p²edm╪tu v testovanné ²ad╪
  484.   gXp[²ada]=X;
  485.   gYp[²ada]=Y;
  486. 2 gXp[0]=gX+1;
  487.   gYp[0]=gY+1;
  488. 3 ;Inicializuj pot²ebné prom╪nné
  489.    Pole=1; //Uº je zaznamenán jeden kámen
  490.    ²ada=0; //Zaplσujeme pole gXp a gYp od poƒátku
  491.    dX=DX[sm╪r];
  492.    dY=DY[sm╪r];
  493. 4 Pole++;
  494.   ²ada+=1;
  495. 5 X=gX+1; Y=gY+1;
  496. 6 Vyhrál=1
  497. 7 Vyhrál=0
  498. 8 gVítKam=Pole-1
  499. b Piτkvorka[Pole]=1;
  500. f X=X+dX, Y=Y+dY
  501. g X=X-dX, Y=Y-dY
  502. ╪ GrNastavV∞stup(0);
  503.   GrPiτⁿet╪zec("Bod 1");
  504. τ GrPiτⁿet╪zec("                     ");
  505. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  506.   ¼ekejNaReakci();
  507. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  508. /1 (P²edm╪tNaPozici(X,Y)==gP²edm╪t)
  509. /3 (P²edm╪tNaPozici(X,Y)==gP²edm╪t)
  510. /5 (Pole >= 5)
  511. +x Pole<5
  512. +y Pole<5
  513. #A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok   #A:(i,2,10,2)  i=2,4..10
  514.     OdDoKrok
  515. =SP---------------------------------------------------------------------------
  516.  
  517. ;-h---------------------------------------------------------------------------
  518. int JakDobré(int PX, int PY)
  519. /* Najde piτkvorky procházející polem [PX;PY]
  520.   a vyhodnotí jejich váhu podle jejich majitele a poƒtu kamenà.
  521.   Hodnota pole je souƒet vah piτkvorek. */
  522. -s--JakDobré                                                                    ■   2  -2  -5 259
  523.    ______________JakDobré____________________
  524. Zaƒátek    Projdi~vτechny~sm╪ry           Konec
  525.   0!                #A:(Sm╪r,0,3,1)        r!
  526.                    Sm╪r
  527.                     #A:(Piτkvorka,-4,0,1)
  528.      ___________Piτkvorka________
  529.   Vynuluj                     Zjisti
  530.    Obsah          ____________Obsah_________________
  531.     o!      Projdi~kameny    Zpráva Konec?    Nastav~váhu
  532.             #A:(Kámen,0,4,1)          /d           /o
  533.             Po²adí~kamene           Dalτí       Má~smysl
  534.              v~piτkvorce          piτkvorka       b!
  535.                  2!                7!:continue;
  536.             Neni~tam~ze╘?
  537.             /k          /
  538.            Není         Je
  539.           34!         58!ß
  540. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  541. ß break;
  542. 0 ;Lokální prom╪nné
  543.   int   Hodnota = 0;  //Hodnota testovaného pole
  544.   int   Sm╪r;         //Sm╪r piτkvorky
  545.   int   Obsah[4];     //Kolik je v piτkorce kamenà jednotliv∞ch druhà
  546.   int   Piτkvorka;    //Posun poƒátku procházející piτkvorky
  547.   int   Kámen;        //Po²adí kamene v piτkvorce
  548.   int   pomX, pomY;   //Sou²adnice pole, na jehoº obsah se ptám
  549.   int   pomA;         //Obsah testovaného pole
  550.   bool  DalτíPiτk=NE; //Jestli ukonƒit test této piτkvorky a jít na dalτí
  551. 2 ;Zjisti sou²adnice dalτího pole
  552.    pomX =PX + dX[Sm╪r]*(Piτkvorka+Kámen);
  553.    pomY =PY + dY[Sm╪r]*(Piτkvorka+Kámen);
  554. 3 ;Zjisti co je v testovaném poli
  555.    pomA = A[pomX][pomY];
  556. 4 ;gKamenà typu pomA je v piτkvorce o jeden víc
  557.    Obsah[ pomA ] += 1;
  558. 5 ;Je tam ze╘
  559.    Obsah[ ZED ] += 1;
  560. 6 pomX+=1;
  561.   pomY+=1;
  562. 7 DalτíPiτk = NE;
  563. 8 DalτíPiτk = ANO;
  564. a Klávesa= ¼tiKlávesuZFronty();
  565. b Hodnota += Váha[0][Obsah[ H1 ]] +
  566.   Váha[1][Obsah[ H2 ]] + Obsah[NIC]
  567. o for(Kámen=0; Kámen<=3; Obsah[Kámen++]=0 );
  568. r return Hodnota;
  569. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  570.    ¼ekejNaReakci();
  571. ╪ ╤("Vyhrál");
  572. τ ╤("NeVyhrál");
  573. ƒ GrNastavPozici(0,0);
  574.   GrPiτⁿet╪zec("Hodnota["+
  575.     StrL¼íslo(Hodnota,-1));
  576. ² //Vytiskni obsah pole A[x,y]
  577.   int kx=PX*DX_KT;
  578.   int ky=PY*DY_KT;
  579.   GrNastavV∞stup(4);
  580.   GrNastavPozici(kx,ky);
  581.   GrPiτⁿet╪zec(KT2S);
  582.   GrNastavPozici(kx,ky);
  583.   GrPiτL¼íslo(Hodnota,-1);
  584. º GrNastavV∞stup(5);
  585.   GrPiτL¼íslo(Piτkvorka,-1);GrPiτⁿet╪zec(". piτkvorka\n");
  586. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  587. /o (Obsah[ZED]==0)&&(Obsah[H1]*Obsah[H2]==0)
  588. /k (pomX>=0) && (pomX<SLOUPCE) && (pomY>=0) && (pomY<RADKY)
  589. /1 (P²edm╪tNaPozici(pomX,pomY)==gP²edm╪t)
  590. /2 (P²edm╪tNaPozici(pomX,pomY)==gP²edm╪t)
  591. /0 (P²edm╪tNaPozici(pomX,pomY)==gKámen0)
  592. /d DalτíPiτk
  593. /3 (pomA==1)
  594. #A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok   #A:(i,2,10,2)  i=2,4..10
  595.     OdDoKrok
  596. =SP---------------------------------------------------------------------------
  597.  
  598. ;-h---------------------------------------------------------------------------
  599. void TáhnePoƒítaƒ( void )
  600. /*Prohledá hrací pole a ohodnotí stav piτkvorek */
  601. -s--TáhnePoƒítaƒ                                                                ■   5  -2  -8 259
  602.    ________TáhnePoƒítaƒ________
  603. Zaƒátek     HrálN╪kdo?      Konec
  604.   0!      Nehrál   Hrál
  605.             /s      b!
  606.           Kámen      #i
  607.            a!r    Sloupec
  608.                      #j
  609.                     Pole
  610.                  __Volné?_
  611.                  /2      /
  612.                 Ano      NE
  613.                 2!
  614.                  /b
  615.                Zatím
  616.               nejlepτí
  617.                 n!
  618.                ;Test
  619.                 ╪!
  620.                ƒw!
  621. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  622. 0 ;Lokální prom╪nné
  623.   int Nejlepτí;            //Nejlepτí tah
  624.   int PX,PY;               //Pracovní X a Y
  625.   int Hodnota;              //Hodnota s kterou pracovala funkce JakDobré
  626. 1 gX+=1;
  627.   gY+=0;
  628. 2 Hodnota=JakDobré(PX,PY);
  629. a gX=SLOUPCE/2;
  630.   gY=RADKY/2;
  631. b Nejlepτí=-32768;
  632. r return;
  633. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  634.   ¼ekejNaReakci();
  635. ╪ GrNastavV∞stup(4);
  636. τ GrNastavPozici(0,0);
  637.   GrPiτⁿet╪zec("Sou²adnice: ["+
  638.   StrL¼íslo(gX,-1)+";"+
  639.   StrL¼íslo(gY,-1)+"]     " );
  640. ƒ GrNastavPozici(0,0);
  641.   GrPiτⁿet╪zec("Nejlepτí["+
  642.     StrL¼íslo(Nejlepτí,-1));
  643. g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f);  /*40zn, edit ano, modrá/bílá   */
  644. X ¼arujNaPozici;         /* X:(p²edm╪t,x,y)!   1-150, 1-15, 1-10       */
  645. W ¼ekej                 /*  W:(milisekund)!   0-32000                 */
  646. m ;vypiτ ⁿet╪zec do grafického okénka
  647.    PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré             */
  648.    GrPiτⁿet╪zec(ⁿet╪zec);                /*vypíτe obsah prom╪nné ⁿet╪zec*/
  649.    GrNastavBarvy(PàvBarvy);              /*nastaví pàvodní barvy        */
  650. n ;Toto pole je zatím nejlepτí
  651.    gX = PX;
  652.    gY = PY;
  653.    Nejlepτí = Hodnota;
  654. ² GrNastavPozici(PX*DX_KT,PY*DY_KT);
  655.   GrPiτⁿet╪zec(KT2S);
  656. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  657. /s (gKamenà==0)
  658. /a (A[PX,PY]==0)
  659. /b (Hodnota > Nejlepτí)||((Hodnota == Nejlepτí) && (Náhodné¼íslo(10) < 3))
  660. /1 (gX<SLOUPCE)
  661. /2 (P²edm╪tNaPozici(PX+1,PY+1)==gKámen0)
  662. #i PX=0; PX<SLOUPCE; PX++
  663. #j PY=0; PY<RADKY; PY++
  664. =SP---------------------------------------------------------------------------
  665.  
  666. ;-h---------------------------------------------------------------------------
  667. void main( void )
  668. -s--main                                                                        ■  81  -2 -12 259
  669.            _________________________________main______________
  670.         Zaƒátek      │                 Ukonƒeno?           Konec
  671.          0[!         │                     /u               ]!s
  672.           i!k        │                     NE
  673.                      │                    w!
  674.                Opakování_tahà
  675.                    #:;;
  676.      _____________Tah___________________________
  677.      │       Kdo_táhne?     │           Kontroly_a_zm╪na
  678.      │       /4       /     │                9v!f
  679.      │     ¼lov╪k  Poƒítaƒ  │           ____Vyhrál?__
  680.      │      8!       d!     │           /3          /
  681.      │                      │         Vyhrál     Nevyhrál
  682.      │                      │          O!    Zm╪na_p²edm╪tu
  683.      │                      │    :break;!     /1        /
  684.  Zapln╪no?                  │                1->2      2->1
  685.      /K                 P²eruτil?             b!        a!
  686. PoleZapln╪né              /e
  687.     B!                   Ano
  688.                          c!
  689.                          B!
  690. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  691. 0 ;lokální prom╪nné:
  692. 4 GrPiτⁿet╪zec("Myτ: ["+
  693.     StrL¼íslo(gMyτUdálost.X,-1)+";"+
  694.     StrL¼íslo(gMyτUdálost.Y,-1)+"]     " );
  695. 8 TáhneHráƒ();  //Zjistí a otestuje sou²adnice stisku
  696. 9 PoloºKámen();
  697. a gP²edm╪t=gKámen1;    //Kámen prvniho hráƒe
  698. b gP²edm╪t=gKámen2;    //Kámen druhého hráƒe
  699. d TáhnePoƒítaƒ();
  700. f gHrრ= 1-gHráƒ;  //P²íτt╪ bude hrát ten druh∞
  701. g Konec = PoloºKámen();
  702. i Inicializace();
  703. v V∞hra();
  704. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  705.   ¼ekejNaReakci();
  706. ╪ ╤("Vyhrál");
  707. τ ╤("NeVyhrál");
  708. O OznaƒVít╪ze(); //Oznaƒí v∞t╪znou ²adu
  709. [ ;vytvo² Baltazaràv grafick∞ prostor
  710.    Vytvo²Prostor(); MyτZaƒátekObsluhy();
  711.    RychlostBaltazara(9);
  712.    BezObláƒku();
  713. ] ;zruτ Baltazaràv grafick∞ prostor
  714.    MyτKonecObsluhy(); ZruτProstor();
  715. k   MyτZobrazKurzor(); //Pro ovládání myτí
  716.     //MyτNastavGrKurzor(86))
  717. s DOSProve╘("wscript SDH_Run.js SDH.bpr /r");
  718. u GrPiτD¼íslo(D¼íslo1,10,2);             /*10 ƒíslic, z toho 2 desetinné*/
  719. B break;
  720. c gKonec = 2;
  721. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  722. /1 gP²edm╪t==gKámen1
  723. /g Táhnul==1
  724. /3 Vyhrál==1
  725. /P P²edm╪tP²edB()       /* Je, Není, <, >, <= ,>= */
  726. /K gKonec == ANO
  727. /4 gHráƒi[gHráƒ] == CLOVEK
  728. /e (¼tiKlávesuZFronty() == KlEsc)||(gKonec==2)
  729. /u gKonec != 2
  730. =SP---------------------------------------------------------------------------
  731.  
  732. //
  733. // Konec souboru
  734. //////////////////
  735.