home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 July
/
Chip_1998-07_cd.bin
/
tema
/
sgp
/
vyber
/
bublina
/
BUBLINA.SGP
< prev
next >
Wrap
Text File
|
1998-02-23
|
29KB
|
778 lines
SGPC 5.00 S#0000000000 24.10.1997 19:50:47 StructNo 7 7
; 23.2.98 - úpravy pro verzi 5.01
; - zm╪na názvu souboru LOGO.BMP na strJménoProgramu+"1.BMP"
# include <sgpbalt.h>
// Globální konstanty
#define staNeníDefinovánKonec -5
#define staNeníDefinovánStart -4
#define staNedostatekPam╪ti -3
#define staGrafick∞MódNebylNastaven -2
#define staGrafickáKartaNeníVGA -1
#define staKonecHry 0
#define staOK 1
#define staKonecBubliny 2
#define staKonecΘrovn╪ 3
#define staHraDokonƒena 4
#define staKonecProgramu 5
#define strJménoProgramu "Bublina"
#define strCopyright " 1.0 Copyright (c) 1997 SGP Systems, s.r.o."
#define objVoda 1
#define objStart 15
#define objSt╪na 16
#define objKonec 30
#define objKurzor 31
#define objBublina 47
#define objAnimBublina 48
#define objM²íº 50
#define obj¼íslo0 51
#define objNápisKonec 61
#define objGratulace 68
#define objPozadí¼ísel 74
#define objNázev 76
#define ¼ísloΘvodníΘrovn╪ 0
#define ¼ísloPosledníΘrovn╪ 5
#define ΘvodníPoƒetBublin 3
#define MaxPoƒetBublin 5
#define XPozadí 2
#define YPozadí 9
#define XPlochy (XPozadí+26)
#define YPlochy (YPozadí+87)
#define XNázvu ((640-5*Grµí²kaPolíƒka)/2)
#define YNázvu 38
#define XBubliny XPlochy
#define YBubliny (YPlochy+11*GrV∞τkaPolíƒka)
#define X¼íslaΘrovn╪ 288
#define Y¼íslaΘrovn╪ YBubliny
#define XKonecHry 209
#define YKonecHry 225
#define XGratulace 216
#define YGratulace 170
#define pozVτe 0
#define pozNahoru 1
#define pozDolà 2
// Globální typy
typedef struct {
double X, Y, XTah, YTah;
TypAnimP²edm╪t Anim;
} TBublina;
typedef struct {
int X, Y, Sm╪r, Pressed;
TypAnimP²edm╪t Anim;
} TKurzor;
// Globální prom╪nné
int Stav, MyτP²ítomna=0, PoƒetBublin, ¼ísloΘrovn╪,
XStartuΘrovn╪, YStartuΘrovn╪, XKonceΘrovn╪, YKonceΘrovn╪;
TBublina Bublina;
Typ¼as ¼as, P²edeτl∞¼as;
TKurzor Kurzor;
TypAnimP²edm╪t M²íº;
// Globální makra
-o1-Globals
-c1-Globals
===Globals
/*-hf(*/
/*-hf-*/
int UrƒiSm╪r( void )
/*-hf-*/;
void AnimObjekty( void )
/*-hf-*/;
void Hra( void )
/*-hf-*/;
void NaberPaletu( char *Palette )
/*-hf-*/;
void NaƒtiPaletuZBMP( string Path, char *Palette )
/*-hf-*/;
void NastavPaletuNa( char *Palette )
/*-hf-*/;
void P²em╪σPaletuNa( char *Palette, int NumOfSteps )
/*-hf-*/;
void TitulníObrázky( void )
/*-hf-*/;
void UdálostKlávesnice( void )
/*-hf-*/;
void UdálostMyτi( void )
/*-hf-*/;
void UkonƒiBublinu( void )
/*-hf-*/;
void UkonƒiKurzor( void )
/*-hf-*/;
void UkonƒiProgram( void )
/*-hf-*/;
void UkaºKurzor( void )
/*-hf-*/;
void VykresliObrázekBMP( string Path )
/*-hf-*/;
void VykresliPozadí( char Kde )
/*-hf-*/;
void VykresliΘroveσ( void )
/*-hf-*/;
void Vytvo²Bublinu( void )
/*-hf-*/;
void Vytvo²Kurzor( void )
/*-hf-*/;
void ZaƒniProgram( void )
/*-hf-*/;
void main( void )
/*-hf)*/;
;-h---------------------------------------------------------------------------
int UrƒiSm╪r( void )
-s--UrƒiSm╪r ■ 4 -2 -33 259
UrƒiSm╪r
1!2
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vy²eτ sm╪r
int Result;
double X=abs(Bublina.X-gMyτUdálost.X);
double Y=abs(Bublina.Y-gMyτUdálost.Y);
if ((X==0) && (Y==0)) { X=1; Y=1; }
double Piece=10/(X+Y);
X=Piece*X;
Y=Piece*Y;
if (abs(X-Y)>5) {
if (X>Y) {
if (Bublina.X<gMyτUdálost.X) Result=6; else Result=2;
} else {
if (Bublina.Y<gMyτUdálost.Y) Result=0; else Result=4;
}
} else {
if (Bublina.X<gMyτUdálost.X) {
if (Bublina.Y<gMyτUdálost.Y) Result=7; else Result=5;
} else {
if (Bublina.Y<gMyτUdálost.Y) Result=1; else Result=3;
}
}
2 return Result;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void AnimObjekty( void )
-s--AnimObjekty ■ 18 -2 -9 3
___________AnimObjekty___________
_Bublina__ Kurzor ___Kolize~bubliny__
Pohyb Vykresli 6! Kurzor? St╪ny? M²íº?
3! 2! /2 /3 /4
Nastal~ƒas? Ano Ano Ano
/1 5! 5! 7!
Ano
1!4
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;nastav pozici a tah
Bublina.X+=Bublina.XTah;
Bublina.Y+=Bublina.YTah;
if (UrƒiSm╪r()!=Kurzor.Sm╪r) Change=1;
Bublina.XTah=Bublina.XTah/1.1;
if ((Bublina.YTah<0) || (Bublina.YTah>1)) Bublina.YTah=Bublina.YTah/1.1;
if (Bublina.YTah<0.99) Bublina.YTah+=0.01;
2 AnimP²edm╪tAnimuj(Bublina.Anim,Bublina.X-19,Bublina.Y-14,-1);
3 Systémov∞¼as(¼as); int Change=0;
4 P²edeτl∞¼as.Setiny=¼as.Setiny;
5 Stav=staKonecBubliny;
6 ;nastav kurzor
if ((gMyτUdálost.Typ==MyτUdálostLevéTlDolà) && (Kurzor.Pressed==0)) {
Kurzor.Pressed=1;
Change=1;
}
if ((gMyτUdálost.Typ==MyτUdálostLevéTlNahoru) && (Kurzor.Pressed==1)) {
Kurzor.Pressed=0;
Change=1;
}
if ((Kurzor.X!=gMyτUdálost.X) || (Kurzor.Y!=gMyτUdálost.Y)) {
Kurzor.X=gMyτUdálost.X;
Kurzor.Y=gMyτUdálost.Y;
Change=1;
}
if (Change!=0) UkaºKurzor();
7 Stav=staKonecΘrovn╪;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 ¼as.Setiny/4!=P²edeτl∞¼as.Setiny/4
/2 AnimP²edm╪tKolidujeS(Bublina.Anim,Kurzor.Anim)!=0
/3 (GrBarvaBodu(Bublina.X+4 ,Bublina.Y-14)>12) ||
(GrBarvaBodu(Bublina.X+10,Bublina.Y-10)>12) ||
(GrBarvaBodu(Bublina.X+13,Bublina.Y-5)>12) ||
(GrBarvaBodu(Bublina.X+13,Bublina.Y+5)>12) ||
(GrBarvaBodu(Bublina.X+10,Bublina.Y+10)>12) ||
(GrBarvaBodu(Bublina.X+4 ,Bublina.Y+14)>12) ||
(GrBarvaBodu(Bublina.X-4 ,Bublina.Y-14)>12) ||
(GrBarvaBodu(Bublina.X-10,Bublina.Y-10)>12) ||
(GrBarvaBodu(Bublina.X-13,Bublina.Y-5)>12) ||
(GrBarvaBodu(Bublina.X-13,Bublina.Y+5)>12) ||
(GrBarvaBodu(Bublina.X-10,Bublina.Y+10)>12) ||
(GrBarvaBodu(Bublina.X-4 ,Bublina.Y+14)>12)
/4 AnimP²edm╪tKolidujeS(Bublina.Anim,M²íº)!=0
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Hra( void )
-s--Hra ■ 11 -2 -18 3
_____________Hra______________
Zaƒátek Prost²edek Ukonƒení
6! *1 7!
_________Θroveσ_________
Zaƒátek Prost²edek Ukonƒení
1! *1 4!
_______Vτe__________
___Ovládání_ Anim~objekty
Myτ Klávesnice 5!
2! 3!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;inicializuj úroveσ
VykresliΘroveσ();
Bublina.X=XStartuΘrovn╪+19;
Bublina.Y=YStartuΘrovn╪+14;
Bublina.XTah=0;
Bublina.YTah=0;
¼ekej(500);
AnimP²edm╪tAnimuj(M²íº,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny,0);
¼ekej(500);
GrKresliP²edm╪t(objVoda,0,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny);
AnimP²edm╪tAnimuj(M²íº,XStartuΘrovn╪,YStartuΘrovn╪,0);
AnimP²edm╪tAnimuj(Bublina.Anim,XStartuΘrovn╪,YStartuΘrovn╪,0);
¼ekej(500);
AnimP²edm╪tAnimuj(M²íº,XKonceΘrovn╪,YKonceΘrovn╪,0);
2 if (MyτP²ítomna!=0) UdálostMyτi();
3 UdálostKlávesnice();
4 ;ukonƒi úroveσ
AnimP²edm╪tSchovej(Kurzor.Anim);
if (Stav==staKonecBubliny) {
if (PoƒetBublin>1) {
--PoƒetBublin;
Stav=staOK;
} else
Stav=staKonecHry;
}
if (Stav==staKonecΘrovn╪) {
Bublina.X=integer(Bublina.X);
Bublina.Y=integer(Bublina.Y);
while ((Bublina.X!=XKonceΘrovn╪+19) || (Bublina.Y!=YKonceΘrovn╪+14)) {
if (Bublina.X>XKonceΘrovn╪+19) Bublina.X--;
if (Bublina.X<XKonceΘrovn╪+19) Bublina.X++;
if (Bublina.Y>YKonceΘrovn╪+14) Bublina.Y--;
if (Bublina.Y<YKonceΘrovn╪+14) Bublina.Y++;
AnimP²edm╪tAnimuj(Bublina.Anim,Bublina.X-19,Bublina.Y-14,-1);
¼ekej(40);
}
¼ekej(500);
AnimP²edm╪tSchovej(Bublina.Anim);
AnimP²edm╪tAnimuj(M²íº,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny,0);
AnimP²edm╪tAnimuj(Bublina.Anim,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny,0);
GrKresliP²edm╪t(objBublina,0,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny);
¼ekej(500);
++¼ísloΘrovn╪;
if (¼ísloΘrovn╪>¼ísloPosledníΘrovn╪) {
GrKresliP²edm╪ty(objGratulace,1,XGratulace,YGratulace,6,1);
¼ekej(3000);
Stav=staHraDokonƒena;
} else {
if (PoƒetBublin<MaxPoƒetBublin) {
++PoƒetBublin;
GrKresliP²edm╪t(objBublina,0,XBubliny+(PoƒetBublin-1)*Grµí²kaPolíƒka,YBubliny);
}
Stav=staOK;
}
}
AnimP²edm╪tSchovej(Bublina.Anim);
AnimP²edm╪tSchovej(M²íº);
if (Stav==staKonecΘrovn╪) {
Stav=staOK;
}
5 AnimObjekty();
6 ;inicializuj hru
int Result=GrNastavMód(GrMódVGA);
if (Result!=-1) {
GrNastavV∞stup(GrV∞stupPlocha);
AnimNastavGrV∞stup(GrV∞stupPlocha);
GrNaƒtiPaletu("*\\"+strJménoProgramu);
MyτP²ítomna=MyτZaƒátekObsluhy();
PoƒetBublin=ΘvodníPoƒetBublin;
¼ísloΘrovn╪=¼ísloΘvodníΘrovn╪;
VykresliPozadí(pozVτe);
GrKresliP²edm╪ty(objNázev,1,XNázvu,YNázvu,5,1);
int I;
for (I=0; I<PoƒetBublin; I++)
GrKresliP²edm╪t(objBublina,0,XBubliny+I*Grµí²kaPolíƒka,YBubliny);
for (I=PoƒetBublin; I<MaxPoƒetBublin; I++)
GrKresliP²edm╪t(objVoda,0,XBubliny+I*Grµí²kaPolíƒka,YBubliny);
Vytvo²Bublinu();
M²íº=AnimP²edm╪tVytvo²(objM²íº,1,0,1);
if (M²íº==0) Stav=staNedostatekPam╪ti;
Vytvo²Kurzor();
} else Stav=staGrafick∞MódNebylNastaven;
7 ;ukonƒi hru
UkonƒiKurzor();
AnimP²edm╪tZruτ(M²íº);
UkonƒiBublinu();
if (MyτP²ítomna!=0) MyτKonecObsluhy();
GrKresliP²edm╪ty(objNápisKonec,1,XKonecHry,YKonecHry,6,1);
¼ekej(2000);
if (Stav==staKonecHry) Stav=staOK;
if ((Stav!=staGrafickáKartaNeníVGA) && (Stav!=staGrafick∞MódNebylNastaven)) {
GrNastavBarvuPozadí(¼erná);
GrSmaºOkno();
P²epniNaText();
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
*1 Stav==staOK
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NaberPaletu( char *Palette )
-s--NaberPaletu ■ 4 -2 -30 259
NaberPaletu
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;naƒti paletu
TypRegistry Regs;
Regs.AX=0x1017;
Regs.BX=1;
Regs.CX=255;
Regs.ES=DataSeg();
Regs.DX=(unsigned)Palette;
char Retrace=¼tiPort8(0x3DA)&8;
while (Retrace==0) Retrace=¼tiPort8(0x3DA)&8;
intr(0x10,Regs);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NaƒtiPaletuZBMP( string Path, char *Palette )
-s--NaƒtiPaletuZBMP ■ 5 -2 -22 3
_______NaƒtiPaletuZBMP_______
Otev²i Vyhledej Naƒti Zav²i
1! 2! 3! 4!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;otev²i soubor BMP pro ƒtení
TypSoubor BMPFile;
BMPFile=SouborOtev²i(SouborAbsolutníCesta(Path),
SouborP²ístup¼tení|SouborP²ístupBinární);
2 SouborNastavPozici(BMPFile,54,SouborPoziceOdZaćtku);
3 ;naƒti a nastav paletu
char Pal[1024];
Soubor¼tiBlok(BMPFile,&Pal,sizeof(Pal));
int I;
for (I=0; I<256; I++) {
Palette[I*3]=Pal[(I+1)*4+2]>>2;
Palette[I*3+1]=Pal[(I+1)*4+1]>>2;
Palette[I*3+2]=Pal[(I+1)*4]>>2;
}
4 SouborZav²i(BMPFile);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void NastavPaletuNa( char *Palette )
-s--NastavPaletuNa ■ 4 -2 -29 3
NastavPaletuNa
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;nastav paletu
TypRegistry Regs;
Regs.AX=0x1012;
Regs.BX=1;
Regs.CX=255;
Regs.ES=DataSeg();
Regs.DX=(unsigned)Palette;
char Retrace=¼tiPort8(0x3DA)&8;
while (Retrace==0) Retrace=¼tiPort8(0x3DA)&8;
; ¼ekejNaVR();
; ¼ekej(2);
intr(0x10,Regs);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void P²em╪σPaletuNa( char *Palette, int NumOfSteps )
-s--P²em╪σPaletuNa ■ 5 -2 -27 259
P²em╪σPaletuNa
Naƒti P²em╪σ
1! 2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;naƒti souƒasnou paletu do prom╪nné
TypRegistry Regs;
char PrePalette[765];
NaberPaletu(PrePalette);
2 ;nastav paletu
int Step, Color;
double Factor;
char StepPalette[765];
Step=1;
while (Step<NumOfSteps) {
Factor=(double)Step/NumOfSteps;
for (Color=0; Color<765; Color+=3) {
StepPalette[Color]=PrePalette[Color]+Factor*(Palette[Color]-PrePalette[Color]);
StepPalette[Color+1]=PrePalette[Color+1]+Factor*(Palette[Color+1]-PrePalette[Color+1]);
StepPalette[Color+2]=PrePalette[Color+2]+Factor*(Palette[Color+2]-PrePalette[Color+2]);
}
NastavPaletuNa(StepPalette);
Step++;
}
NastavPaletuNa(Palette);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void TitulníObrázky( void )
-s--TitulníObrázky ■ 19 -2 -5 3
_______TitulníObrázky______
Mód Paleta │ _____Název______
1! Zaƒerni │ Obrázek ______Paleta_______
2348! │ b8! Originál Zb╪l Zaƒerni
│ c878!a8a8 678! 378!
│
│
______Logo_________
Obrázek _______Paleta______
58! Zb╪l Originál Zb╪l
678! 9878!a8a8 678!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;nastav grafiku na 320x200x256
TypRegistry Regs;
Regs.AX=0x13;
char Retrace=¼tiPort8(0x3DA)&8;
while (Retrace==0) Retrace=¼tiPort8(0x3DA)&8;
intr(0x10,Regs);
2 char Palette[768];
3 fmemset(DataSeg(),(unsigned)&Palette,0,sizeof(Palette));
4 NastavPaletuNa(Palette);
5 VykresliObrázekBMP("*\\"+strJménoProgramu+"1.BMP");
6 fmemset(DataSeg(),(unsigned)&Palette,63,sizeof(Palette));
7 P²em╪σPaletuNa(Palette,20);
8 UdálostKlávesnice(); if (Stav!=staOK) return;
9 NaƒtiPaletuZBMP("*\\"+strJménoProgramu+"1.BMP",Palette);
a ¼ekej(1000);
b VykresliObrázekBMP("*\\"+strJménoProgramu+".BMP");
c NaƒtiPaletuZBMP("*\\"+strJménoProgramu+".BMP",Palette);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void UdálostKlávesnice( void )
-s--UdálostKlávesnice ■ 4 -2 -26 259
UdálostKlávesnice
1!
Událost
Typ?
/1
Klávesa~nahoru
Jaká?
/2
Esc
2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 Kl¼tiUdálost(gKlUdálost);
2 Stav=staKonecProgramu;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 gKlUdálost.Typ==KlUdálostKlNahoru
/2 gKlUdálost.Klávesa==KlScanEsc
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void UdálostMyτi( void )
-s--UdálostMyτi ■ 4 -2 -31 259
UdálostMyτi
1!
Událost
Typ?
/1
Levé
dolà
2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 Myτ¼tiUdálost(gMyτUdálost);
2 ;nastav tah
double XOff=Bublina.X-gMyτUdálost.X;
double YOff=Bublina.Y-gMyτUdálost.Y;
double Piece=300/(abs(XOff)+abs(YOff));
double DistanceEffect=(sqr(abs(XOff))+sqr(abs(YOff)))/20;
XOff=(Piece*XOff)/DistanceEffect;
YOff=(Piece*YOff)/DistanceEffect;
if (XOff>10) XOff=10;
if (YOff>10) YOff=10;
if (XOff<-10) XOff=-10;
if (YOff<-10) YOff=-10;
Bublina.XTah+=XOff;
Bublina.YTah+=YOff;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 gMyτUdálost.Typ==MyτUdálostLevéTlDolà
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void UkonƒiBublinu( void )
-s--UkonƒiBublinu ■ 7 -2 -31 259
UkonƒiBublinu
Existuje?
/1
Ano
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 AnimP²edm╪tZruτ(Bublina.Anim);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 Bublina.Anim!=0
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void UkonƒiKurzor( void )
-s--UkonƒiKurzor ■ 7 -2 -32 259
UkonƒiKurzor
Existuje?
/1
Ano
1!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 AnimP²edm╪tZruτ(Kurzor.Anim);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 Kurzor.Anim!=0
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void UkonƒiProgram( void )
-s--UkonƒiProgram ■ 5 -2 -27 259
UkonƒiProgram
Klávesnice Copyright
1! 2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 KlKonecObsluhy();
2 ;vypiτ copyright a poƒkej 2 sekundy
int OldForeColor=TxtBarvaPop²edí();
TxtNastavBarvuPop²edí(TxtSv╪tlomodrozelená);
TxtPiτⁿet╪zec(strJménoProgramu+strCopyright);
TxtNastavBarvuPop²edí(OldForeColor);
TxtPiτNov∞ⁿádek();
¼ekej(2000);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void UkaºKurzor( void )
-s--UkaºKurzor ■ 4 -2 -1 3
UkaºKurzor
1!
____________________Sm╪r?_______________________
/1 /2 /3 /4 /5 /6 /7 /
Nahoru Nahoru Doprava Dolà Dolà Dolà Doleva Nahoru
2! Doprava 4! Doprava 6! Doleva 8! Doleva
3! 5! 7! 9!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 Kurzor.Sm╪r=UrƒiSm╪r();
2 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-19,Kurzor.Y,Kurzor.Sm╪r+Kurzor.Pressed*8);
3 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-38,Kurzor.Y,Kurzor.Sm╪r+Kurzor.Pressed*8);
4 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-38,Kurzor.Y-14,Kurzor.Sm╪r+Kurzor.Pressed*8);
5 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-38,Kurzor.Y-28,Kurzor.Sm╪r+Kurzor.Pressed*8);
6 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X-19,Kurzor.Y-28,Kurzor.Sm╪r+Kurzor.Pressed*8);
7 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X,Kurzor.Y-28,Kurzor.Sm╪r+Kurzor.Pressed*8);
8 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X,Kurzor.Y-14,Kurzor.Sm╪r+Kurzor.Pressed*8);
9 AnimP²edm╪tAnimuj(Kurzor.Anim,Kurzor.X,Kurzor.Y,Kurzor.Sm╪r+Kurzor.Pressed*8);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 Kurzor.Sm╪r==0
/2 Kurzor.Sm╪r==1
/3 Kurzor.Sm╪r==2
/4 Kurzor.Sm╪r==3
/5 Kurzor.Sm╪r==4
/6 Kurzor.Sm╪r==5
/7 Kurzor.Sm╪r==6
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void VykresliObrázekBMP( string Path )
-s--VykresliObrázekBMP ■ 5 -2 -23 259
_____VykresliObrázekBMP__
Otev²i Vyhledej Naƒti Zav²i
1! 2! 3! 4!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;otev²i soubor BMP pro ƒtení
TypSoubor BMPFile;
long FileSize;
BMPFile=SouborOtev²i(SouborAbsolutníCesta(Path),
SouborP²ístup¼tení|SouborP²ístupBinární);
FileSize=SouborVelikost(BMPFile);
2 SouborNastavPozici(BMPFile,1078,SouborPoziceOdZaćtku);
3 ;ƒti a kresli obrazová data
char BitMap[320];
int Height=(FileSize-1078)/sizeof(BitMap);
int I, J;
for (I=0; I<Height; I++) {
Soubor¼tiBlok(BMPFile,&BitMap,sizeof(BitMap));
if (I==0)
fmemset(0xA000,0,BitMap[0],64000);
fmemmove(0xA000,((200-Height)/2+Height-I)*sizeof(BitMap),
DataSeg(),(unsigned)&BitMap,sizeof(BitMap));
}
4 SouborZav²i(BMPFile);
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void VykresliPozadí( char Kde )
-s--VykresliPozadí ■ 4 -2 -28 259
VykresliPozadí
1!5
______Kde?______
/1 /2 /
Nahoru Dolà Vτude
2! 3! 4!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 int X, Y, Y1, Y2;
2 Y1=0; Y2=V∞τkaProstoru+1;
3 Y1=V∞τkaProstoru+2; Y2=V∞τkaProstoru+5;
4 Y1=0; Y2=V∞τkaProstoru+5;
5 ;vykresli pozadí
for (X=0; X<µí²kaProstoru+1; X++) {
for (Y=Y1; Y<=Y2; Y++) {
GrKresliP²edm╪t(objSt╪na,0,
XPozadí+X*Grµí²kaPolíƒka,YPozadí+Y*GrV∞τkaPolíƒka);
}
}
for (Y=Y1; Y<=Y2; Y++) {
GrKresliP²edm╪t(objSt╪na,0,
XPozadí+16*Grµí²kaPolíƒka-26,YPozadí+Y*GrV∞τkaPolíƒka);
}
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 Kde==pozNahoru
/2 Kde==pozDolà
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void VykresliΘroveσ( void )
-s--VykresliΘroveσ ■ 10 -2 -11 259
___________VykresliΘroveσ___________
Cesta ______Soubor______ Scéna
Vytvo² Otev²i Naƒti Zav²i Vykresli
1! 2! 3! 4! 5!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;vytvo² cestu k souboru
string N, Path="*\\"+strJménoProgramu+".S";
N=StrL¼íslo(¼ísloΘrovn╪,-1);
while (StrVelikost(N)<2) N="0"+N;
Path=Path+N;
2 ;otev²i soubor pro ƒtení
TypSoubor SceneFile=SouborOtev²i(Path,
SouborP²ístup¼tení|SouborP²ístupBinární);
3 ;naƒti data ze souboru
char Head[19];
Soubor¼tiBlok(SceneFile,&Head,sizeof(Head));
TypP²edm╪t ObjectNum[µí²kaProstoru][V∞τkaProstoru];
Soubor¼tiBlok(SceneFile,ObjectNum,sizeof(ObjectNum));
4 SouborZav²i(SceneFile);
5 ;vykresli scénu
XStartuΘrovn╪=-1;
YStartuΘrovn╪=-1;
XKonceΘrovn╪=-1;
YKonceΘrovn╪=-1;
GrKresliP²edm╪ty(objPozadí¼ísel,0,X¼íslaΘrovn╪,Y¼íslaΘrovn╪,2,1);
if (¼ísloΘrovn╪<10)
GrKresliP²edm╪t(obj¼íslo0+¼ísloΘrovn╪,1,X¼íslaΘrovn╪+28,Y¼íslaΘrovn╪);
else {
GrKresliP²edm╪t(obj¼íslo0+(¼ísloΘrovn╪/10),1,X¼íslaΘrovn╪+15,Y¼íslaΘrovn╪);
GrKresliP²edm╪t(obj¼íslo0+(¼ísloΘrovn╪%10),1,X¼íslaΘrovn╪+43,Y¼íslaΘrovn╪);
}
int XX, YY;
for (XX=0; XX<µí²kaProstoru; XX++) {
for (YY=0; YY<V∞τkaProstoru; YY++) {
if (ObjectNum[XX][YY]==objStart) {
XStartuΘrovn╪=XPlochy+XX*Grµí²kaPolíƒka;
YStartuΘrovn╪=YPlochy+YY*GrV∞τkaPolíƒka;
ObjectNum[XX][YY]=objVoda;
}
if (ObjectNum[XX][YY]==objKonec) {
XKonceΘrovn╪=XPlochy+XX*Grµí²kaPolíƒka;
YKonceΘrovn╪=YPlochy+YY*GrV∞τkaPolíƒka;
ObjectNum[XX][YY]=objVoda;
}
GrKresliP²edm╪t(ObjectNum[XX][YY],0,
XPlochy+XX*Grµí²kaPolíƒka,YPlochy+YY*GrV∞τkaPolíƒka);
}
}
if ((XStartuΘrovn╪<0) || (YStartuΘrovn╪<0)) Stav=staNeníDefinovánStart;
if ((XKonceΘrovn╪<0) || (YKonceΘrovn╪<0)) Stav=staNeníDefinovánKonec;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Vytvo²Bublinu( void )
-s--Vytvo²Bublinu ■ 6 -2 -28 259
Vytvo²Bublinu___
Prom╪nné Anim~objekt
1! vytvo²en?
/1
Ne
2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 Bublina.Anim=AnimP²edm╪tVytvo²(objAnimBublina,2,0,1);
2 Stav=staNedostatekPam╪ti;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 Bublina.Anim==0
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void Vytvo²Kurzor( void )
-s--Vytvo²Kurzor ■ 5 -2 -28 259
_Vytvo²Kurzor_
Prom╪nné Anim~objekt
1! vytvo²en?
/1
Ne
2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ;inicializace prom╪nn∞ch
Kurzor.X=-1;
Kurzor.Y=-1;
Kurzor.Sm╪r=0;
Kurzor.Pressed=0;
Kurzor.Anim=AnimP²edm╪tVytvo²(objKurzor,16,0,1);
2 Stav=staNedostatekPam╪ti;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 Kurzor.Anim==0
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void ZaƒniProgram( void )
-s--ZaƒniProgram ■ 4 -2 -31 259
ZaƒniProgram
1!
VGA~p²ítomna?
/1 /
Ano Ne
2! 3!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 EscPlus();
2 ;grafická karta je OK - zaƒni program
Stav=staOK;
KlZaćtekObsluhy(0);
3 Stav=staGrafickáKartaNeníVGA;
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
/1 GrafickáKarta()>=KartaVGA
=SP---------------------------------------------------------------------------
;-h---------------------------------------------------------------------------
void main( void )
-s--Bublina ■ 5 -2 -15 259
____________Bublina_____________
ZaƒniProgram Prost²edek UkonƒiProgram
1! *1 4!
T╪lo~programu
Titulní Hra
obrázky 3!
2!
-o1----------------------SEZNAM OPERAC╓------------TENTO ⁿ╡DEK NEM╖NIT!-------
1 ZaƒniProgram();
2 TitulníObrázky();
3 Hra();
4 UkonƒiProgram();
-c1----------------------SEZNAM PODM╓NEK-----------TENTO ⁿ╡DEK NEM╖NIT!-------
*1 Stav==staOK
=SP---------------------------------------------------------------------------
// Konec souboru