home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 December
/
PCWorld_2002-12_cd.bin
/
Software
/
Komercni
/
Baltik
/
katB.exe
/
katB
/
PARTIE
/
PARTIE3D.SGP
< prev
Wrap
Text File
|
2002-09-25
|
21KB
|
613 lines
SGPC 5.05 034#000001035 30.08.2002 13:01:21 StructNo 5 5
# include <sgpbalt.h>
struct
{
float x,y,z,rx,ry,rz,ux,uy,uz;
} k[1000];
int i,ii,iii,sx,sy,sz,x,y,z,zi;
int key;
TypSoubor txt,kom;
typedef struct {
int x,y;
} Bod;
struct {
Bod b[14];
int body,tri,triktere[3][3],
tetra,tetraktere[4][4];
} maska[6];
int s[8][8];
struct {
int misto,index,barva;
} maskot[64];
int celkem,n;
struct {
int polys,bodu[22];
int wall[22];
Bod pol[22][4];
} polymat;
struct {
int pole;
float z;
} bubble[65];
Typ¼as cas;
//////////////////////
// Globální prom╪nné
//
// prom╪nné celoƒíselné:
int gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ, // rozsah -32768..32767
gI¼íslo1,gI¼íslo2,gI¼íslo3,gPàvBarvy;
// gKlávesa je souƒástí knihovny Baltazara
// prom╪nné reálné:
double gD¼íslo1,gD¼íslo2,gD¼íslo3; // rozsah 5.0E-324..1.7E308
// prom╪nná znak:
char gZnak;
// prom╪nná ²et╪zec:
string gⁿet╪zec;
/////////////////////
// Pomocné definice
//
#define NE 0
#define ANO 1
#define ABS(x) ((x)>0?(x):-(x))
#define __CYKLUS(N) __Cyklus(1,N);__Cyklus(0,N); //Hlava cyklu
#define __MPVC_ 100 //Maximální poƒet vno²en∞ch cyklà
int __Cyklus( int Nov∞, int Poƒet )
//Nov∞ > 0: Otev²ení nového cyklu s N opakováními (vƒetn╪ 0)
//Nov∞ = 0: Dalτí pràchod cyklem
//Nov∞ < 0: P²edƒasné ukonƒení cyklu
{ static int I[__MPVC_];
static int i = -1;
if( Nov∞ > 0 )
{ if( ++i >= __MPVC_)
{ TxtPiτⁿet╪zec("P²íliτ mnoho vno²en∞ch cyklà");
while(1) {Tón(1000);};
}else I[i]=Poƒet;
}else if( Nov∞ == 0 )
{ if(--I[i]<0){ i--; return(0);}
else return(1);
}else return(-(i--)); //Vrací zápornou aktuální hloubku vno²ení
} //Cyklus
void ¼ekejNaReakci(void)
//¼eká na sitsk klávesy nebo tlaƒítka myτi
{ VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
¼ekej(NaKlávesu|NaMyτ);
VyprázdniFrontuKláves();
MyτVyprázdniFrontuUdálostí();
} //¼ekejNaReakci
long ¥¼ti¼íslo ( char* Text )
{ long Vrátit = 0;
GrNastavPozici(272, 0);
Gr¼tiL¼íslo(Text,Vrátit,8,1,0xe);
GrNastavPozici(272, 0);
GrPiτⁿet╪zec( " " );
return Vrátit;
} //¥¼ti¼íslo
long BaltEmuluj( char* Text )
{ long Vrátit = 0;
int Klávesa;
int Konec = 0;
TypP²edm╪t P²edm╪t=1;
VyprázdniFrontuKláves();
GrNastavBarvy( 0x7 ); GrSmaºOkno();
GrPiτⁿet╪zec( Text );
Tón(1000); ¼ekej(10); VypniTón();
while (!Konec)
{ int p;
GrNastavPozici(0, GrV∞τkaZnaku);
GrPiτⁿet╪zec( "ⁿá: "); GrPiτL¼íslo( PoziceBaltazaraY(), 2 );
GrPiτⁿet╪zec( ", Sl: " ); GrPiτL¼íslo( PoziceBaltazaraX(), 2 );
GrPiτⁿet╪zec( ", Sm: " );
int s=Sm╪rBaltazara();
GrPiτⁿet╪zec( s==V∞chod ? "V∞chod" :
s==Jih ? "Jih " :
s==Západ ? "Západ " :
"Sever " );
GrPiτⁿet╪zec( ", Ba: " ); NastavBarvu¼arování( p=NastavBarvu¼arování(0));
GrPiτL¼íslo( p, 2 );
GrPiτⁿet╪zec( ", Ry: " ); RychlostBaltazara(p = RychlostBaltazara(0));
GrPiτL¼íslo( p, 2 );
switch ¼tiKlávesuZFrontyS¼ekáním()
{ case KlDoleva: VlevoVbok(); break;
case KlDoprava: VpravoVbok(); break;
case KlNahoru: Popojdi(1); break;
case KlDolà: ¼aruj(Baltedit()); break;
case KlIns: Vrátit = ¥¼ti¼íslo( "¼íslo: " ); break;
case 'B':
case 'b': NastavBarvu¼arování( ¥¼ti¼íslo("Barva: ") ); break;
case 'C':
case 'c': ¼aruj(¼tverec); break;
case 'R':
case 'r': RychlostBaltazara( ¥¼ti¼íslo("Rychlost: ") ); break;
case KlEnter: Konec = 1; break;
} //switch
} //while
GrNastavBarvy( 0x77 ); GrSmaºOkno();
return Vrátit;
} //BaltEmuluj
///////////////////
// Globální makra
//
-o1-Globals ----------------------------------------------------------------
0 ;prom╪nné
;globální prom╪nné (jsou definovány v globálních definicích Ctrl+G):
;prom╪nné celoƒíselné: gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,gKlávesa;
;dalτí p²eddefinované globální prom╪nné mají vºdy p²edponu g..
;a jejich názvy jsou shodné s lokálními prom╪nn∞mi definovan∞mi níºe,
;nap². gD¼íslo1, gⁿet╪zec atd.
;lokální prom╪nné:
;prom╪nné celoƒíselné:
int a,b,c,d,e,f,g,h,i,j,Klávesa, //rozsah -32768..32767
I¼íslo1,I¼íslo2,I¼íslo3,PàvBarvy;
;prom╪nné reálné:
double D¼íslo1,D¼íslo2,D¼íslo3; //rozsah 5.0E-324..1.7E308
;prom╪nná znak:
char Znak;
;prom╪nná ²et╪zec:
string ⁿet╪zec;
[ ;vytvo² Baltazaràv grafick∞ prostor
Vytvo²Prostor(); MyτZaƒátekObsluhy();
] ;zruτ Baltazaràv grafick∞ prostor
MyτKonecObsluhy(); ZruτProstor();
a Klávesa= ¼tiKlávesuZFronty();
b P²epniNaBaltazara();
c ¼aruj(¼tverec);
d Gr¼tiZnak("?",Znak,1,0x07); /* edit ano, ƒerná/sv.τedá*/
╨ return BaltEmuluj("Hodnota?");
e BezObláƒku();
f VyprázdniFrontuKláves();
g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f); /*40zn, edit ano, modrá/bílá */
h Gr¼tiI¼íslo("?",I¼íslo1,6,0,0x0e); /* 6zn, edit ne, ƒerná/ºlutá */
i Gr¼tiD¼íslo("?",D¼íslo1,20,1,0x0f); /*20zn, edit ne, ƒerná/bílá */
j GrPiτZnak(Znak);
k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
l VlevoVbok();
ê BaltEmuluj("STOP");
m ;vypiτ ⁿet╪zec do grafického okénka
PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré */
GrPiτⁿet╪zec(ⁿet╪zec); /*vypíτe obsah prom╪nné ⁿet╪zec*/
GrNastavBarvy(PàvBarvy); /*nastaví pàvodní barvy */
n Neviditeln∞();
o SObláƒkem();
p Popojdi(1);
q GrPiτL¼íslo(I¼íslo1,-1); /* -1 = nejkratτí v∞pis */
r VpravoVbok();
t P²epniNaText();
u GrPiτD¼íslo(D¼íslo1,10,2); /*10 ƒíslic, z toho 2 desetinné*/
v Viditeln∞();
w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
¼ekejNaReakci();
x Skryj();
y Odhal();
z ;ƒelem vzad
VlevoVbok(); VlevoVbok();
B NastavBarvu¼arování /* B:(barva)! 0-15 */
C ¼aruj /* C:(p²edm╪t)! 1-150 */
╤ return BaltEmuluj /* ╤:("Volno")! "Test" */
L NaƒtiScénu /* L:("soubor")! "c:\\pavel\\soubor.s00" */
¥ BaltEmuluj /* ¥:("Text")! "Test" */
N Náhodn╪¼aruj /* N:(p²edm╪t)! 1-150 */
P Popojdi /* P:(poƒet_polí)! 0-14 */
R RychlostBaltazara /* R:(rychlost)! 0-9 */
S UloºScénu /* S:("soubor")! "c:\\pavel\\soubor.s00" */
W ¼ekej /* W:(milisekund)! 0-32000 */
X ¼arujNaPozici /* X:(p²edm╪t,x,y)! 1-150, 1-15, 1-10 */
-c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
?n PràchodnostP²edm╪tuP²edB() Je 0
?p PràchodnostP²edm╪tuP²edB() Je 1
?B Barva¼tverceP²edB() /* Je, Není, <, >, <= ,>= */
?P P²edm╪tP²edB() /* Je, Není, <, >, <= ,>= */
?S Sm╪rBaltazara() /* Je, Není, <, >, <= ,>= */
\b Barva¼tverceP²edB()??
\p P²edm╪tP²edB()??
\s Sm╪rBaltazara()??
\C case
#C ; n-krát #C:(5) 5₧
__CYKLUS
#A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok #A:(i,2,10,2) i=2,4..10
OdDoKrok
#D ;opakuj sestupn╪ pro prom╪nnou od,do,krok #D:(i,10,2,2) i=10,8..2
OdDolàDoKrok
#M ;opakuj n-krát sestupn╪ pro prom╪nnou #M:(i,8) (8x) i=7,6..0
DolàDo0
#N ;opakuj n-krát vzestupn╪ pro prom╪nnou #N:(i,8) (8x) i=0,1..7
Od0
===Globals ------------------------------------------------------------------
/*-hf(*/
/*-hf-*/
int x3d(float x,z)
/*-hf-*/;
int y3d(float y,z)
/*-hf-*/;
float Θhel(float x,y)
/*-hf-*/;
float Volno(float u)
/*-hf-*/;
void Def( void )
/*-hf-*/;
void main( void ) // ░░▒▒▓▓██ PARTIE V1.00 3D MODUL (public domain) ██▓▓▒▒░░
/*-hf)*/;
;-h---------------------------------------------------------------------------
int x3d(float x,z)
-s--x3d ■ 4 -2 -30 3
x3d
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;body
return(integer(320-512*(320-x)/z));
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
int y3d(float y,z)
-s--y3d ■ 4 -2 -30 3
y3d
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;body
return(integer(240-512*(240-y)/z));
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
float Θhel(float x,y)
-s--Θhel ■ 4 -2 -29 3
Θhel
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;body
if ((x==0) && (x==y)) return(0); else
{
if (x==0)
if (y<0) return(270); else return(90);
if (y==0)
if (x<0) return(180); else return(0);
if ((x!=0) && (y!=0))
{
if (x<0)
if (y<0) return(180+atan(y/x)*180/Pí); else
return(90+atan(abs(x/y))*180/Pí);
if (x>0)
if (y<0) return(270+atan(abs(x/y))*180/Pí); else
return(atan(y/x)*180/Pí);
}
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
float Volno(float u)
-s--Volno ■ 4 -2 -29 3
Volno
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;body
if (u>360) return(u-360); else
if (u<0) return(360+u); else return(u);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Def( void )
-s--Def ■ 4 -2 -30 3
Def
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;t╪lo
for (i=0; i<=celkem; i++)
{
k[i].rx=sqrt(sqr(k[i].y)+sqr(k[i].z));
k[i].ry=sqrt(sqr(k[i].x)+sqr(k[i].z));
k[i].rz=sqrt(sqr(k[i].x)+sqr(k[i].y));
k[i].ux=Θhel(k[i].z,k[i].y);
k[i].uy=Θhel(k[i].x,k[i].z);
k[i].uz=Θhel(k[i].x,k[i].y);
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void main( void ) // ░░▒▒▓▓██ PARTIE V1.00 3D MODUL (public domain) ██▓▓▒▒░░
-s--Partie3D ■ 13 -2 -19 3
____________Partie3D___
Zaƒátek Prost²edek Konec
:EscPlus() 2! 3!
:GrNastavMód(2)
:GrNastavV∞stup(2)
:StopkyNuluj()
:StopkyStart()
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;naƒtení masek pro tvorbu figur (.msk) + naƒtení τachovnice (.brd)
txt=SouborOtev²i("*\\partie.msk",SouborP²ístup¼tení|SouborP²ístupTextov∞);
Soubor¼tiNov∞ⁿádek(txt);
for (i=0; i<=5; i++)
{
Soubor¼tiI¼íslo(txt,maska[i].body);Soubor¼tiNov∞ⁿádek(txt);
for (ii=0; ii<=maska[i].body-1; ii++)
{
Soubor¼tiI¼íslo(txt,maska[i].b[ii].x);Soubor¼tiNov∞ⁿádek(txt);
Soubor¼tiI¼íslo(txt,maska[i].b[ii].y);Soubor¼tiNov∞ⁿádek(txt);
}
Soubor¼tiI¼íslo(txt,maska[i].tri);Soubor¼tiNov∞ⁿádek(txt);
for (ii=0; ii<=maska[i].tri-1; ii++)
for (iii=0; iii<=2; iii++)
{
Soubor¼tiI¼íslo(txt,maska[i].triktere[ii][iii]);Soubor¼tiNov∞ⁿádek(txt);
}
Soubor¼tiI¼íslo(txt,maska[i].tetra);Soubor¼tiNov∞ⁿádek(txt);
for (ii=0; ii<=maska[i].tetra-1; ii++)
for (iii=0; iii<=3; iii++)
{
Soubor¼tiI¼íslo(txt,maska[i].tetraktere[ii][iii]);Soubor¼tiNov∞ⁿádek(txt);
}
}
SouborZav²i(txt);
kom=SouborOtev²i("*\\partie.kom",SouborP²ístup¼tení|SouborP²ístupBinární);
Soubor¼tiNov∞ⁿádek(kom);
for (y=0; y<=7; y++)
for (x=0; x<=7; x++) Soubor¼tiI¼íslo(kom,s[x][y]);
SouborZav²i(kom);
2 ;vykreslení τachovnice s figurami
// základní parametry
sx=320;sy=400;sz=512;
int zx=0,zy=0,zz=0; // zm╪na úhlà uºivatelem
GrNastavBarvuPop²edí(8);
GrNastavBarvuPozadí(0);GrNastavV∞plσ(0);GrSmaºOkno();
do
{
// definice bodà τachovnice
i=0;
for (y=0; y<=8; y++)
for (x=0; x<=8; x++)
{
k[i].x=(x-4)*32;
k[i].y=0;
k[i].z=(y-4)*32;
i++;
}
// definice st²edà políƒek (pomocné body pro vykreslení figurek)
for (y=0; y<=7; y++)
for (x=0; x<=7; x++)
{
k[i].x=(x-4)*32+16;
k[i].y=-16;
k[i].z=128-y*32-16;
i++;
}
// definice bodà figurek podle masek
for (y=0; y<=7; y++)
for (x=0; x<=7; x++)
if (s[x][y]!=0)
{
maskot[y*8+x].misto=i;
maskot[y*8+x].index=abs(s[x][y])-1;
zi=maskot[y*8+x].index;
if (s[x][y]<0)
maskot[y*8+x].barva=4; else maskot[y*8+x].barva=3;
for (z=0; z<=maska[zi].body-1; z++)
{
k[i].x=k[81+y*8+x].x-16+maska[zi].b[z].x;
k[i].y=k[81+y*8+x].y-16+maska[zi].b[z].y;
k[i].z=k[81+y*8+x].z-8;
i++;
k[i].x=k[81+y*8+x].x-16+maska[zi].b[z].x;
k[i].y=k[81+y*8+x].y-16+maska[zi].b[z].y;
k[i].z=k[81+y*8+x].z+8;
i++;
}
} else maskot[y*8+x].misto=-1;
celkem=i-1;
// definice poloh bodà se zapoƒítáním zm╪n uºivatele
Def(); // "prvotní" definice
for (i=0; i<=celkem; i++)
{
k[i].ux=Volno(k[i].ux+zx); // rotace v ose x
k[i].z=k[i].rx*cos(k[i].ux*Pí/180);
k[i].y=k[i].rx*sin(k[i].ux*Pí/180);
k[i].uy=Volno(k[i].uy+zy); // rotace v ose y
k[i].x=k[i].ry*cos(k[i].uy*Pí/180);
k[i].z=k[i].ry*sin(k[i].uy*Pí/180);
}
Def(); // "druhotná" definice
// vykreslení τachovnice
GrNastavBarvuPop²edí(0);
for (y=0; y<=7; y++)
for (x=0; x<=7; x++)
{
if ((x+y)%2==0) GrNastavBarvuPozadí(8); else GrNastavBarvuPozadí(7);
GrKresliVypln╪n∞Mnohoúhelník(4,
x3d(sx+k[y*9+x].x,sz+k[y*9+x].z),y3d(sy+k[y*9+x].y,sz+k[y*9+x].z),
x3d(sx+k[y*9+x+1].x,sz+k[y*9+x+1].z),y3d(sy+k[y*9+x+1].y,sz+k[y*9+x+1].z),
x3d(sx+k[(y+1)*9+x+1].x,sz+k[(y+1)*9+x+1].z),y3d(sy+k[(y+1)*9+x+1].y,sz+k[(y+1)*9+x+1].z),
x3d(sx+k[(y+1)*9+x].x,sz+k[(y+1)*9+x].z),y3d(sy+k[(y+1)*9+x].y,sz+k[(y+1)*9+x].z));
}
// ! uspo²ádání políƒek τachovnice podle vzdálenosti (bubble sort)
for (i=0; i<=63; i++)
{
bubble[i].pole=i;
bubble[i].z=k[i+81].z;
}
for (i=0; i<=63; i++)
for (ii=0; ii<=62; ii++)
if (bubble[ii].z<bubble[ii+1].z)
{
bubble[64]=bubble[ii];
bubble[ii]=bubble[ii+1];
bubble[ii+1]=bubble[64];
}
// vykreslení polygonà figurek
for (n=0; n<=63; n++)
if (maskot[bubble[n].pole].misto>-1)
{
z=maskot[bubble[n].pole].misto;
zi=maskot[bubble[n].pole].index;
for (i=0; i<=21; i++) polymat.wall[i]=0;
i=-1;
for (ii=0; ii<=maska[zi].tri-1; ii++) // naƒtení trojúhelníkà
{
i++;polymat.bodu[i]=3;
for (iii=0; iii<=2; iii++)
{
polymat.pol[i][iii].x=
x3d(sx+k[z+maska[zi].triktere[ii][iii]*2].x,
sz+k[z+maska[zi].triktere[ii][iii]*2].z);
polymat.pol[i][iii].y=
y3d(sy+k[z+maska[zi].triktere[ii][iii]*2].y,
sz+k[z+maska[zi].triktere[ii][iii]*2].z);
}
i++;polymat.bodu[i]=3;
for (iii=0; iii<=2; iii++)
{
polymat.pol[i][iii].x=
x3d(sx+k[z+maska[zi].triktere[ii][iii]*2+1].x,
sz+k[z+maska[zi].triktere[ii][iii]*2+1].z);
polymat.pol[i][iii].y=
y3d(sy+k[z+maska[zi].triktere[ii][iii]*2+1].y,
sz+k[z+maska[zi].triktere[ii][iii]*2+1].z);
}
}
for (ii=0; ii<=maska[zi].tetra-1; ii++) // naƒtení ƒty²úhelníkà
{
i++;polymat.bodu[i]=4;
for (iii=0; iii<=3; iii++)
{
polymat.pol[i][iii].x=
x3d(sx+k[z+maska[zi].tetraktere[ii][iii]*2].x,
sz+k[z+maska[zi].tetraktere[ii][iii]*2].z);
polymat.pol[i][iii].y=
y3d(sy+k[z+maska[zi].tetraktere[ii][iii]*2].y,
sz+k[z+maska[zi].tetraktere[ii][iii]*2].z);
}
i++;polymat.bodu[i]=4;
for (iii=0; iii<=3; iii++)
{
polymat.pol[i][iii].x=
x3d(sx+k[z+maska[zi].tetraktere[ii][iii]*2+1].x,
sz+k[z+maska[zi].tetraktere[ii][iii]*2+1].z);
polymat.pol[i][iii].y=
y3d(sy+k[z+maska[zi].tetraktere[ii][iii]*2+1].y,
sz+k[z+maska[zi].tetraktere[ii][iii]*2+1].z);
}
}
for (ii=0; ii<=maska[zi].body-1; ii++) // vytvo²ení "st╪n" figur
{
i++;polymat.bodu[i]=4;polymat.wall[i]=1;
if (ii==maska[zi].body-1) // první a poslední
{
polymat.pol[i][0].x=x3d(sx+k[z+ii*2].x,sz+k[z+ii*2].z);
polymat.pol[i][0].y=y3d(sy+k[z+ii*2].y,sz+k[z+ii*2].z);
polymat.pol[i][1].x=x3d(sx+k[z].x,sz+k[z].z);
polymat.pol[i][1].y=y3d(sy+k[z].y,sz+k[z].z);
polymat.pol[i][2].x=x3d(sx+k[z+1].x,sz+k[z+1].z);
polymat.pol[i][2].y=y3d(sy+k[z+1].y,sz+k[z+1].z);
polymat.pol[i][3].x=x3d(sx+k[z+ii*2+1].x,sz+k[z+ii*2+1].z);
polymat.pol[i][3].y=y3d(sy+k[z+ii*2+1].y,sz+k[z+ii*2+1].z);
} else
{
polymat.pol[i][0].x=x3d(sx+k[z+ii*2].x,sz+k[z+ii*2].z);
polymat.pol[i][0].y=y3d(sy+k[z+ii*2].y,sz+k[z+ii*2].z);
polymat.pol[i][1].x=x3d(sx+k[z+ii*2+2].x,sz+k[z+ii*2+2].z);
polymat.pol[i][1].y=y3d(sy+k[z+ii*2+2].y,sz+k[z+ii*2+2].z);
polymat.pol[i][2].x=x3d(sx+k[z+ii*2+3].x,sz+k[z+ii*2+3].z);
polymat.pol[i][2].y=y3d(sy+k[z+ii*2+3].y,sz+k[z+ii*2+3].z);
polymat.pol[i][3].x=x3d(sx+k[z+ii*2+1].x,sz+k[z+ii*2+1].z);
polymat.pol[i][3].y=y3d(sy+k[z+ii*2+1].y,sz+k[z+ii*2+1].z);
}
}
polymat.polys=i;
// vykreslení polygonà
GrNastavBarvuPop²edí(maskot[bubble[n].pole].barva);
GrNastavBarvuPozadí(maskot[bubble[n].pole].barva);
for (i=0; i<=polymat.polys; i++)
{
GrKresliVypln╪n∞Mnohoúhelník(polymat.bodu[i],
polymat.pol[i][0].x,polymat.pol[i][0].y,
polymat.pol[i][1].x,polymat.pol[i][1].y,
polymat.pol[i][2].x,polymat.pol[i][2].y,
polymat.pol[i][3].x,polymat.pol[i][3].y);
}
// zv∞razn╪ní hran
GrNastavBarvuPop²edí(0);
for (i=0; i<=polymat.polys; i++)
if (polymat.wall[i]==1)
{
for (ii=0; ii<=polymat.bodu[i]-2; ii++)
GrKresliLinku(
polymat.pol[i][ii].x,polymat.pol[i][ii].y,
polymat.pol[i][ii+1].x,polymat.pol[i][ii+1].y);
GrKresliLinku(
polymat.pol[i][3].x,polymat.pol[i][3].y,
polymat.pol[i][0].x,polymat.pol[i][0].y);
}
}
// vstup uºivatele
key=¼tiKlávesuZFrontyS¼ekáním();
switch (key)
{
case KlNahoru: zx=Volno(zx+10);break;
case KlDolà: zx=Volno(zx-10);break;
case KlDoleva: zy=Volno(zy-10);break;
case KlDoprava: zy=Volno(zy+10);break;
case '+': if (sz-20>0) sz-=10;break;
case '-': if (sz+20<1000) sz+=10;break;
case '8': if (sz-20>0) sy-=10;break;
case '2': if (sz+20<480) sy+=10;break;
case '4': if (sz-20>0) sx-=10;break;
case '6': if (sz-20<640) sx+=10;break;
}
GrNastavBarvuPozadí(0);GrSmaºOkno();
} while (key!=KlEsc);
3 ;vyhodnocení a zápis v∞stupní parametrà
Stopky(cas);StopkyStop();
SouborSmaº("*\\partie.kom");
kom=SouborOtev²i("*\\partie.kom",SouborP²ístupZápis|SouborP²ístupBinární);
SouborPiτⁿet╪zec(kom,"[ PARTIE communication file (for subprograms) ]");
SouborPiτNov∞ⁿádek(kom);
SouborPiτL¼íslo(kom,cas.Hodiny*3600+cas.Minuty*60+cas.Sekundy,5);
SouborZav²i(kom);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
//
// Konec souboru
//////////////////