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 >
Wrap
Text File
|
2002-09-20
|
27KB
|
735 lines
SGPC 5.05 032#000000151 18.08.2002 11:08:22 StructNo 3 3
# include <sgpbalt.h>
///////////////////
// Konstanty
//
#define POCITAC 0
#define CLOVEK 1
#define RADKY 10 //Poƒet ²ádkà na hrací ploτe
#define SLOUPCE 15 //Poƒet sloupcà na hrací ploτe
#define MIN_X 26 //Nejmenτí X-ové sou²adnice hrací plochy
#define MIN_Y 10 //Nejmenτí Y-ové sou²adnice hrací plochy
//Nejv╪tτí X-ové a X-ové sou²adnice hrací plochy
#define MAX_X SLOUPCE * X_PREDMET+MIN_X+X_PREDMET
#define MAX_Y RADKY * Y_PREDMET+MIN_Y+Y_PREDMET
#define X_PREDMET 39 //Velikost jednoho p²edm╪tu na τí²ku
#define Y_PREDMET 29 //Velikost jednoho p²edm╪tu na v∞τku
//První sada
#define KAMEN1 17001 //Kámen prvního hráƒe
#define KAMEN2 17002 //Kámen druhého hráƒe
#define KAMEN0 17003 //Kámen hracího pole
#define ZVYRAZNENI1 17004 //Zv∞razn╪ní piτkvorky 1. hráƒe
#define ZVYRAZNENI2 17005 //Zv∞razn╪ní piτkvorky 2. hráƒe
//Druhá sada
#define KAMEN11 17016 //Kámen prvního hráƒe
#define KAMEN12 17017 //Kámen druhého hráƒe
#define KAMEN10 17018 //Kámen hracího pole
#define ZVYRAZNENI11 17019 //Zv∞razn╪ní piτkvorky 1. hráƒe
#define ZVYRAZNENI12 17020 //Zv∞razn╪ní piτkvorky 2. hráƒe
//T²etí sada
#define KAMEN21 17031 //Kámen prvního hráƒe
#define KAMEN22 17032 //Kámen druhého hráƒe
#define KAMEN20 17033 //Kámen hracího pole
#define ZVYRAZNENI21 17034 //Zv∞razn╪ní piτkvorky 1. hráƒe
#define ZVYRAZNENI22 17035 //Zv∞razn╪ní piτkvorky 2. hráƒe
//¼tvrtá sada
#define KAMEN31 17046 //Kámen prvního hráƒe
#define KAMEN32 17047 //Kámen druhého hráƒe
#define KAMEN30 17048 //Kámen hracího pole
#define ZVYRAZNENI31 17049 //Zv∞razn╪ní piτkvorky 1. hráƒe
#define ZVYRAZNENI32 17050 //Zv∞razn╪ní piτkvorky 2. hráƒe
#define NIC 0 //Na políƒku nic neleºí
#define H1 1 //Na políƒku leºí kámen 1. hráƒe
#define H2 2 //Na políƒku leºí kámen 2. hráƒe
#define ZED 3 //
#define DX_KT 35 //Vzdálenost sloupcà kontrolních tiskà
#define DY_KT 15 //Vzdálenost ²ádkà kontrolních tiskà
#define X0_KT (SLOUPCE * X_PREDMET+MIN_X)
#define XM_KT (MIN_X + 15*X_PREDMET)
#define Y0_KT1 MIN_Y
#define YM_KT1 (Y0_KT1 + DY_KT*RADKY)
#define Y0_KT2 (YM_KT1 + DY_KT)
#define YM_KT2 (Y0_KT2 + DY_KT*RADKY)
#define X0_KT3 MIN_X
#define Y0_KT3 (YM_KT2+DY_KT)
#define YM_KT3 (MIN_Y + 10*Y_PREDMET)
#define KT2S " "
///////////////////
// Konstanty
//
typedef short bool; //Logické hodnoty
//////////////////////
// Globální prom╪nné
//
//Kandidáti na lokální
int gXp[5]; //Pracovní X p²i hledání piτkvorky
int gYp[5]; //Pracovní Y p²i hledání piτkvorky
int gHráƒi[2]; //Pamatuje si, jestli hraƒem je ƒlov╪k ƒi poƒítaƒ
bool gHráƒ; //Hrრna tahu 1, 0
int gX, gY; //Sou²adnice pole, na které se práv╪ poloºil kámen
int gP²edm╪t; //Kámen hráƒe, kter∞ je práv╪ na tahu
int gKámen0; //P²edm╪t prázdného pole
int gKámen1; //Kámen prvního hráƒe
int gKámen2 ; //Kámen druhého hráƒe
int gKamenà; //Poƒet kamenà na desce
int gKonec; //Neni zapln╪na plocha?
int gZv∞razn╪ní1; //Kámen, kter∞m se zv∞razní hotová piτkvorka 1. hráƒe
int gZv∞razn╪ní2; //Kámen, kter∞m se zv∞razní hotová piτkvorka 2. hráƒe
int Táhnul;
int Kameny;
//Zm╪na sou²adnice ve sm╪ru x a y p²i p²echodu na sousední pole v daném sm╪ru
int DX[] = { 1, 1, 0, -1 };
int DY[] = { 0, -1, -1, -1 };
//Hrací pole - kameny na jednotliv∞ch polích
int A[SLOUPCE][RADKY];
//Váha moºnosti umíst╪ní kamene poƒítaƒe a hráƒe
int Váha[2][5] = {{1,5,25,125,1000},{1,4,20,100,400}};
//Sm╪ry X-ov∞ch a Y-ov∞ch so²adnic, p²i hledání dobrého tahu
int dX[] = {1,1,0,-1};
int dY[] = {0,1,1, 1};
bool Vyhrál; //Poloºil p╪t kamenà
int gVítKam; //Poƒet kamenà ve vít╪zné piτkvorce
/////////////////////
// Pomocné definice
//
#define NE 0
#define ANO 1
#define ABS(x) ((x)>0?(x):-(x))
#define __CYKLUS(N) __Cyklus(1,N);__Cyklus(0,N); //Hlava cyklu
#define __MPVC_ 100 //Maximální poƒet vno²en∞ch cyklà
int __Cyklus( int Nov∞, int Poƒet )
//Nov∞ > 0: Otev²ení nového cyklu s N opakováními (vƒetn╪ 0)
//Nov∞ = 0: Dalτí pràchod cyklem
//Nov∞ < 0: P²edƒasné ukonƒení cyklu
{ static int I[__MPVC_];
static int i = -1;
if( Nov∞ > 0 )
{ if( ++i >= __MPVC_)
{ TxtPiτⁿet╪zec("P²íliτ mnoho vno²en∞ch cyklà");
while(1) {Tón(1000);};
}else I[i]=Poƒet;
}else if( Nov∞ == 0 )
{ if(--I[i]<0){ i--; return(0);}
else return(1);
}else return(-(i--)); //Vrací zápornou aktuální hloubku vno²ení
} //Cyklus
void ¼ekejNaReakci(void)
//¼eká na sitsk klávesy nebo tlaƒítka myτi
{ VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
¼ekej(NaKlávesu|NaMyτ);
VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
} //¼ekejNaReakci
long ¥¼ti¼íslo ( char* Text )
{ long Vrátit = 0;
GrNastavPozici(272, 0);
Gr¼tiL¼íslo(Text,Vrátit,8,1,0xe);
GrNastavPozici(272, 0);
GrPiτⁿet╪zec( " " );
return Vrátit;
} //¥¼ti¼íslo
void ╤( string s ) {
GrNastavPozici(0,0);
GrPiτⁿet╪zec(s+" ");
}
-o1-Globals ----------------------------------------------------------------
0 ;Lokální prom╪nné
a Klávesa= ¼tiKlávesuZFronty();
d Gr¼tiZnak("?",Znak,1,0x07); /* edit ano, ƒerná/sv.τedá*/
f VyprázdniFrontuKláves();
g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f); /*40zn, edit ano, modrá/bílá */
h Gr¼tiI¼íslo("?",I¼íslo1,6,0,0x0e); /* 6zn, edit ne, ƒerná/ºlutá */
i Gr¼tiD¼íslo("?",D¼íslo1,20,1,0x0f); /*20zn, edit ne, ƒerná/bílá */
j GrPiτZnak(Znak);
k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
m ;vypiτ ⁿet╪zec do grafického okénka
PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré */
GrPiτⁿet╪zec(ⁿet╪zec); /*vypíτe obsah prom╪nné ⁿet╪zec*/
GrNastavBarvy(PàvBarvy); /*nastaví pàvodní barvy */
q GrPiτL¼íslo(I¼íslo1,-1); /* -1 = nejkratτí v∞pis */
t P²epniNaText();
u GrPiτD¼íslo(D¼íslo1,10,2); /*10 ƒíslic, z toho 2 desetinné*/
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
W ¼ekej /* W:(milisekund)! 0-32000 */
X ¼arujNaPozici /* X:(p²edm╪t,x,y)! 1-150, 1-15, 1-10 */
-c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
\C case
#C ; n-krát #C:(5) 5╫
__CYKLUS
#A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok #A:(i,2,10,2) i=2,4..10
OdDoKrok
#D ;opakuj sestupn╪ pro prom╪nnou od,do,krok #D:(i,10,2,2) i=10,8..2
OdDolàDoKrok
#M ;opakuj n-krát sestupn╪ pro prom╪nnou #M:(i,8) (8x) i=7,6..0
DolàDo0
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
===Globals --------------------------------------------------------------
/*-hf(*/
/*-hf-*/
void Inicializace( void )
/* Inicializuje globální prm╪nné, vykreslí prázdné pole
a vynuluje pole A, kam se budou zaznamenávat tahy. */
/*-hf-*/;
void TáhneHráƒ( void )
/*¼eká na událost myτi Levé tlaƒítko nahoru,
P²evede sou²adnice myτi na políƒkové
a zapamatuje si je v gX a gY */
/*-hf-*/;
void PoloºKámen( void )
/* Na sou²adnice v globálníh prom╪nn∞ch gX a gY
poloºí p²edm╪t gP²edm╪t = kámen hráƒe, kter∞ táhnul.
Pokud je zapln╪né celé pole, dá do gKonec hodnotu ANO┤. */
/*-hf-*/;
void OznaƒVít╪ze( void )
/* Je volána pokud n╪kdo poloºí pát∞ kámen do své piτkvorky.
Funkce oznaƒí piτkvorku a vytiskne nápis pro vít╪ze. */
/*-hf-*/;
void V∞hra ( void )
/* Zjistí, jestli po vloºení kamene na políƒko o sou²adnicích [gX;gY]
nevznikne celá piτkorka.
Pokud vznikne, vrátí 1, jinak vrátí 0.
*/
/*-hf-*/;
int JakDobré(int PX, int PY)
/* Najde piτkvorky procházející polem [PX;PY]
a vyhodnotí jejich váhu podle jejich majitele a poƒtu kamenà.
Hodnota pole je souƒet vah piτkvorek. */
/*-hf-*/;
void TáhnePoƒítaƒ( void )
/*Prohledá hrací pole a ohodnotí stav piτkvorek */
/*-hf-*/;
void main( void )
/*-hf)*/;
;-h---------------------------------------------------------------------------
void Inicializace( void )
/* Inicializuje globální prm╪nné, vykreslí prázdné pole
a vynuluje pole A, kam se budou zaznamenávat tahy. */
-s--Inicializace ■ 10 -2 -5 259
_Inicializace_____________________
0abd! P²iprav~τachovnici Ukonƒí~se
g! a~pole~A º!
c! #x
___________Sada_______ ⁿada
/1 /2 /3 / #y
Pole Klávesy Barvy Láhve Pole
1! 4! 5! 6! 2!3
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;Lokální prom╪nné
int x, y; //Sou²adnice na tisk hracího pole
string Vstup; //Parametry o hráƒích
int Vstup1; //¼íslo sady kamenà kterou hrრvybral
bool Chyba; //Nepovedlo se p²evéct
1 //Inicializace globálních prom╪nn∞ch
gKámen0=KAMEN0;
gKámen1=KAMEN1;
gKámen2=KAMEN2;
gP²edm╪t=gKámen1;
gZv∞razn╪ní1=ZVYRAZNENI1;
gZv∞razn╪ní2=ZVYRAZNENI2;
2 A[x][y]=0; //Vτechny pole jsou prázdné
3 ¼arujNaPozici(gKámen0,x+1,y+1)
4 //Inicializace globálních prom╪nn∞ch
gKámen0=KAMEN10;
gKámen1=KAMEN11;
gKámen2=KAMEN12;
gP²edm╪t=gKámen1;
gZv∞razn╪ní1=ZVYRAZNENI11;
gZv∞razn╪ní2=ZVYRAZNENI12;
5 //Inicializace globálních prom╪nn∞ch
gKámen0=KAMEN20;
gKámen1=KAMEN21;
gKámen2=KAMEN22;
gP²edm╪t=gKámen1;
gZv∞razn╪ní1=ZVYRAZNENI21;
gZv∞razn╪ní2=ZVYRAZNENI22;
6 //Inicializace globálních prom╪nn∞ch
gKámen0=KAMEN30;
gKámen1=KAMEN31;
gKámen2=KAMEN32;
gP²edm╪t=gKámen1;
gZv∞razn╪ní1=ZVYRAZNENI31;
gZv∞razn╪ní2=ZVYRAZNENI32;
a Vstup=DOSArgument(1);
gHráƒi[0]=(int)StrNaL¼íslo( Vstup, (int*)&Chyba );
b Vstup=DOSArgument(2);
gHráƒi[1]=(int)StrNaL¼íslo( Vstup, (int*)&Chyba );
c Vstup=DOSArgument(3);
Vstup1=(int)StrNaL¼íslo( Vstup, (int*)&Chyba );
d EscPlus();
g GrNastavV∞stup(3|8, X0_KT, Y0_KT1, XM_KT, YM_KT1 );
GrNastavV∞stup(4|8, X0_KT, Y0_KT2, XM_KT, YM_KT2 );
GrNastavV∞stup(5|8, X0_KT3, Y0_KT3, XM_KT, YM_KT3 );
GrNastavV∞stup(3);
GrSmaºOkno();
╪ //Vytiskni obsah pole A[x,y]
GrNastavPozici(x*DX_KT,y*DY_KT);
GrPiτL¼íslo(A[x][y],-1);
τ GrPiτL¼íslo((SLOUPCE * X_PREDMET+MIN_X),-1);GrPiτⁿet╪zec(", ");
GrPiτL¼íslo((MIN_Y) ,-1);GrPiτⁿet╪zec(", ");
GrPiτL¼íslo((15 * X_PREDMET+MIN_X) ,-1);GrPiτⁿet╪zec(", ");
GrPiτL¼íslo((10 * Y_PREDMET+MIN_Y) ,-1);GrPiτⁿet╪zec(", ");
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
m ;vypiτ ⁿet╪zec do grafického okénka
PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré */
GrPiτⁿet╪zec(ⁿet╪zec); /*vypíτe obsah prom╪nné ⁿet╪zec*/
GrNastavBarvy(PàvBarvy); /*nastaví pàvodní barvy */
k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
j GrPiτZnak(Znak);
º /*Okénko*/ GrNastavV∞stup(0);
GrNastavBarvuPozadí(0);
GrNastavBarvuPop²edí(14);
GrSmaºOkno();
GrPiτⁿet╪zec("Esc=Konec");
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#x x=0; x<SLOUPCE; x++ //Pokryjeme Prázdn∞m kamenem urƒit∞ poƒet sloupcà
#y y=0; y<RADKY; y++ //Pokryjeme Prázdn∞m kamenem urƒit∞ poƒet
/1 Vstup1==1
/2 Vstup1==0
/3 Vstup1==2
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void TáhneHráƒ( void )
/*¼eká na událost myτi Levé tlaƒítko nahoru,
P²evede sou²adnice myτi na políƒkové
a zapamatuje si je v gX a gY */
-s--TáhneHrრ■ 21 -2 -4 259
TáhneHráƒ
Zaćtek Tah
0! +1
Oznaƒ
6a!
_____Konec?_____
/m /e
Puτt╪no Ukonƒil
/p k!
Prázdno :break;!
v!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 int Volno = NE; //Táhnout màºe jen na volné místo
6 Myτ¼tiUdálost(gMyτUdálost);
a gX=(gMyτUdálost.X - MIN_X)/X_PREDMET;
gY=(gMyτUdálost.Y - MIN_Y)/Y_PREDMET;
v Volno = ANO;
╪ GrPiτⁿet╪zec("Bod 1");
τ GrPiτⁿet╪zec(" ");
ƒ GrPiτⁿet╪zec("Myτ: ["+
StrL¼íslo(gMyτUdálost.X,-1)+";"+
StrL¼íslo(gMyτUdálost.Y,-1)+"] " );
k gKonec=2;
s MyτSchovejKurzor();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/m gMyτUdálost.Typ == MyτUdálostLevéTlNahoru
/p P²edm╪tNaPozici(gX+1,gY+1)==gKámen0
/n PràchodnostP²edm╪tuP²edB() Je 0
/j gP²edm╪t == KAMEN1
/a gMyτUdálost.X<=MAX_X && gMyτUdálost.Y<=MAX_Y
/e ¼tiKlávesuZFronty() == KlEsc
+1 Volno==NE
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void PoloºKámen( void )
/* Na sou²adnice v globálníh prom╪nn∞ch gX a gY
poloºí p²edm╪t gP²edm╪t = kámen hráƒe, kter∞ táhnul.
Pokud je zapln╪né celé pole, dá do gKonec hodnotu ANO┤. */
-s--PoloºKámen ■ 6 -2 -3 259
____________PoloºKámen______________
Zaƒátek Prost²edek Konec
p!3 /K
:gKamenà+=1! Zapln╪no
Zaznamenej~p²edm╪t k!
/1 /
Druh∞ První
2! 1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 A[gX][gY]=H1;
2 A[gX][gY]=H2;
3 MyτNastavPozici((gX+1)*X_PREDMET+3,(gY+1)*Y_PREDMET-3);
p //Vyƒaruj p²edm╪t
MyτSchovejKurzor();
¼arujNaPozici(gP²edm╪t,gX+1,gY+1);
MyτZobrazKurzor(); //Kurzor by p²emazal kámen
k gKonec=1;
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
╪ //Vytiskni obsah pole A[x,y]
GrNastavV∞stup(3);
GrNastavPozici(gX*DX_KT,gY*DY_KT);
GrPiτL¼íslo(A[gX][gY],-1);
ƒ GrNastavPozici(0,0);
GrPiτⁿet╪zec("Sou²adnice["+
StrL¼íslo(gX,-1)+";"+
StrL¼íslo(gY,-1)+"] " );
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/K gKamenà==RADKY*SLOUPCE
/1 (gHrრ== 1)
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void OznaƒVít╪ze( void )
/* Je volána pokud n╪kdo poloºí pát∞ kámen do své piτkvorky.
Funkce oznaƒí piτkvorku a vytiskne nápis pro vít╪ze. */
-s--OznaƒVít╪ze ■ 9 -2 -2 259
_____________OznaƒVít╪ze_________________
Zaƒátek Vyhrál________ Konec
02!s __Vyhrál? Zobraz~²adu k!
/1 / #A:(²ada,0,4,1)
Ano Ne Pole
!╪ !τ 1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;Lokální prom╪nné
int ²ada;
int Zv∞razn╪ní = (gHrრ== 0) ? gZv∞razn╪ní1 : gZv∞razn╪ní2;
k MyτZobrazKurzor();
s MyτSchovejKurzor();
X ¼arujNaPozici /* X:(p²edm╪t,x,y)! 1-150, 1-15, 1-10 */
╪ ╤("Blahop²eji k vít╪zství");
τ ╤("Musíτ se opravdu jeτt╪ uƒit");
1 ¼arujNaPozici(Zv∞razn╪ní,gXp[²ada],gYp[²ada])
2 /*Okénko*/ GrNastavV∞stup(0);
GrNastavBarvuPozadí(9);
GrNastavBarvuPop²edí(12);
GrSmaºOkno();
GrNastavPozici(0,0);
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
#A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok #A:(i,2,10,2) i=2,4..10
OdDoKrok
/1 gHráƒi[gHráƒ] == CLOVEK
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void V∞hra ( void )
/* Zjistí, jestli po vloºení kamene na políƒko o sou²adnicích [gX;gY]
nevznikne celá piτkorka.
Pokud vznikne, vrátí 1, jinak vrátí 0.
*/
-s--V∞hra ■ 54 -2 -1 259
_________V∞hra_________
Zaƒátek │ Odpov╪z
07! │ 2!
│
Cyklus
#A:(sm╪r,0,3,1)
______________________Sm╪r______________________
Vp²ed Vzad _Vyhrál?
35! 5! /5
#:;; #:;; Nepokraƒujem
Doprava Doleva 6!
f! g! :break;!
_Rozhodni_ __Rozhodni__
/1 / /3 /
Naτli Nenaτli Naτli Nenaτli
4!1 !:break; 41! :break;!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
ß return Vyhrál;
0 ;Lokální prom╪nné
int Piτkvorka[5]; //Vít╪z musí poskládat piτkvorku z p╪ti kamenà
int Pole; //Kámen v piτkvorce
int X; //Pracovní X
int Y; //Pracovní Y
int dX; //Pomocné X
int dY; //Pomocné Y
int sm╪r; //Sm╪r kontroly
int ²ada; //Po²adí p²edm╪tu v poli gXp a gYp
1 //Uloºíme sou²adnice dalτího p²edm╪tu v testovanné ²ad╪
gXp[²ada]=X;
gYp[²ada]=Y;
2 gXp[0]=gX+1;
gYp[0]=gY+1;
3 ;Inicializuj pot²ebné prom╪nné
Pole=1; //Uº je zaznamenán jeden kámen
²ada=0; //Zaplσujeme pole gXp a gYp od poƒátku
dX=DX[sm╪r];
dY=DY[sm╪r];
4 Pole++;
²ada+=1;
5 X=gX+1; Y=gY+1;
6 Vyhrál=1
7 Vyhrál=0
8 gVítKam=Pole-1
b Piτkvorka[Pole]=1;
f X=X+dX, Y=Y+dY
g X=X-dX, Y=Y-dY
╪ GrNastavV∞stup(0);
GrPiτⁿet╪zec("Bod 1");
τ GrPiτⁿet╪zec(" ");
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 (P²edm╪tNaPozici(X,Y)==gP²edm╪t)
/3 (P²edm╪tNaPozici(X,Y)==gP²edm╪t)
/5 (Pole >= 5)
+x Pole<5
+y Pole<5
#A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok #A:(i,2,10,2) i=2,4..10
OdDoKrok
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
int JakDobré(int PX, int PY)
/* Najde piτkvorky procházející polem [PX;PY]
a vyhodnotí jejich váhu podle jejich majitele a poƒtu kamenà.
Hodnota pole je souƒet vah piτkvorek. */
-s--JakDobré ■ 2 -2 -5 259
______________JakDobré____________________
Zaƒátek Projdi~vτechny~sm╪ry Konec
0! #A:(Sm╪r,0,3,1) r!
Sm╪r
#A:(Piτkvorka,-4,0,1)
___________Piτkvorka________
Vynuluj Zjisti
Obsah ____________Obsah_________________
o! Projdi~kameny Zpráva Konec? Nastav~váhu
#A:(Kámen,0,4,1) /d /o
Po²adí~kamene Dalτí Má~smysl
v~piτkvorce piτkvorka b!
2! 7!:continue;
Neni~tam~ze╘?
/k /
Není Je
34! 58!ß
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
ß break;
0 ;Lokální prom╪nné
int Hodnota = 0; //Hodnota testovaného pole
int Sm╪r; //Sm╪r piτkvorky
int Obsah[4]; //Kolik je v piτkorce kamenà jednotliv∞ch druhà
int Piτkvorka; //Posun poƒátku procházející piτkvorky
int Kámen; //Po²adí kamene v piτkvorce
int pomX, pomY; //Sou²adnice pole, na jehoº obsah se ptám
int pomA; //Obsah testovaného pole
bool DalτíPiτk=NE; //Jestli ukonƒit test této piτkvorky a jít na dalτí
2 ;Zjisti sou²adnice dalτího pole
pomX =PX + dX[Sm╪r]*(Piτkvorka+Kámen);
pomY =PY + dY[Sm╪r]*(Piτkvorka+Kámen);
3 ;Zjisti co je v testovaném poli
pomA = A[pomX][pomY];
4 ;gKamenà typu pomA je v piτkvorce o jeden víc
Obsah[ pomA ] += 1;
5 ;Je tam ze╘
Obsah[ ZED ] += 1;
6 pomX+=1;
pomY+=1;
7 DalτíPiτk = NE;
8 DalτíPiτk = ANO;
a Klávesa= ¼tiKlávesuZFronty();
b Hodnota += Váha[0][Obsah[ H1 ]] +
Váha[1][Obsah[ H2 ]] + Obsah[NIC]
o for(Kámen=0; Kámen<=3; Obsah[Kámen++]=0 );
r return Hodnota;
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
╪ ╤("Vyhrál");
τ ╤("NeVyhrál");
ƒ GrNastavPozici(0,0);
GrPiτⁿet╪zec("Hodnota["+
StrL¼íslo(Hodnota,-1));
² //Vytiskni obsah pole A[x,y]
int kx=PX*DX_KT;
int ky=PY*DY_KT;
GrNastavV∞stup(4);
GrNastavPozici(kx,ky);
GrPiτⁿet╪zec(KT2S);
GrNastavPozici(kx,ky);
GrPiτL¼íslo(Hodnota,-1);
º GrNastavV∞stup(5);
GrPiτL¼íslo(Piτkvorka,-1);GrPiτⁿet╪zec(". piτkvorka\n");
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/o (Obsah[ZED]==0)&&(Obsah[H1]*Obsah[H2]==0)
/k (pomX>=0) && (pomX<SLOUPCE) && (pomY>=0) && (pomY<RADKY)
/1 (P²edm╪tNaPozici(pomX,pomY)==gP²edm╪t)
/2 (P²edm╪tNaPozici(pomX,pomY)==gP²edm╪t)
/0 (P²edm╪tNaPozici(pomX,pomY)==gKámen0)
/d DalτíPiτk
/3 (pomA==1)
#A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok #A:(i,2,10,2) i=2,4..10
OdDoKrok
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void TáhnePoƒítaƒ( void )
/*Prohledá hrací pole a ohodnotí stav piτkvorek */
-s--TáhnePoƒítaƒ ■ 5 -2 -8 259
________TáhnePoƒítaƒ________
Zaƒátek HrálN╪kdo? Konec
0! Nehrál Hrál
/s b!
Kámen #i
a!r Sloupec
#j
Pole
__Volné?_
/2 /
Ano NE
2!
/b
Zatím
nejlepτí
n!
;Test
╪!
ƒw!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;Lokální prom╪nné
int Nejlepτí; //Nejlepτí tah
int PX,PY; //Pracovní X a Y
int Hodnota; //Hodnota s kterou pracovala funkce JakDobré
1 gX+=1;
gY+=0;
2 Hodnota=JakDobré(PX,PY);
a gX=SLOUPCE/2;
gY=RADKY/2;
b Nejlepτí=-32768;
r return;
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
╪ GrNastavV∞stup(4);
τ GrNastavPozici(0,0);
GrPiτⁿet╪zec("Sou²adnice: ["+
StrL¼íslo(gX,-1)+";"+
StrL¼íslo(gY,-1)+"] " );
ƒ GrNastavPozici(0,0);
GrPiτⁿet╪zec("Nejlepτí["+
StrL¼íslo(Nejlepτí,-1));
g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f); /*40zn, edit ano, modrá/bílá */
X ¼arujNaPozici; /* X:(p²edm╪t,x,y)! 1-150, 1-15, 1-10 */
W ¼ekej /* W:(milisekund)! 0-32000 */
m ;vypiτ ⁿet╪zec do grafického okénka
PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré */
GrPiτⁿet╪zec(ⁿet╪zec); /*vypíτe obsah prom╪nné ⁿet╪zec*/
GrNastavBarvy(PàvBarvy); /*nastaví pàvodní barvy */
n ;Toto pole je zatím nejlepτí
gX = PX;
gY = PY;
Nejlepτí = Hodnota;
² GrNastavPozici(PX*DX_KT,PY*DY_KT);
GrPiτⁿet╪zec(KT2S);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/s (gKamenà==0)
/a (A[PX,PY]==0)
/b (Hodnota > Nejlepτí)||((Hodnota == Nejlepτí) && (Náhodné¼íslo(10) < 3))
/1 (gX<SLOUPCE)
/2 (P²edm╪tNaPozici(PX+1,PY+1)==gKámen0)
#i PX=0; PX<SLOUPCE; PX++
#j PY=0; PY<RADKY; PY++
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void main( void )
-s--main ■ 81 -2 -12 259
_________________________________main______________
Zaƒátek │ Ukonƒeno? Konec
0[! │ /u ]!s
i!k │ NE
│ w!
Opakování_tahà
#:;;
_____________Tah___________________________
│ Kdo_táhne? │ Kontroly_a_zm╪na
│ /4 / │ 9v!f
│ ¼lov╪k Poƒítaƒ │ ____Vyhrál?__
│ 8! d! │ /3 /
│ │ Vyhrál Nevyhrál
│ │ O! Zm╪na_p²edm╪tu
│ │ :break;! /1 /
Zapln╪no? │ 1->2 2->1
/K P²eruτil? b! a!
PoleZapln╪né /e
B! Ano
c!
B!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
0 ;lokální prom╪nné:
4 GrPiτⁿet╪zec("Myτ: ["+
StrL¼íslo(gMyτUdálost.X,-1)+";"+
StrL¼íslo(gMyτUdálost.Y,-1)+"] " );
8 TáhneHráƒ(); //Zjistí a otestuje sou²adnice stisku
9 PoloºKámen();
a gP²edm╪t=gKámen1; //Kámen prvniho hráƒe
b gP²edm╪t=gKámen2; //Kámen druhého hráƒe
d TáhnePoƒítaƒ();
f gHrრ= 1-gHráƒ; //P²íτt╪ bude hrát ten druh∞
g Konec = PoloºKámen();
i Inicializace();
v V∞hra();
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
╪ ╤("Vyhrál");
τ ╤("NeVyhrál");
O OznaƒVít╪ze(); //Oznaƒí v∞t╪znou ²adu
[ ;vytvo² Baltazaràv grafick∞ prostor
Vytvo²Prostor(); MyτZaƒátekObsluhy();
RychlostBaltazara(9);
BezObláƒku();
] ;zruτ Baltazaràv grafick∞ prostor
MyτKonecObsluhy(); ZruτProstor();
k MyτZobrazKurzor(); //Pro ovládání myτí
//MyτNastavGrKurzor(86))
s DOSProve╘("wscript SDH_Run.js SDH.bpr /r");
u GrPiτD¼íslo(D¼íslo1,10,2); /*10 ƒíslic, z toho 2 desetinné*/
B break;
c gKonec = 2;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 gP²edm╪t==gKámen1
/g Táhnul==1
/3 Vyhrál==1
/P P²edm╪tP²edB() /* Je, Není, <, >, <= ,>= */
/K gKonec == ANO
/4 gHráƒi[gHráƒ] == CLOVEK
/e (¼tiKlávesuZFronty() == KlEsc)||(gKonec==2)
/u gKonec != 2
=SP---------------------------------------------------------------------------
//
// Konec souboru
//////////////////