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   
Text File  |  2002-09-25  |  21KB  |  613 lines

  1. SGPC   5.05 034#000001035 30.08.2002 13:01:21                                    StructNo 5   5
  2.  
  3. # include <sgpbalt.h>
  4.  
  5.   struct
  6.   {
  7.    float x,y,z,rx,ry,rz,ux,uy,uz;
  8.   } k[1000];
  9.   int i,ii,iii,sx,sy,sz,x,y,z,zi;
  10.   int key;
  11.   TypSoubor txt,kom;
  12.   typedef struct {
  13.            int x,y;
  14.           } Bod;
  15.  
  16.   struct {
  17.    Bod b[14];
  18.    int body,tri,triktere[3][3],
  19.             tetra,tetraktere[4][4];
  20.   } maska[6];
  21.  
  22.   int s[8][8];
  23.  
  24.   struct {
  25.    int misto,index,barva;
  26.   } maskot[64];
  27.  
  28.   int celkem,n;
  29.  
  30.   struct {
  31.    int polys,bodu[22];
  32.    int wall[22];
  33.    Bod pol[22][4];
  34.   } polymat;
  35.  
  36.   struct {
  37.    int pole;
  38.    float z;
  39.   } bubble[65];
  40.  
  41.   Typ¼as cas;
  42.  
  43. //////////////////////
  44. // Globální prom╪nné
  45. //
  46. // prom╪nné celoƒíselné:
  47.      int     gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,       // rozsah -32768..32767
  48.              gI¼íslo1,gI¼íslo2,gI¼íslo3,gPàvBarvy;
  49.              // gKlávesa je souƒástí knihovny Baltazara
  50. // prom╪nné reálné:
  51.      double  gD¼íslo1,gD¼íslo2,gD¼íslo3;          // rozsah 5.0E-324..1.7E308
  52. // prom╪nná znak:
  53.      char    gZnak;
  54. // prom╪nná ²et╪zec:
  55.      string  gⁿet╪zec;
  56.  
  57.  
  58. /////////////////////
  59. // Pomocné definice
  60. //
  61.  
  62. #define NE      0
  63. #define ANO     1
  64.  
  65. #define ABS(x)  ((x)>0?(x):-(x))
  66.  
  67. #define __CYKLUS(N)   __Cyklus(1,N);__Cyklus(0,N);   //Hlava cyklu
  68. #define __MPVC_ 100   //Maximální poƒet vno²en∞ch cyklà
  69.  
  70. int __Cyklus( int Nov∞, int Poƒet )
  71. //Nov∞ > 0: Otev²ení nového cyklu s N opakováními (vƒetn╪ 0)
  72. //Nov∞ = 0: Dalτí pràchod cyklem
  73. //Nov∞ < 0: P²edƒasné ukonƒení cyklu
  74. { static int I[__MPVC_];
  75.   static int i = -1;
  76.   if( Nov∞ > 0 )
  77.   { if( ++i >= __MPVC_)
  78.     { TxtPiτⁿet╪zec("P²íliτ mnoho vno²en∞ch cyklà");
  79.       while(1) {Tón(1000);};
  80.     }else I[i]=Poƒet;
  81.   }else if( Nov∞ == 0 )
  82.   { if(--I[i]<0){ i--; return(0);}
  83.                   else return(1);
  84.   }else return(-(i--));  //Vrací zápornou aktuální hloubku vno²ení
  85. }  //Cyklus
  86.  
  87. void ¼ekejNaReakci(void)
  88. //¼eká na sitsk klávesy nebo tlaƒítka myτi
  89. { VyprázdniFrontuKláves();
  90.   MyτVyprázdniFrontuUdálostí();
  91.   ¼ekej(NaKlávesu|NaMyτ);
  92.   VyprázdniFrontuKláves();
  93.   MyτVyprázdniFrontuUdálostí();
  94. } //¼ekejNaReakci
  95.  
  96. long ¥¼ti¼íslo ( char* Text )
  97. { long Vrátit = 0;
  98.   GrNastavPozici(272, 0);
  99.   Gr¼tiL¼íslo(Text,Vrátit,8,1,0xe);
  100.   GrNastavPozici(272, 0);
  101.   GrPiτⁿet╪zec( "               " );
  102.   return Vrátit;
  103. } //¥¼ti¼íslo
  104.  
  105. long BaltEmuluj( char* Text )
  106. { long       Vrátit = 0;
  107.   int        Klávesa;
  108.   int        Konec = 0;
  109.   TypP²edm╪t P²edm╪t=1;
  110.   VyprázdniFrontuKláves();
  111.   GrNastavBarvy( 0x7 );  GrSmaºOkno();
  112.   GrPiτⁿet╪zec( Text );
  113.   Tón(1000); ¼ekej(10); VypniTón();
  114.   while (!Konec)
  115.   { int p;
  116.     GrNastavPozici(0, GrV∞τkaZnaku);
  117.     GrPiτⁿet╪zec( "ⁿá: "); GrPiτL¼íslo( PoziceBaltazaraY(), 2 );
  118.     GrPiτⁿet╪zec( ",  Sl: " ); GrPiτL¼íslo( PoziceBaltazaraX(), 2 );
  119.     GrPiτⁿet╪zec( ",  Sm: " );
  120.     int s=Sm╪rBaltazara();
  121.     GrPiτⁿet╪zec( s==V∞chod ? "V∞chod" :
  122.                   s==Jih    ? "Jih   " :
  123.                   s==Západ  ? "Západ " :
  124.                               "Sever " );
  125.     GrPiτⁿet╪zec( ",  Ba: " ); NastavBarvu¼arování( p=NastavBarvu¼arování(0));
  126.                               GrPiτL¼íslo( p, 2 );
  127.     GrPiτⁿet╪zec( ",  Ry: " ); RychlostBaltazara(p = RychlostBaltazara(0));
  128.                               GrPiτL¼íslo( p, 2 );
  129.     switch ¼tiKlávesuZFrontyS¼ekáním()
  130.     { case KlDoleva:   VlevoVbok(); break;
  131.       case KlDoprava:  VpravoVbok(); break;
  132.       case KlNahoru:   Popojdi(1); break;
  133.       case KlDolà:     ¼aruj(Baltedit()); break;
  134.       case KlIns:      Vrátit = ¥¼ti¼íslo( "¼íslo: " ); break;
  135.       case 'B':
  136.       case 'b':        NastavBarvu¼arování( ¥¼ti¼íslo("Barva: ") ); break;
  137.       case 'C':
  138.       case 'c':        ¼aruj(¼tverec); break;
  139.       case 'R':
  140.       case 'r':        RychlostBaltazara( ¥¼ti¼íslo("Rychlost: ") ); break;
  141.       case KlEnter:    Konec = 1; break;
  142.     } //switch
  143.   } //while
  144.   GrNastavBarvy( 0x77 ); GrSmaºOkno();
  145.   return Vrátit;
  146. } //BaltEmuluj
  147.  
  148.  
  149. ///////////////////
  150. // Globální makra
  151. //
  152. -o1-Globals ----------------------------------------------------------------
  153. 0 ;prom╪nné
  154.   ;globální prom╪nné (jsou definovány v globálních definicích  Ctrl+G):
  155.     ;prom╪nné celoƒíselné: gA,gB,gC,gD,gE,gF,gG,gH,gI,gJ,gKlávesa;
  156.        ;dalτí p²eddefinované globální prom╪nné mají vºdy p²edponu g..
  157.        ;a jejich názvy jsou shodné s lokálními prom╪nn∞mi definovan∞mi níºe,
  158.        ;nap². gD¼íslo1, gⁿet╪zec atd.
  159.   ;lokální prom╪nné:
  160.     ;prom╪nné celoƒíselné:
  161.        int     a,b,c,d,e,f,g,h,i,j,Klávesa,      //rozsah -32768..32767
  162.                I¼íslo1,I¼íslo2,I¼íslo3,PàvBarvy;
  163.     ;prom╪nné reálné:
  164.        double  D¼íslo1,D¼íslo2,D¼íslo3;          //rozsah 5.0E-324..1.7E308
  165.     ;prom╪nná znak:
  166.        char    Znak;
  167.     ;prom╪nná ²et╪zec:
  168.        string  ⁿet╪zec;
  169. [ ;vytvo² Baltazaràv grafick∞ prostor
  170.    Vytvo²Prostor(); MyτZaƒátekObsluhy();
  171. ] ;zruτ Baltazaràv grafick∞ prostor
  172.    MyτKonecObsluhy(); ZruτProstor();
  173. a Klávesa= ¼tiKlávesuZFronty();
  174. b P²epniNaBaltazara();
  175. c ¼aruj(¼tverec);
  176. d Gr¼tiZnak("?",Znak,1,0x07);            /*      edit ano, ƒerná/sv.τedá*/
  177. ╨ return BaltEmuluj("Hodnota?");
  178. e BezObláƒku();
  179. f VyprázdniFrontuKláves();
  180. g Gr¼tiSⁿet╪zec("?",ⁿet╪zec,40,1,0x3f);  /*40zn, edit ano, modrá/bílá   */
  181. h Gr¼tiI¼íslo("?",I¼íslo1,6,0,0x0e);     /* 6zn, edit  ne, ƒerná/ºlutá  */
  182. i Gr¼tiD¼íslo("?",D¼íslo1,20,1,0x0f);    /*20zn, edit  ne, ƒerná/bílá   */
  183. j GrPiτZnak(Znak);
  184. k Klávesa= ¼tiKlávesuZFrontyS¼ekáním();
  185. l VlevoVbok();
  186. ê BaltEmuluj("STOP");
  187. m ;vypiτ ⁿet╪zec do grafického okénka
  188.    PàvBarvy=GrNastavBarvy(Modrá<<4|ªlutá); /*ºlutá na modré             */
  189.    GrPiτⁿet╪zec(ⁿet╪zec);                /*vypíτe obsah prom╪nné ⁿet╪zec*/
  190.    GrNastavBarvy(PàvBarvy);              /*nastaví pàvodní barvy        */
  191. n Neviditeln∞();
  192. o SObláƒkem();
  193. p Popojdi(1);
  194. q GrPiτL¼íslo(I¼íslo1,-1);               /* -1 = nejkratτí v∞pis        */
  195. r VpravoVbok();
  196. t P²epniNaText();
  197. u GrPiτD¼íslo(D¼íslo1,10,2);             /*10 ƒíslic, z toho 2 desetinné*/
  198. v Viditeln∞();
  199. w ;ƒekej na stisk klávesy nebo tlaƒítka myτi
  200.   ¼ekejNaReakci();
  201. x Skryj();
  202. y Odhal();
  203. z ;ƒelem vzad
  204.    VlevoVbok(); VlevoVbok();
  205. B NastavBarvu¼arování   /*       B:(barva)!   0-15                    */
  206. C ¼aruj                 /*     C:(p²edm╪t)!   1-150                   */
  207. ╤ return BaltEmuluj     /*     ╤:("Volno")!   "Test"                  */
  208. L NaƒtiScénu            /*    L:("soubor")!   "c:\\pavel\\soubor.s00" */
  209. ¥ BaltEmuluj            /*      ¥:("Text")!   "Test"                  */
  210. N Náhodn╪¼aruj          /*     N:(p²edm╪t)!   1-150                   */
  211. P Popojdi               /*  P:(poƒet_polí)!   0-14                    */
  212. R RychlostBaltazara     /*    R:(rychlost)!   0-9                     */
  213. S UloºScénu             /*    S:("soubor")!   "c:\\pavel\\soubor.s00" */
  214. W ¼ekej                 /*  W:(milisekund)!   0-32000                 */
  215. X ¼arujNaPozici         /* X:(p²edm╪t,x,y)!   1-150, 1-15, 1-10       */
  216. -c1-Globals ---- (? lze pouºít jako náhrada pouze pro /,*,+) -----------------
  217. ?n PràchodnostP²edm╪tuP²edB() Je 0
  218. ?p PràchodnostP²edm╪tuP²edB() Je 1
  219. ?B Barva¼tverceP²edB()  /* Je, Není, <, >, <= ,>= */
  220. ?P P²edm╪tP²edB()       /* Je, Není, <, >, <= ,>= */
  221. ?S Sm╪rBaltazara()      /* Je, Není, <, >, <= ,>= */
  222. \b Barva¼tverceP²edB()??
  223. \p P²edm╪tP²edB()??
  224. \s Sm╪rBaltazara()??
  225. \C case
  226. #C ; n-krát                                     #C:(5)         5₧ 
  227.     __CYKLUS
  228. #A ;opakuj vzestupn╪ pro prom╪nnou od,do,krok   #A:(i,2,10,2)  i=2,4..10
  229.     OdDoKrok
  230. #D ;opakuj sestupn╪  pro prom╪nnou od,do,krok   #D:(i,10,2,2)  i=10,8..2
  231.     OdDolàDoKrok
  232. #M ;opakuj n-krát sestupn╪  pro prom╪nnou       #M:(i,8)  (8x) i=7,6..0
  233.     DolàDo0
  234. #N ;opakuj n-krát vzestupn╪ pro prom╪nnou       #N:(i,8)  (8x) i=0,1..7
  235.     Od0
  236. ===Globals ------------------------------------------------------------------
  237. /*-hf(*/
  238. /*-hf-*/
  239. int x3d(float x,z)
  240. /*-hf-*/;
  241. int y3d(float y,z)
  242. /*-hf-*/;
  243. float Θhel(float x,y)
  244. /*-hf-*/;
  245. float Volno(float u)
  246. /*-hf-*/;
  247. void Def( void )
  248. /*-hf-*/;
  249. void main( void )  // ░░▒▒▓▓██ PARTIE V1.00 3D MODUL  (public domain) ██▓▓▒▒░░
  250. /*-hf)*/;
  251. ;-h---------------------------------------------------------------------------
  252. int x3d(float x,z)
  253. -s--x3d                                                                         ■   4  -2 -30   3
  254. x3d
  255. 1!
  256. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  257. 1 ;body
  258.   return(integer(320-512*(320-x)/z));
  259. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  260. =SP---------------------------------------------------------------------------
  261.  
  262. ;-h---------------------------------------------------------------------------
  263. int y3d(float y,z)
  264. -s--y3d                                                                         ■   4  -2 -30   3
  265. y3d
  266. 1!
  267. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  268. 1 ;body
  269.   return(integer(240-512*(240-y)/z));
  270. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  271. =SP---------------------------------------------------------------------------
  272.  
  273. ;-h---------------------------------------------------------------------------
  274. float Θhel(float x,y)
  275. -s--Θhel                                                                        ■   4  -2 -29   3
  276. Θhel
  277. 1!
  278. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  279. 1 ;body
  280.   if ((x==0) && (x==y)) return(0); else
  281.   {
  282.    if (x==0)
  283.     if (y<0) return(270); else return(90);
  284.    if (y==0)
  285.     if (x<0) return(180); else return(0);
  286.    if ((x!=0) && (y!=0))
  287.    {
  288.     if (x<0)
  289.      if (y<0) return(180+atan(y/x)*180/Pí); else
  290.               return(90+atan(abs(x/y))*180/Pí);
  291.     if (x>0)
  292.      if (y<0) return(270+atan(abs(x/y))*180/Pí); else
  293.               return(atan(y/x)*180/Pí);
  294.    }
  295.   }
  296. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  297. =SP---------------------------------------------------------------------------
  298.  
  299. ;-h---------------------------------------------------------------------------
  300. float Volno(float u)
  301. -s--Volno                                                                       ■   4  -2 -29   3
  302. Volno
  303.  1!
  304. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  305. 1 ;body
  306.   if (u>360) return(u-360); else
  307.   if (u<0) return(360+u); else return(u);
  308. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  309. =SP---------------------------------------------------------------------------
  310.  
  311. ;-h---------------------------------------------------------------------------
  312. void Def( void )
  313. -s--Def                                                                         ■   4  -2 -30   3
  314. Def
  315. 1!
  316. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  317. 1 ;t╪lo
  318.   for (i=0; i<=celkem; i++)
  319.   {
  320.    k[i].rx=sqrt(sqr(k[i].y)+sqr(k[i].z));
  321.    k[i].ry=sqrt(sqr(k[i].x)+sqr(k[i].z));
  322.    k[i].rz=sqrt(sqr(k[i].x)+sqr(k[i].y));
  323.    k[i].ux=Θhel(k[i].z,k[i].y);
  324.    k[i].uy=Θhel(k[i].x,k[i].z);
  325.    k[i].uz=Θhel(k[i].x,k[i].y);
  326.   }
  327. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  328. =SP---------------------------------------------------------------------------
  329.  
  330. ;-h---------------------------------------------------------------------------
  331. void main( void )  // ░░▒▒▓▓██ PARTIE V1.00 3D MODUL  (public domain) ██▓▓▒▒░░
  332. -s--Partie3D                                                                    ■  13  -2 -19   3
  333.         ____________Partie3D___
  334.      Zaƒátek     Prost²edek Konec
  335.     :EscPlus()      2!       3!
  336.  :GrNastavMód(2)
  337. :GrNastavV∞stup(2)
  338.   :StopkyNuluj()
  339.   :StopkyStart()
  340.        1!
  341. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  342. 1 ;naƒtení masek pro tvorbu figur (.msk) + naƒtení τachovnice (.brd)
  343.   txt=SouborOtev²i("*\\partie.msk",SouborP²ístup¼tení|SouborP²ístupTextov∞);
  344.   Soubor¼tiNov∞ⁿádek(txt);
  345.   for (i=0; i<=5; i++)
  346.   {
  347.    Soubor¼tiI¼íslo(txt,maska[i].body);Soubor¼tiNov∞ⁿádek(txt);
  348.    for (ii=0; ii<=maska[i].body-1; ii++)
  349.    {
  350.     Soubor¼tiI¼íslo(txt,maska[i].b[ii].x);Soubor¼tiNov∞ⁿádek(txt);
  351.     Soubor¼tiI¼íslo(txt,maska[i].b[ii].y);Soubor¼tiNov∞ⁿádek(txt);
  352.    }
  353.    Soubor¼tiI¼íslo(txt,maska[i].tri);Soubor¼tiNov∞ⁿádek(txt);
  354.    for (ii=0; ii<=maska[i].tri-1; ii++)
  355.     for (iii=0; iii<=2; iii++)
  356.     {
  357.      Soubor¼tiI¼íslo(txt,maska[i].triktere[ii][iii]);Soubor¼tiNov∞ⁿádek(txt);
  358.     }
  359.    Soubor¼tiI¼íslo(txt,maska[i].tetra);Soubor¼tiNov∞ⁿádek(txt);
  360.    for (ii=0; ii<=maska[i].tetra-1; ii++)
  361.     for (iii=0; iii<=3; iii++)
  362.     {
  363.      Soubor¼tiI¼íslo(txt,maska[i].tetraktere[ii][iii]);Soubor¼tiNov∞ⁿádek(txt);
  364.     }
  365.   }
  366.   SouborZav²i(txt);
  367.   kom=SouborOtev²i("*\\partie.kom",SouborP²ístup¼tení|SouborP²ístupBinární);
  368.   Soubor¼tiNov∞ⁿádek(kom);
  369.   for (y=0; y<=7; y++)
  370.    for (x=0; x<=7; x++) Soubor¼tiI¼íslo(kom,s[x][y]);
  371.   SouborZav²i(kom);
  372. 2 ;vykreslení τachovnice s figurami
  373.  
  374.   // základní parametry
  375.   sx=320;sy=400;sz=512;
  376.   int zx=0,zy=0,zz=0;  // zm╪na úhlà uºivatelem
  377.   GrNastavBarvuPop²edí(8);
  378.   GrNastavBarvuPozadí(0);GrNastavV∞plσ(0);GrSmaºOkno();
  379.  
  380.   do
  381.   {
  382.  
  383.    // definice bodà τachovnice
  384.    i=0;
  385.    for (y=0; y<=8; y++)
  386.     for (x=0; x<=8; x++)
  387.     {
  388.      k[i].x=(x-4)*32;
  389.      k[i].y=0;
  390.      k[i].z=(y-4)*32;
  391.      i++;
  392.     }
  393.  
  394.    // definice st²edà políƒek (pomocné body pro vykreslení figurek)
  395.    for (y=0; y<=7; y++)
  396.     for (x=0; x<=7; x++)
  397.     {
  398.      k[i].x=(x-4)*32+16;
  399.      k[i].y=-16;
  400.      k[i].z=128-y*32-16;
  401.      i++;
  402.     }
  403.  
  404.    // definice bodà figurek podle masek
  405.    for (y=0; y<=7; y++)
  406.     for (x=0; x<=7; x++)
  407.      if (s[x][y]!=0)
  408.      {
  409.       maskot[y*8+x].misto=i;
  410.       maskot[y*8+x].index=abs(s[x][y])-1;
  411.       zi=maskot[y*8+x].index;
  412.       if (s[x][y]<0)
  413.        maskot[y*8+x].barva=4; else maskot[y*8+x].barva=3;
  414.       for (z=0; z<=maska[zi].body-1; z++)
  415.       {
  416.        k[i].x=k[81+y*8+x].x-16+maska[zi].b[z].x;
  417.        k[i].y=k[81+y*8+x].y-16+maska[zi].b[z].y;
  418.        k[i].z=k[81+y*8+x].z-8;
  419.        i++;
  420.        k[i].x=k[81+y*8+x].x-16+maska[zi].b[z].x;
  421.        k[i].y=k[81+y*8+x].y-16+maska[zi].b[z].y;
  422.        k[i].z=k[81+y*8+x].z+8;
  423.        i++;
  424.       }
  425.      } else maskot[y*8+x].misto=-1;
  426.  
  427.    celkem=i-1;
  428.  
  429.    // definice poloh bodà se zapoƒítáním zm╪n uºivatele
  430.  
  431.    Def();  // "prvotní" definice
  432.  
  433.    for (i=0; i<=celkem; i++)
  434.    {
  435.     k[i].ux=Volno(k[i].ux+zx);  // rotace v ose x
  436.     k[i].z=k[i].rx*cos(k[i].ux*Pí/180);
  437.     k[i].y=k[i].rx*sin(k[i].ux*Pí/180);
  438.     k[i].uy=Volno(k[i].uy+zy);  // rotace v ose y
  439.     k[i].x=k[i].ry*cos(k[i].uy*Pí/180);
  440.     k[i].z=k[i].ry*sin(k[i].uy*Pí/180);
  441.    }
  442.  
  443.    Def();  // "druhotná" definice
  444.  
  445.   // vykreslení τachovnice
  446.   GrNastavBarvuPop²edí(0);
  447.   for (y=0; y<=7; y++)
  448.    for (x=0; x<=7; x++)
  449.    {
  450.     if ((x+y)%2==0) GrNastavBarvuPozadí(8); else GrNastavBarvuPozadí(7);
  451.     GrKresliVypln╪n∞Mnohoúhelník(4,
  452.      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),
  453.      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),
  454.      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),
  455.      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));
  456.    }
  457.  
  458.    // ! uspo²ádání políƒek τachovnice podle vzdálenosti (bubble sort)
  459.    for (i=0; i<=63; i++)
  460.    {
  461.     bubble[i].pole=i;
  462.     bubble[i].z=k[i+81].z;
  463.    }
  464.    for (i=0; i<=63; i++)
  465.     for (ii=0; ii<=62; ii++)
  466.      if (bubble[ii].z<bubble[ii+1].z)
  467.      {
  468.       bubble[64]=bubble[ii];
  469.       bubble[ii]=bubble[ii+1];
  470.       bubble[ii+1]=bubble[64];
  471.      }
  472.  
  473.    // vykreslení polygonà figurek
  474.    for (n=0; n<=63; n++)
  475.     if (maskot[bubble[n].pole].misto>-1)
  476.     {
  477.      z=maskot[bubble[n].pole].misto;
  478.      zi=maskot[bubble[n].pole].index;
  479.      for (i=0; i<=21; i++) polymat.wall[i]=0;
  480.      i=-1;
  481.      for (ii=0; ii<=maska[zi].tri-1; ii++)  // naƒtení trojúhelníkà
  482.      {
  483.       i++;polymat.bodu[i]=3;
  484.       for (iii=0; iii<=2; iii++)
  485.       {
  486.        polymat.pol[i][iii].x=
  487.         x3d(sx+k[z+maska[zi].triktere[ii][iii]*2].x,
  488.             sz+k[z+maska[zi].triktere[ii][iii]*2].z);
  489.        polymat.pol[i][iii].y=
  490.         y3d(sy+k[z+maska[zi].triktere[ii][iii]*2].y,
  491.             sz+k[z+maska[zi].triktere[ii][iii]*2].z);
  492.       }
  493.       i++;polymat.bodu[i]=3;
  494.       for (iii=0; iii<=2; iii++)
  495.       {
  496.        polymat.pol[i][iii].x=
  497.         x3d(sx+k[z+maska[zi].triktere[ii][iii]*2+1].x,
  498.             sz+k[z+maska[zi].triktere[ii][iii]*2+1].z);
  499.        polymat.pol[i][iii].y=
  500.         y3d(sy+k[z+maska[zi].triktere[ii][iii]*2+1].y,
  501.             sz+k[z+maska[zi].triktere[ii][iii]*2+1].z);
  502.       }
  503.      }
  504.      for (ii=0; ii<=maska[zi].tetra-1; ii++)  // naƒtení ƒty²úhelníkà
  505.      {
  506.       i++;polymat.bodu[i]=4;
  507.       for (iii=0; iii<=3; iii++)
  508.       {
  509.        polymat.pol[i][iii].x=
  510.         x3d(sx+k[z+maska[zi].tetraktere[ii][iii]*2].x,
  511.             sz+k[z+maska[zi].tetraktere[ii][iii]*2].z);
  512.        polymat.pol[i][iii].y=
  513.         y3d(sy+k[z+maska[zi].tetraktere[ii][iii]*2].y,
  514.             sz+k[z+maska[zi].tetraktere[ii][iii]*2].z);
  515.       }
  516.       i++;polymat.bodu[i]=4;
  517.       for (iii=0; iii<=3; iii++)
  518.       {
  519.        polymat.pol[i][iii].x=
  520.         x3d(sx+k[z+maska[zi].tetraktere[ii][iii]*2+1].x,
  521.             sz+k[z+maska[zi].tetraktere[ii][iii]*2+1].z);
  522.        polymat.pol[i][iii].y=
  523.         y3d(sy+k[z+maska[zi].tetraktere[ii][iii]*2+1].y,
  524.             sz+k[z+maska[zi].tetraktere[ii][iii]*2+1].z);
  525.       }
  526.      }
  527.      for (ii=0; ii<=maska[zi].body-1; ii++)  // vytvo²ení "st╪n" figur
  528.      {
  529.       i++;polymat.bodu[i]=4;polymat.wall[i]=1;
  530.       if (ii==maska[zi].body-1)  // první a poslední
  531.       {
  532.        polymat.pol[i][0].x=x3d(sx+k[z+ii*2].x,sz+k[z+ii*2].z);
  533.        polymat.pol[i][0].y=y3d(sy+k[z+ii*2].y,sz+k[z+ii*2].z);
  534.        polymat.pol[i][1].x=x3d(sx+k[z].x,sz+k[z].z);
  535.        polymat.pol[i][1].y=y3d(sy+k[z].y,sz+k[z].z);
  536.        polymat.pol[i][2].x=x3d(sx+k[z+1].x,sz+k[z+1].z);
  537.        polymat.pol[i][2].y=y3d(sy+k[z+1].y,sz+k[z+1].z);
  538.        polymat.pol[i][3].x=x3d(sx+k[z+ii*2+1].x,sz+k[z+ii*2+1].z);
  539.        polymat.pol[i][3].y=y3d(sy+k[z+ii*2+1].y,sz+k[z+ii*2+1].z);
  540.       } else
  541.       {
  542.        polymat.pol[i][0].x=x3d(sx+k[z+ii*2].x,sz+k[z+ii*2].z);
  543.        polymat.pol[i][0].y=y3d(sy+k[z+ii*2].y,sz+k[z+ii*2].z);
  544.        polymat.pol[i][1].x=x3d(sx+k[z+ii*2+2].x,sz+k[z+ii*2+2].z);
  545.        polymat.pol[i][1].y=y3d(sy+k[z+ii*2+2].y,sz+k[z+ii*2+2].z);
  546.        polymat.pol[i][2].x=x3d(sx+k[z+ii*2+3].x,sz+k[z+ii*2+3].z);
  547.        polymat.pol[i][2].y=y3d(sy+k[z+ii*2+3].y,sz+k[z+ii*2+3].z);
  548.        polymat.pol[i][3].x=x3d(sx+k[z+ii*2+1].x,sz+k[z+ii*2+1].z);
  549.        polymat.pol[i][3].y=y3d(sy+k[z+ii*2+1].y,sz+k[z+ii*2+1].z);
  550.       }
  551.      }
  552.      polymat.polys=i;
  553.      // vykreslení polygonà
  554.      GrNastavBarvuPop²edí(maskot[bubble[n].pole].barva);
  555.      GrNastavBarvuPozadí(maskot[bubble[n].pole].barva);
  556.      for (i=0; i<=polymat.polys; i++)
  557.      {
  558.       GrKresliVypln╪n∞Mnohoúhelník(polymat.bodu[i],
  559.        polymat.pol[i][0].x,polymat.pol[i][0].y,
  560.        polymat.pol[i][1].x,polymat.pol[i][1].y,
  561.        polymat.pol[i][2].x,polymat.pol[i][2].y,
  562.        polymat.pol[i][3].x,polymat.pol[i][3].y);
  563.      }
  564.      // zv∞razn╪ní hran
  565.      GrNastavBarvuPop²edí(0);
  566.      for (i=0; i<=polymat.polys; i++)
  567.       if (polymat.wall[i]==1)
  568.       {
  569.        for (ii=0; ii<=polymat.bodu[i]-2; ii++)
  570.         GrKresliLinku(
  571.          polymat.pol[i][ii].x,polymat.pol[i][ii].y,
  572.          polymat.pol[i][ii+1].x,polymat.pol[i][ii+1].y);
  573.        GrKresliLinku(
  574.         polymat.pol[i][3].x,polymat.pol[i][3].y,
  575.         polymat.pol[i][0].x,polymat.pol[i][0].y);
  576.       }
  577.     }
  578.  
  579.    // vstup uºivatele
  580.  
  581.    key=¼tiKlávesuZFrontyS¼ekáním();
  582.  
  583.    switch (key)
  584.    {
  585.     case KlNahoru: zx=Volno(zx+10);break;
  586.     case KlDolà: zx=Volno(zx-10);break;
  587.     case KlDoleva: zy=Volno(zy-10);break;
  588.     case KlDoprava: zy=Volno(zy+10);break;
  589.     case '+': if (sz-20>0) sz-=10;break;
  590.     case '-': if (sz+20<1000) sz+=10;break;
  591.     case '8': if (sz-20>0) sy-=10;break;
  592.     case '2': if (sz+20<480) sy+=10;break;
  593.     case '4': if (sz-20>0) sx-=10;break;
  594.     case '6': if (sz-20<640) sx+=10;break;
  595.    }
  596.  
  597.    GrNastavBarvuPozadí(0);GrSmaºOkno();
  598.   } while (key!=KlEsc);
  599. 3 ;vyhodnocení a zápis v∞stupní parametrà
  600.   Stopky(cas);StopkyStop();
  601.   SouborSmaº("*\\partie.kom");
  602.   kom=SouborOtev²i("*\\partie.kom",SouborP²ístupZápis|SouborP²ístupBinární);
  603.   SouborPiτⁿet╪zec(kom,"[ PARTIE communication file (for subprograms) ]");
  604.   SouborPiτNov∞ⁿádek(kom);
  605.   SouborPiτL¼íslo(kom,cas.Hodiny*3600+cas.Minuty*60+cas.Sekundy,5);
  606.   SouborZav²i(kom);
  607. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  608. =SP---------------------------------------------------------------------------
  609.  
  610. //
  611. // Konec souboru
  612. //////////////////
  613.