home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 July / Chip_1998-07_cd.bin / tema / sgp / vyber / bublina / BUBLINA.SGP < prev    next >
Text File  |  1998-02-23  |  29KB  |  778 lines

  1. SGPC   5.00 S#0000000000 24.10.1997 19:50:47                                    StructNo 7   7
  2. ; 23.2.98 - úpravy pro verzi 5.01
  3. ;         - zm╪na názvu souboru LOGO.BMP na strJménoProgramu+"1.BMP"
  4.  
  5. # include <sgpbalt.h>
  6.  
  7. // Globální konstanty
  8. #define staNeníDefinovánKonec       -5
  9. #define staNeníDefinovánStart       -4
  10. #define staNedostatekPam╪ti         -3
  11. #define staGrafick∞MódNebylNastaven -2
  12. #define staGrafickáKartaNeníVGA     -1
  13. #define staKonecHry                 0
  14. #define staOK                       1
  15. #define staKonecBubliny             2
  16. #define staKonecΘrovn╪              3
  17. #define staHraDokonƒena             4
  18. #define staKonecProgramu            5
  19.  
  20. #define strJménoProgramu      "Bublina"
  21. #define strCopyright          " 1.0  Copyright (c) 1997 SGP Systems, s.r.o."
  22.  
  23. #define objVoda               1
  24. #define objStart              15
  25. #define objSt╪na              16
  26. #define objKonec              30
  27. #define objKurzor             31
  28. #define objBublina            47
  29. #define objAnimBublina        48
  30. #define objM²íº               50
  31. #define obj¼íslo0             51
  32. #define objNápisKonec         61
  33. #define objGratulace          68
  34. #define objPozadí¼ísel        74
  35. #define objNázev              76
  36.  
  37. #define ¼ísloΘvodníΘrovn╪     0
  38. #define ¼ísloPosledníΘrovn╪   5
  39.  
  40. #define ΘvodníPoƒetBublin     3
  41. #define MaxPoƒetBublin        5
  42.  
  43. #define XPozadí               2
  44. #define YPozadí               9
  45. #define XPlochy               (XPozadí+26)
  46. #define YPlochy               (YPozadí+87)
  47. #define XNázvu                ((640-5*Grµí²kaPolíƒka)/2)
  48. #define YNázvu                38
  49. #define XBubliny              XPlochy
  50. #define YBubliny              (YPlochy+11*GrV∞τkaPolíƒka)
  51. #define X¼íslaΘrovn╪          288
  52. #define Y¼íslaΘrovn╪          YBubliny
  53. #define XKonecHry             209
  54. #define YKonecHry             225
  55. #define XGratulace            216
  56. #define YGratulace            170
  57.  
  58. #define pozVτe                0
  59. #define pozNahoru             1
  60. #define pozDolà               2
  61.  
  62. // Globální typy
  63. typedef struct {
  64.   double X, Y, XTah, YTah;
  65.   TypAnimP²edm╪t Anim;
  66. } TBublina;
  67.  
  68. typedef struct {
  69.   int X, Y, Sm╪r, Pressed;
  70.   TypAnimP²edm╪t Anim;
  71. } TKurzor;
  72.  
  73. // Globální prom╪nné
  74. int Stav, MyτP²ítomna=0, PoƒetBublin, ¼ísloΘrovn╪,
  75.   XStartuΘrovn╪, YStartuΘrovn╪, XKonceΘrovn╪, YKonceΘrovn╪;
  76. TBublina Bublina;
  77. Typ¼as ¼as, P²edeτl∞¼as;
  78. TKurzor Kurzor;
  79. TypAnimP²edm╪t M²íº;
  80.  
  81. // Globální makra
  82. -o1-Globals
  83. -c1-Globals
  84. ===Globals
  85. /*-hf(*/
  86. /*-hf-*/
  87. int UrƒiSm╪r( void )
  88. /*-hf-*/;
  89. void AnimObjekty( void )
  90. /*-hf-*/;
  91. void Hra( void )
  92. /*-hf-*/;
  93. void NaberPaletu( char *Palette )
  94. /*-hf-*/;
  95. void NaƒtiPaletuZBMP( string Path, char *Palette )
  96. /*-hf-*/;
  97. void NastavPaletuNa( char *Palette )
  98. /*-hf-*/;
  99. void P²em╪σPaletuNa( char *Palette, int NumOfSteps )
  100. /*-hf-*/;
  101. void TitulníObrázky( void )
  102. /*-hf-*/;
  103. void UdálostKlávesnice( void )
  104. /*-hf-*/;
  105. void UdálostMyτi( void )
  106. /*-hf-*/;
  107. void UkonƒiBublinu( void )
  108. /*-hf-*/;
  109. void UkonƒiKurzor( void )
  110. /*-hf-*/;
  111. void UkonƒiProgram( void )
  112. /*-hf-*/;
  113. void UkaºKurzor( void )
  114. /*-hf-*/;
  115. void VykresliObrázekBMP( string Path )
  116. /*-hf-*/;
  117. void VykresliPozadí( char Kde )
  118. /*-hf-*/;
  119. void VykresliΘroveσ( void )
  120. /*-hf-*/;
  121. void Vytvo²Bublinu( void )
  122. /*-hf-*/;
  123. void Vytvo²Kurzor( void )
  124. /*-hf-*/;
  125. void ZaƒniProgram( void )
  126. /*-hf-*/;
  127. void main( void )
  128. /*-hf)*/;
  129. ;-h---------------------------------------------------------------------------
  130. int UrƒiSm╪r( void )
  131. -s--UrƒiSm╪r                                                                    ■   4  -2 -33 259
  132. UrƒiSm╪r
  133.   1!2
  134. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  135. 1 ;vy²eτ sm╪r
  136.    int Result;
  137.    double X=abs(Bublina.X-gMyτUdálost.X);
  138.    double Y=abs(Bublina.Y-gMyτUdálost.Y);
  139.    if ((X==0) && (Y==0)) { X=1; Y=1; }
  140.    double Piece=10/(X+Y);
  141.    X=Piece*X;
  142.    Y=Piece*Y;
  143.    if (abs(X-Y)>5) {
  144.      if (X>Y) {
  145.        if (Bublina.X<gMyτUdálost.X) Result=6; else Result=2;
  146.      } else {
  147.        if (Bublina.Y<gMyτUdálost.Y) Result=0; else Result=4;
  148.      }
  149.    } else {
  150.      if (Bublina.X<gMyτUdálost.X) {
  151.        if (Bublina.Y<gMyτUdálost.Y) Result=7; else Result=5;
  152.      } else {
  153.        if (Bublina.Y<gMyτUdálost.Y) Result=1; else Result=3;
  154.      }
  155.    }
  156. 2 return Result;
  157. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  158. =SP---------------------------------------------------------------------------
  159.  
  160. ;-h---------------------------------------------------------------------------
  161. void AnimObjekty( void )
  162. -s--AnimObjekty                                                                 ■  18  -2  -9   3
  163.          ___________AnimObjekty___________
  164.      _Bublina__      Kurzor     ___Kolize~bubliny__
  165.    Pohyb   Vykresli   6!     Kurzor?   St╪ny?   M²íº?
  166.     3!       2!                 /2       /3       /4
  167. Nastal~ƒas?                    Ano      Ano      Ano
  168.      /1                        5!       5!       7!
  169.     Ano
  170.     1!4
  171. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  172. 1 ;nastav pozici a tah
  173.    Bublina.X+=Bublina.XTah;
  174.    Bublina.Y+=Bublina.YTah;
  175.    if (UrƒiSm╪r()!=Kurzor.Sm╪r) Change=1;
  176.    Bublina.XTah=Bublina.XTah/1.1;
  177.    if ((Bublina.YTah<0) || (Bublina.YTah>1)) Bublina.YTah=Bublina.YTah/1.1;
  178.    if (Bublina.YTah<0.99) Bublina.YTah+=0.01;
  179. 2 AnimP²edm╪tAnimuj(Bublina.Anim,Bublina.X-19,Bublina.Y-14,-1);
  180. 3 Systémov∞¼as(¼as); int Change=0;
  181. 4 P²edeτl∞¼as.Setiny=¼as.Setiny;
  182. 5 Stav=staKonecBubliny;
  183. 6 ;nastav kurzor
  184.    if ((gMyτUdálost.Typ==MyτUdálostLevéTlDolà) && (Kurzor.Pressed==0)) {
  185.      Kurzor.Pressed=1;
  186.      Change=1;
  187.    }
  188.    if ((gMyτUdálost.Typ==MyτUdálostLevéTlNahoru) && (Kurzor.Pressed==1)) {
  189.      Kurzor.Pressed=0;
  190.      Change=1;
  191.    }
  192.    if ((Kurzor.X!=gMyτUdálost.X) || (Kurzor.Y!=gMyτUdálost.Y)) {
  193.      Kurzor.X=gMyτUdálost.X;
  194.      Kurzor.Y=gMyτUdálost.Y;
  195.      Change=1;
  196.    }
  197.    if (Change!=0) UkaºKurzor();
  198. 7 Stav=staKonecΘrovn╪;
  199. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  200. /1 ¼as.Setiny/4!=P²edeτl∞¼as.Setiny/4
  201. /2 AnimP²edm╪tKolidujeS(Bublina.Anim,Kurzor.Anim)!=0
  202. /3 (GrBarvaBodu(Bublina.X+4 ,Bublina.Y-14)>12) ||
  203.    (GrBarvaBodu(Bublina.X+10,Bublina.Y-10)>12) ||
  204.    (GrBarvaBodu(Bublina.X+13,Bublina.Y-5)>12)  ||
  205.    (GrBarvaBodu(Bublina.X+13,Bublina.Y+5)>12)  ||
  206.    (GrBarvaBodu(Bublina.X+10,Bublina.Y+10)>12) ||
  207.    (GrBarvaBodu(Bublina.X+4 ,Bublina.Y+14)>12) ||
  208.    (GrBarvaBodu(Bublina.X-4 ,Bublina.Y-14)>12) ||
  209.    (GrBarvaBodu(Bublina.X-10,Bublina.Y-10)>12) ||
  210.    (GrBarvaBodu(Bublina.X-13,Bublina.Y-5)>12)  ||
  211.    (GrBarvaBodu(Bublina.X-13,Bublina.Y+5)>12)  ||
  212.    (GrBarvaBodu(Bublina.X-10,Bublina.Y+10)>12) ||
  213.    (GrBarvaBodu(Bublina.X-4 ,Bublina.Y+14)>12)
  214. /4 AnimP²edm╪tKolidujeS(Bublina.Anim,M²íº)!=0
  215. =SP---------------------------------------------------------------------------
  216.  
  217. ;-h---------------------------------------------------------------------------
  218. void Hra( void )
  219. -s--Hra                                                                         ■  11  -2 -18   3
  220.    _____________Hra______________
  221. Zaƒátek      Prost²edek      Ukonƒení
  222.   6!             *1            7!
  223.       _________Θroveσ_________
  224.    Zaƒátek   Prost²edek   Ukonƒení
  225.      1!          *1         4!
  226.          _______Vτe__________
  227.    ___Ovládání_        Anim~objekty
  228.   Myτ     Klávesnice       5!
  229.   2!         3!
  230. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  231. 1 ;inicializuj úroveσ
  232.    VykresliΘroveσ();
  233.    Bublina.X=XStartuΘrovn╪+19;
  234.    Bublina.Y=YStartuΘrovn╪+14;
  235.    Bublina.XTah=0;
  236.    Bublina.YTah=0;
  237.    ¼ekej(500);
  238.    AnimP²edm╪tAnimuj(M²íº,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny,0);
  239.    ¼ekej(500);
  240.    GrKresliP²edm╪t(objVoda,0,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny);
  241.    AnimP²edm╪tAnimuj(M²íº,XStartuΘrovn╪,YStartuΘrovn╪,0);
  242.    AnimP²edm╪tAnimuj(Bublina.Anim,XStartuΘrovn╪,YStartuΘrovn╪,0);
  243.    ¼ekej(500);
  244.    AnimP²edm╪tAnimuj(M²íº,XKonceΘrovn╪,YKonceΘrovn╪,0);
  245. 2 if (MyτP²ítomna!=0) UdálostMyτi();
  246. 3 UdálostKlávesnice();
  247. 4 ;ukonƒi úroveσ
  248.    AnimP²edm╪tSchovej(Kurzor.Anim);
  249.    if (Stav==staKonecBubliny) {
  250.      if (PoƒetBublin>1) {
  251.        --PoƒetBublin;
  252.        Stav=staOK;
  253.      } else
  254.        Stav=staKonecHry;
  255.    }
  256.    if (Stav==staKonecΘrovn╪) {
  257.      Bublina.X=integer(Bublina.X);
  258.      Bublina.Y=integer(Bublina.Y);
  259.      while ((Bublina.X!=XKonceΘrovn╪+19) || (Bublina.Y!=YKonceΘrovn╪+14)) {
  260.        if (Bublina.X>XKonceΘrovn╪+19) Bublina.X--;
  261.        if (Bublina.X<XKonceΘrovn╪+19) Bublina.X++;
  262.        if (Bublina.Y>YKonceΘrovn╪+14) Bublina.Y--;
  263.        if (Bublina.Y<YKonceΘrovn╪+14) Bublina.Y++;
  264.        AnimP²edm╪tAnimuj(Bublina.Anim,Bublina.X-19,Bublina.Y-14,-1);
  265.        ¼ekej(40);
  266.      }
  267.      ¼ekej(500);
  268.      AnimP²edm╪tSchovej(Bublina.Anim);
  269.      AnimP²edm╪tAnimuj(M²íº,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny,0);
  270.      AnimP²edm╪tAnimuj(Bublina.Anim,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny,0);
  271.      GrKresliP²edm╪t(objBublina,0,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny);
  272.      ¼ekej(500);
  273.      ++¼ísloΘrovn╪;
  274.      if (¼ísloΘrovn╪>¼ísloPosledníΘrovn╪) {
  275.        GrKresliP²edm╪ty(objGratulace,1,XGratulace,YGratulace,6,1);
  276.        ¼ekej(3000);
  277.        Stav=staHraDokonƒena;
  278.      } else {
  279.        if (PoƒetBublin<MaxPoƒetBublin) {
  280.          ++PoƒetBublin;
  281.          GrKresliP²edm╪t(objBublina,0,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny);
  282.        }
  283.        Stav=staOK;
  284.      }
  285.    }
  286.    AnimP²edm╪tSchovej(Bublina.Anim);
  287.    AnimP²edm╪tSchovej(M²íº);
  288.    if (Stav==staKonecΘrovn╪) {
  289.      Stav=staOK;
  290.    }
  291. 5 AnimObjekty();
  292. 6 ;inicializuj hru
  293.    int Result=GrNastavMód(GrMódVGA);
  294.    if (Result!=-1) {
  295.      GrNastavV∞stup(GrV∞stupPlocha);
  296.      AnimNastavGrV∞stup(GrV∞stupPlocha);
  297.      GrNaƒtiPaletu("*\\"+strJménoProgramu);
  298.      MyτP²ítomna=MyτZaƒátekObsluhy();
  299.      PoƒetBublin=ΘvodníPoƒetBublin;
  300.      ¼ísloΘrovn╪=¼ísloΘvodníΘrovn╪;
  301.      VykresliPozadí(pozVτe);
  302.      GrKresliP²edm╪ty(objNázev,1,XNázvu,YNázvu,5,1);
  303.      int I;
  304.      for (I=0; I<PoƒetBublin; I++)
  305.        GrKresliP²edm╪t(objBublina,0,XBubliny+I*Grµí²kaPolíƒka,YBubliny);
  306.      for (I=PoƒetBublin; I<MaxPoƒetBublin; I++)
  307.        GrKresliP²edm╪t(objVoda,0,XBubliny+I*Grµí²kaPolíƒka,YBubliny);
  308.      Vytvo²Bublinu();
  309.      M²íº=AnimP²edm╪tVytvo²(objM²íº,1,0,1);
  310.      if (M²íº==0) Stav=staNedostatekPam╪ti;
  311.      Vytvo²Kurzor();
  312.    } else Stav=staGrafick∞MódNebylNastaven;
  313. 7 ;ukonƒi hru
  314.    UkonƒiKurzor();
  315.    AnimP²edm╪tZruτ(M²íº);
  316.    UkonƒiBublinu();
  317.    if (MyτP²ítomna!=0) MyτKonecObsluhy();
  318.    GrKresliP²edm╪ty(objNápisKonec,1,XKonecHry,YKonecHry,6,1);
  319.    ¼ekej(2000);
  320.    if (Stav==staKonecHry) Stav=staOK;
  321.    if ((Stav!=staGrafickáKartaNeníVGA) && (Stav!=staGrafick∞MódNebylNastaven)) {
  322.      GrNastavBarvuPozadí(¼erná);
  323.      GrSmaºOkno();
  324.      P²epniNaText();
  325.    }
  326. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  327. *1 Stav==staOK
  328. =SP---------------------------------------------------------------------------
  329.  
  330. ;-h---------------------------------------------------------------------------
  331. void NaberPaletu( char *Palette )
  332. -s--NaberPaletu                                                                 ■   4  -2 -30 259
  333. NaberPaletu
  334.     1!
  335. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  336. 1 ;naƒti paletu
  337.    TypRegistry Regs;
  338.    Regs.AX=0x1017;
  339.    Regs.BX=1;
  340.    Regs.CX=255;
  341.    Regs.ES=DataSeg();
  342.    Regs.DX=(unsigned)Palette;
  343.    char Retrace=¼tiPort8(0x3DA)&8;
  344.    while (Retrace==0) Retrace=¼tiPort8(0x3DA)&8;
  345.    intr(0x10,Regs);
  346. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  347. =SP---------------------------------------------------------------------------
  348.  
  349. ;-h---------------------------------------------------------------------------
  350. void NaƒtiPaletuZBMP( string Path, char *Palette )
  351. -s--NaƒtiPaletuZBMP                                                             ■   5  -2 -22   3
  352.   _______NaƒtiPaletuZBMP_______
  353. Otev²i   Vyhledej   Naƒti   Zav²i
  354.  1!        2!        3!      4!
  355. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  356. 1 ;otev²i soubor BMP pro ƒtení
  357.    TypSoubor BMPFile;
  358.    BMPFile=SouborOtev²i(SouborAbsolutníCesta(Path),
  359.      SouborP²ístup¼tení|SouborP²ístupBinární);
  360. 2 SouborNastavPozici(BMPFile,54,SouborPoziceOdZaƒátku);
  361. 3 ;naƒti a nastav paletu
  362.    char Pal[1024];
  363.    Soubor¼tiBlok(BMPFile,&Pal,sizeof(Pal));
  364.    int I;
  365.    for (I=0; I<256; I++) {
  366.      Palette[I*3]=Pal[(I+1)*4+2]>>2;
  367.      Palette[I*3+1]=Pal[(I+1)*4+1]>>2;
  368.      Palette[I*3+2]=Pal[(I+1)*4]>>2;
  369.    }
  370. 4 SouborZav²i(BMPFile);
  371. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  372. =SP---------------------------------------------------------------------------
  373.  
  374. ;-h---------------------------------------------------------------------------
  375. void NastavPaletuNa( char *Palette )
  376. -s--NastavPaletuNa                                                              ■   4  -2 -29   3
  377. NastavPaletuNa
  378.      1!
  379. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  380. 1 ;nastav paletu
  381.    TypRegistry Regs;
  382.    Regs.AX=0x1012;
  383.    Regs.BX=1;
  384.    Regs.CX=255;
  385.    Regs.ES=DataSeg();
  386.    Regs.DX=(unsigned)Palette;
  387.    char Retrace=¼tiPort8(0x3DA)&8;
  388.    while (Retrace==0) Retrace=¼tiPort8(0x3DA)&8;
  389.   ; ¼ekejNaVR();
  390.   ; ¼ekej(2);
  391.    intr(0x10,Regs);
  392. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  393. =SP---------------------------------------------------------------------------
  394.  
  395. ;-h---------------------------------------------------------------------------
  396. void P²em╪σPaletuNa( char *Palette, int NumOfSteps )
  397. -s--P²em╪σPaletuNa                                                              ■   5  -2 -27 259
  398. P²em╪σPaletuNa
  399. Naƒti   P²em╪σ
  400.  1!      2!
  401. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  402. 1 ;naƒti souƒasnou paletu do prom╪nné
  403.    TypRegistry Regs;
  404.    char PrePalette[765];
  405.    NaberPaletu(PrePalette);
  406. 2 ;nastav paletu
  407.    int Step, Color;
  408.    double Factor;
  409.    char StepPalette[765];
  410.    Step=1;
  411.    while (Step<NumOfSteps) {
  412.      Factor=(double)Step/NumOfSteps;
  413.      for (Color=0; Color<765; Color+=3) {
  414.        StepPalette[Color]=PrePalette[Color]+Factor*(Palette[Color]-PrePalette[Color]);
  415.        StepPalette[Color+1]=PrePalette[Color+1]+Factor*(Palette[Color+1]-PrePalette[Color+1]);
  416.        StepPalette[Color+2]=PrePalette[Color+2]+Factor*(Palette[Color+2]-PrePalette[Color+2]);
  417.      }
  418.      NastavPaletuNa(StepPalette);
  419.      Step++;
  420.    }
  421.    NastavPaletuNa(Palette);
  422. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  423. =SP---------------------------------------------------------------------------
  424.  
  425. ;-h---------------------------------------------------------------------------
  426. void TitulníObrázky( void )
  427. -s--TitulníObrázky                                                              ■  19  -2  -5   3
  428.  _______TitulníObrázky______
  429. Mód    Paleta  │    _____Název______
  430. 1!    Zaƒerni  │ Obrázek   ______Paleta_______
  431.      2348!     │  b8!   Originál    Zb╪l  Zaƒerni
  432.                │       c878!a8a8  678!    378!
  433.                │
  434.                │
  435.         ______Logo_________
  436.      Obrázek     _______Paleta______
  437.       58!       Zb╪l  Originál    Zb╪l
  438.               678!   9878!a8a8  678!
  439. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  440. 1 ;nastav grafiku na 320x200x256
  441.    TypRegistry Regs;
  442.    Regs.AX=0x13;
  443.    char Retrace=¼tiPort8(0x3DA)&8;
  444.    while (Retrace==0) Retrace=¼tiPort8(0x3DA)&8;
  445.    intr(0x10,Regs);
  446. 2 char Palette[768];
  447. 3 fmemset(DataSeg(),(unsigned)&Palette,0,sizeof(Palette));
  448. 4 NastavPaletuNa(Palette);
  449. 5 VykresliObrázekBMP("*\\"+strJménoProgramu+"1.BMP");
  450. 6 fmemset(DataSeg(),(unsigned)&Palette,63,sizeof(Palette));
  451. 7 P²em╪σPaletuNa(Palette,20);
  452. 8 UdálostKlávesnice(); if (Stav!=staOK) return;
  453. 9 NaƒtiPaletuZBMP("*\\"+strJménoProgramu+"1.BMP",Palette);
  454. a ¼ekej(1000);
  455. b VykresliObrázekBMP("*\\"+strJménoProgramu+".BMP");
  456. c NaƒtiPaletuZBMP("*\\"+strJménoProgramu+".BMP",Palette);
  457. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  458. =SP---------------------------------------------------------------------------
  459.  
  460. ;-h---------------------------------------------------------------------------
  461. void UdálostKlávesnice( void )
  462. -s--UdálostKlávesnice                                                           ■   4  -2 -26 259
  463. UdálostKlávesnice
  464.        1!
  465.      Událost
  466.        Typ?
  467.         /1
  468.   Klávesa~nahoru
  469.       Jaká?
  470.         /2
  471.        Esc
  472.        2!
  473. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  474. 1 Kl¼tiUdálost(gKlUdálost);
  475. 2 Stav=staKonecProgramu;
  476. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  477. /1 gKlUdálost.Typ==KlUdálostKlNahoru
  478. /2 gKlUdálost.Klávesa==KlScanEsc
  479. =SP---------------------------------------------------------------------------
  480.  
  481. ;-h---------------------------------------------------------------------------
  482. void UdálostMyτi( void )
  483. -s--UdálostMyτi                                                                 ■   4  -2 -31 259
  484. UdálostMyτi
  485.     1!
  486.   Událost
  487.     Typ?
  488.      /1
  489.     Levé
  490.     dolà
  491.     2!
  492. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  493. 1 Myτ¼tiUdálost(gMyτUdálost);
  494. 2 ;nastav tah
  495.    double XOff=Bublina.X-gMyτUdálost.X;
  496.    double YOff=Bublina.Y-gMyτUdálost.Y;
  497.    double Piece=300/(abs(XOff)+abs(YOff));
  498.    double DistanceEffect=(sqr(abs(XOff))+sqr(abs(YOff)))/20;
  499.    XOff=(Piece*XOff)/DistanceEffect;
  500.    YOff=(Piece*YOff)/DistanceEffect;
  501.    if (XOff>10) XOff=10;
  502.    if (YOff>10) YOff=10;
  503.    if (XOff<-10) XOff=-10;
  504.    if (YOff<-10) YOff=-10;
  505.    Bublina.XTah+=XOff;
  506.    Bublina.YTah+=YOff;
  507. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  508. /1 gMyτUdálost.Typ==MyτUdálostLevéTlDolà
  509. =SP---------------------------------------------------------------------------
  510.  
  511. ;-h---------------------------------------------------------------------------
  512. void UkonƒiBublinu( void )
  513. -s--UkonƒiBublinu                                                               ■   7  -2 -31 259
  514. UkonƒiBublinu
  515.   Existuje?
  516.       /1
  517.      Ano
  518.      1!
  519. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  520. 1 AnimP²edm╪tZruτ(Bublina.Anim);
  521. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  522. /1 Bublina.Anim!=0
  523. =SP---------------------------------------------------------------------------
  524.  
  525. ;-h---------------------------------------------------------------------------
  526. void UkonƒiKurzor( void )
  527. -s--UkonƒiKurzor                                                                ■   7  -2 -32 259
  528. UkonƒiKurzor
  529.  Existuje?
  530.      /1
  531.     Ano
  532.     1!
  533. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  534. 1 AnimP²edm╪tZruτ(Kurzor.Anim);
  535. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  536. /1 Kurzor.Anim!=0
  537. =SP---------------------------------------------------------------------------
  538.  
  539. ;-h---------------------------------------------------------------------------
  540. void UkonƒiProgram( void )
  541. -s--UkonƒiProgram                                                               ■   5  -2 -27 259
  542.     UkonƒiProgram
  543. Klávesnice  Copyright
  544.    1!          2!
  545. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  546. 1 KlKonecObsluhy();
  547. 2 ;vypiτ copyright a poƒkej 2 sekundy
  548.    int OldForeColor=TxtBarvaPop²edí();
  549.    TxtNastavBarvuPop²edí(TxtSv╪tlomodrozelená);
  550.    TxtPiτⁿet╪zec(strJménoProgramu+strCopyright);
  551.    TxtNastavBarvuPop²edí(OldForeColor);
  552.    TxtPiτNov∞ⁿádek();
  553.    ¼ekej(2000);
  554. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  555. =SP---------------------------------------------------------------------------
  556.  
  557. ;-h---------------------------------------------------------------------------
  558. void UkaºKurzor( void )
  559. -s--UkaºKurzor                                                                  ■   4  -2  -1   3
  560.                     UkaºKurzor
  561.                        1!
  562.   ____________________Sm╪r?_______________________
  563.   /1      /2      /3     /4    /5   /6    /7     /
  564. Nahoru  Nahoru Doprava  Dolà  Dolà Dolà Doleva Nahoru
  565.  2!    Doprava   4!   Doprava 6!  Doleva 8!    Doleva
  566.          3!             5!         7!           9!
  567. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  568. 1 Kurzor.Sm╪r=UrƒiSm╪r();
  569. 2 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-19,Kurzor.Y,Kurzor.Sm╪r+Kurzor.Pressed*8);
  570. 3 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-38,Kurzor.Y,Kurzor.Sm╪r+Kurzor.Pressed*8);
  571. 4 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-38,Kurzor.Y-14,Kurzor.Sm╪r+Kurzor.Pressed*8);
  572. 5 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-38,Kurzor.Y-28,Kurzor.Sm╪r+Kurzor.Pressed*8);
  573. 6 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-19,Kurzor.Y-28,Kurzor.Sm╪r+Kurzor.Pressed*8);
  574. 7 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X,Kurzor.Y-28,Kurzor.Sm╪r+Kurzor.Pressed*8);
  575. 8 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X,Kurzor.Y-14,Kurzor.Sm╪r+Kurzor.Pressed*8);
  576. 9 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X,Kurzor.Y,Kurzor.Sm╪r+Kurzor.Pressed*8);
  577. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  578. /1 Kurzor.Sm╪r==0
  579. /2 Kurzor.Sm╪r==1
  580. /3 Kurzor.Sm╪r==2
  581. /4 Kurzor.Sm╪r==3
  582. /5 Kurzor.Sm╪r==4
  583. /6 Kurzor.Sm╪r==5
  584. /7 Kurzor.Sm╪r==6
  585. =SP---------------------------------------------------------------------------
  586.  
  587. ;-h---------------------------------------------------------------------------
  588. void VykresliObrázekBMP( string Path )
  589. -s--VykresliObrázekBMP                                                          ■   5  -2 -23 259
  590.   _____VykresliObrázekBMP__
  591. Otev²i Vyhledej Naƒti   Zav²i
  592.  1!      2!      3!      4!
  593. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  594. 1 ;otev²i soubor BMP pro ƒtení
  595.    TypSoubor BMPFile;
  596.    long FileSize;
  597.    BMPFile=SouborOtev²i(SouborAbsolutníCesta(Path),
  598.      SouborP²ístup¼tení|SouborP²ístupBinární);
  599.    FileSize=SouborVelikost(BMPFile);
  600. 2 SouborNastavPozici(BMPFile,1078,SouborPoziceOdZaƒátku);
  601. 3 ;ƒti a kresli obrazová data
  602.    char BitMap[320];
  603.    int Height=(FileSize-1078)/sizeof(BitMap);
  604.    int I, J;
  605.    for (I=0; I<Height; I++) {
  606.      Soubor¼tiBlok(BMPFile,&BitMap,sizeof(BitMap));
  607.      if (I==0)
  608.        fmemset(0xA000,0,BitMap[0],64000);
  609.      fmemmove(0xA000,((200-Height)/2+Height-I)*sizeof(BitMap),
  610.        DataSeg(),(unsigned)&BitMap,sizeof(BitMap));
  611.    }
  612. 4 SouborZav²i(BMPFile);
  613. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  614. =SP---------------------------------------------------------------------------
  615.  
  616. ;-h---------------------------------------------------------------------------
  617. void VykresliPozadí( char Kde )
  618. -s--VykresliPozadí                                                              ■   4  -2 -28 259
  619.     VykresliPozadí
  620.          1!5
  621.    ______Kde?______
  622.    /1     /2      /
  623. Nahoru   Dolà   Vτude
  624.  2!      3!      4!
  625. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  626. 1 int X, Y, Y1, Y2;
  627. 2 Y1=0; Y2=V∞τkaProstoru+1;
  628. 3 Y1=V∞τkaProstoru+2; Y2=V∞τkaProstoru+5;
  629. 4 Y1=0; Y2=V∞τkaProstoru+5;
  630. 5 ;vykresli pozadí
  631.    for (X=0; X<µí²kaProstoru+1; X++) {
  632.      for (Y=Y1; Y<=Y2; Y++) {
  633.        GrKresliP²edm╪t(objSt╪na,0,
  634.          XPozadí+X*Grµí²kaPolíƒka,YPozadí+Y*GrV∞τkaPolíƒka);
  635.      }
  636.    }
  637.    for (Y=Y1; Y<=Y2; Y++) {
  638.      GrKresliP²edm╪t(objSt╪na,0,
  639.        XPozadí+16*Grµí²kaPolíƒka-26,YPozadí+Y*GrV∞τkaPolíƒka);
  640.    }
  641. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  642. /1 Kde==pozNahoru
  643. /2 Kde==pozDolà
  644. =SP---------------------------------------------------------------------------
  645.  
  646. ;-h---------------------------------------------------------------------------
  647. void VykresliΘroveσ( void )
  648. -s--VykresliΘroveσ                                                              ■  10  -2 -11 259
  649.   ___________VykresliΘroveσ___________
  650. Cesta      ______Soubor______      Scéna
  651. Vytvo²   Otev²i   Naƒti   Zav²i   Vykresli
  652.  1!       2!       3!      4!       5!
  653. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  654. 1 ;vytvo² cestu k souboru
  655.    string N, Path="*\\"+strJménoProgramu+".S";
  656.    N=StrL¼íslo(¼ísloΘrovn╪,-1);
  657.    while (StrVelikost(N)<2) N="0"+N;
  658.    Path=Path+N;
  659. 2 ;otev²i soubor pro ƒtení
  660.    TypSoubor SceneFile=SouborOtev²i(Path,
  661.      SouborP²ístup¼tení|SouborP²ístupBinární);
  662. 3 ;naƒti data ze souboru
  663.    char Head[19];
  664.    Soubor¼tiBlok(SceneFile,&Head,sizeof(Head));
  665.    TypP²edm╪t ObjectNum[µí²kaProstoru][V∞τkaProstoru];
  666.    Soubor¼tiBlok(SceneFile,ObjectNum,sizeof(ObjectNum));
  667. 4 SouborZav²i(SceneFile);
  668. 5 ;vykresli scénu
  669.    XStartuΘrovn╪=-1;
  670.    YStartuΘrovn╪=-1;
  671.    XKonceΘrovn╪=-1;
  672.    YKonceΘrovn╪=-1;
  673.    GrKresliP²edm╪ty(objPozadí¼ísel,0,X¼íslaΘrovn╪,Y¼íslaΘrovn╪,2,1);
  674.    if (¼ísloΘrovn╪<10)
  675.      GrKresliP²edm╪t(obj¼íslo0+¼ísloΘrovn╪,1,X¼íslaΘrovn╪+28,Y¼íslaΘrovn╪);
  676.    else {
  677.      GrKresliP²edm╪t(obj¼íslo0+(¼ísloΘrovn╪/10),1,X¼íslaΘrovn╪+15,Y¼íslaΘrovn╪);
  678.      GrKresliP²edm╪t(obj¼íslo0+(¼ísloΘrovn╪%10),1,X¼íslaΘrovn╪+43,Y¼íslaΘrovn╪);
  679.    }
  680.    int XX, YY;
  681.    for (XX=0; XX<µí²kaProstoru; XX++) {
  682.      for (YY=0; YY<V∞τkaProstoru; YY++) {
  683.        if (ObjectNum[XX][YY]==objStart) {
  684.          XStartuΘrovn╪=XPlochy+XX*Grµí²kaPolíƒka;
  685.          YStartuΘrovn╪=YPlochy+YY*GrV∞τkaPolíƒka;
  686.          ObjectNum[XX][YY]=objVoda;
  687.        }
  688.        if (ObjectNum[XX][YY]==objKonec) {
  689.          XKonceΘrovn╪=XPlochy+XX*Grµí²kaPolíƒka;
  690.          YKonceΘrovn╪=YPlochy+YY*GrV∞τkaPolíƒka;
  691.          ObjectNum[XX][YY]=objVoda;
  692.        }
  693.        GrKresliP²edm╪t(ObjectNum[XX][YY],0,
  694.          XPlochy+XX*Grµí²kaPolíƒka,YPlochy+YY*GrV∞τkaPolíƒka);
  695.      }
  696.    }
  697.    if ((XStartuΘrovn╪<0) || (YStartuΘrovn╪<0)) Stav=staNeníDefinovánStart;
  698.    if ((XKonceΘrovn╪<0) || (YKonceΘrovn╪<0)) Stav=staNeníDefinovánKonec;
  699. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  700. =SP---------------------------------------------------------------------------
  701.  
  702. ;-h---------------------------------------------------------------------------
  703. void Vytvo²Bublinu( void )
  704. -s--Vytvo²Bublinu                                                               ■   6  -2 -28 259
  705.    Vytvo²Bublinu___
  706. Prom╪nné     Anim~objekt
  707.   1!          vytvo²en?
  708.                   /1
  709.                   Ne
  710.                  2!
  711. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  712. 1 Bublina.Anim=AnimP²edm╪tVytvo²(objAnimBublina,2,0,1);
  713. 2 Stav=staNedostatekPam╪ti;
  714. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  715. /1 Bublina.Anim==0
  716. =SP---------------------------------------------------------------------------
  717.  
  718. ;-h---------------------------------------------------------------------------
  719. void Vytvo²Kurzor( void )
  720. -s--Vytvo²Kurzor                                                                ■   5  -2 -28 259
  721.    _Vytvo²Kurzor_
  722. Prom╪nné   Anim~objekt
  723.   1!        vytvo²en?
  724.                 /1
  725.                 Ne
  726.                2!
  727. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  728. 1 ;inicializace prom╪nn∞ch
  729.    Kurzor.X=-1;
  730.    Kurzor.Y=-1;
  731.    Kurzor.Sm╪r=0;
  732.    Kurzor.Pressed=0;
  733.    Kurzor.Anim=AnimP²edm╪tVytvo²(objKurzor,16,0,1);
  734. 2 Stav=staNedostatekPam╪ti;
  735. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  736. /1 Kurzor.Anim==0
  737. =SP---------------------------------------------------------------------------
  738.  
  739. ;-h---------------------------------------------------------------------------
  740. void ZaƒniProgram( void )
  741. -s--ZaƒniProgram                                                                ■   4  -2 -31 259
  742.  ZaƒniProgram
  743.      1!
  744. VGA~p²ítomna?
  745.     /1   /
  746.    Ano   Ne
  747.    2!   3!
  748. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  749. 1 EscPlus();
  750. 2 ;grafická karta je OK - zaƒni program
  751.    Stav=staOK;
  752.    KlZaƒátekObsluhy(0);
  753. 3 Stav=staGrafickáKartaNeníVGA;
  754. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  755. /1 GrafickáKarta()>=KartaVGA
  756. =SP---------------------------------------------------------------------------
  757.  
  758. ;-h---------------------------------------------------------------------------
  759. void main( void )
  760. -s--Bublina                                                                     ■   5  -2 -15 259
  761.      ____________Bublina_____________
  762. ZaƒniProgram    Prost²edek    UkonƒiProgram
  763.     1!              *1             4!
  764.               T╪lo~programu
  765.              Titulní    Hra
  766.              obrázky    3!
  767.                2!
  768. -o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
  769. 1 ZaƒniProgram();
  770. 2 TitulníObrázky();
  771. 3 Hra();
  772. 4 UkonƒiProgram();
  773. -c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
  774. *1 Stav==staOK
  775. =SP---------------------------------------------------------------------------
  776.  
  777. // Konec souboru
  778.