📄 main.c
字号:
while(k<j)
{
i=eBulletSize;
while(i >= 0)
{
eBullet[i+1].id =eBullet[i].id ;
eBullet[i+1].index =eBullet[i].index ;
eBullet[i+1].time =eBullet[i].time ;
eBullet[i+1].x =eBullet[i].x ;
eBullet[i+1].y =eBullet[i].y ;
eBullet[i+1].xObject=eBullet[i].xObject ;
eBullet[i+1].yObject=eBullet[i].yObject ;
i--;
}
eBullet[0].id =e3Plane[0].BulletType ;
eBullet[0].index =1;
eBullet[0].time =0;
eBullet[0].x =e3Plane[index[k]].XPos ;
eBullet[0].y =e3Plane[index[k]].YPos ;
eBullet[0].xObject =myPlane.XPos ;
eBullet[0].yObject =myPlane.YPos ;
k++;
}
}*/
}
// **************************************************
// 我方发射子弹
// **************************************************
void SendBullet()
{
int i=myBulletSize;
/*eBulletSave[0] =eBullet[0].id ;
eBulletSave[1] =eBullet[0].index ;
eBulletSave[2] =eBullet[0].time ;
eBulletSave[3] =eBullet[0].x ;
eBulletSave[4] =eBullet[0].y ;
eBulletSave[5] =eBullet[0].xObject ;
eBulletSave[6] =eBullet[0].yObject ;*/
while(i >= 0)
{
i--;
myBullet[i+1].id =myBullet[i].id;
myBullet[i+1].index =myBullet[i].index ;
myBullet[i+1].time =myBullet[i].time ;
myBullet[i+1].x =myBullet[i].x ;
myBullet[i+1].y =myBullet[i].y ;
}
myBullet[0].id =myPlane.BulletType ;
myBullet[0].index =1;
myBullet[0].time =0;
myBullet[0].x =myPlane.XPos+15 ;
myBullet[0].y =myPlane.YPos+3 ;
//*************处理Struct结构体BUG的代码.
/* eBullet[0].id =eBulletSave[0] ;
eBullet[0].index =eBulletSave[1] ;
eBullet[0].time =eBulletSave[2] ;
eBullet[0].x =eBulletSave[3] ;
eBullet[0].y =eBulletSave[4] ;
eBullet[0].xObject =eBulletSave[5] ;
eBullet[0].yObject =eBulletSave[6] ;*/
}
// **************************************************
// 勾画敌方子弹路径
// **************************************************
void eBulletTrace()
{
int i=0;
while(i < eBulletSize)
{
if(eBullet[i*7] !=0)
{
eBullet[i*7+1] -=eBulletType[eBullet[i*7+3]-4 ].speed ;
eBullet[i*7+2] +=eBulletType[eBullet[i*7+3]-4 ].speed ;
//if(eBulletType[eBullet[i*7+3]-4].number ==1
// && eBulletType[eBullet[i*7+3]-4].show ==YES)
ShowBullet(eBullet[i*7+1] ,eBullet[i*7+2],eBulletType[eBullet[i*7+3]-4 ].imgtype );
}
i++;
}
}
// **************************************************
// 勾画我方子弹路径
// **************************************************
void BulletTrace()
{
int i=0;
//int temp[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
while(i < myBulletSize)//显示我方子弹
{
if(myBullet[i].index !=0)//判断是否有子弹。
{
//更新发射后的时间
if(myBullet[i].x < 101)
myBullet[i].time ++;
myBullet[i].x +=myBullet[i].time*2*myBulletType[myBullet[i].id].speed ;
if(myBulletType[myBullet[i].id ].number==1
&& myBulletType[myBullet[i].id ].show ==YES)
ShowBullet(myBullet[i].x ,myBullet[i].y,
myBulletType[myBullet[i].id ].imgtype );
if(myBulletType[myBullet[i].id ].number==2
&& myBulletType[myBullet[i].id ].show ==YES)
{
ShowBullet(myBullet[i].x ,myBullet[i].y-1,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y+1,
myBulletType[myBullet[i].id ].imgtype );
}
if(myBulletType[myBullet[i].id ].number==4
&& myBulletType[myBullet[i].id ].show ==YES)
{
ShowBullet(myBullet[i].x ,myBullet[i].y-3,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y-1,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y+1,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y+3,
myBulletType[myBullet[i].id ].imgtype );
}
if(myBulletType[myBullet[i].id ].number==8
&& myBulletType[myBullet[i].id ].show ==YES)
{
ShowBullet(myBullet[i].x ,myBullet[i].y-myBullet[i].time*4,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y-myBullet[i].time*3,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y-3,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y-1,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y+1,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y+3,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y+myBullet[i].time*3,
myBulletType[myBullet[i].id ].imgtype );
ShowBullet(myBullet[i].x ,myBullet[i].y+myBullet[i].time*4,
myBulletType[myBullet[i].id ].imgtype );
}
//结构设计有问题:无法知道哪个BulletItem.show
}
i++;
}
}
// **************************************************
// 求平方的函数
// a 底数
// n 指数
// **************************************************
int Square(int a,int n)
{
int i=0,temp;
temp=a;
while(i<n)
{
a=a*temp;
i++;
}
a=a/temp;
if(i==0)
a=1;
return a;
}
// **************************************************
// 延时函数,
// nTime :延时的时间,单位为微秒.
// **************************************************
void Sleep(int nTime)
{
int Time;
Time = vGetTickCount() + nTime ;
while(vGetTickCount() < Time);
}
// **************************************************
// 显示地图
// h :地图滚动的坐标
// **************************************************
void ShowMap(int h)
{ int x;
x=h;
vClearScreen(vRGB(0,0,0)) ; // Clear the "backbuffer" with black
if(Map[(x/101)] == AllMap[0] )
vDrawObject((h/101)*101-h,0,&BackGround01);
if(Map[(x/101)] == AllMap[1] )
vDrawObject((h/101)*101-h,0,&BackGround02);
if(Map[(x/101)] == AllMap[2] )
vDrawObject((h/101)*101-h,0,&BackGround03);
if(Map[(x/101)+1] == AllMap[0] )
vDrawObject((h/101)*101+101-h,0,&BackGround01);
if(Map[(x/101)+1] == AllMap[1] )
vDrawObject((h/101)*101+101-h,0,&BackGround02);
if(Map[(x/101)+1] == AllMap[2] )
vDrawObject((h/101)*101+101-h,0,&BackGround03);
}
// **************************************************
// 显示飞机
// X :X坐标
// Y :Y坐标
// ImgPlane :飞机图片索引
// **************************************************
void ShowPlane(int x,int y,int ImgPlane)
{
if(ImgPlane==AllPlane[1])
vDrawObject(x,y,&Plane01);
if(ImgPlane==AllPlane[2])
vDrawObject(x,y,&Enemy01);
}
// **************************************************
// 勾画我方和敌方飞机路径
// **************************************************
void PlaneTrace()
{
int i=0;
//if(id==myID)
ShowPlane(myPlane.XPos ,myPlane.YPos ,myPlane.ImgType );
//if(id==eID01)
{
while(i<eID01)
{
if(e1Plane[i].HP !=0)
{
if(e1Plane[i].Flytype ==LFly)
e1Plane[i].XPos -=e1Plane[i].Speed ;
ShowPlane(e1Plane[i].XPos ,e1Plane[i].YPos ,e1Plane[i].ImgType );
}
i++;
}
i=0;
while(i<eID02)
{
if(e2Plane[i].HP !=0)
{
if(e2Plane[i].Flytype ==S1Fly)
{
e2Plane[i].XPos -=e2Plane[i].Speed ;
if(e2Plane[i].YPos >e2Plane[i].Flytype +10)
e2Plane[i].Direct =UP;
if(e2Plane[i].YPos <e2Plane[i].Flytype -10)
e2Plane[i].Direct =DOWN;
if(e2Plane[i].Direct ==DOWN)
e2Plane[i].YPos ++;
if(e2Plane[i].Direct ==UP)
e2Plane[i].YPos --;
}
ShowPlane(e2Plane[i].XPos ,e2Plane[i].YPos ,e2Plane[i].ImgType );
}
i++;
}
i=0;
while(i<eID03)
{
if(e3Plane[i].HP !=0)
{
if(e3Plane[i].Flytype ==S2Fly)
{
e3Plane[i].XPos -=e3Plane[i].Speed ;
if(e3Plane[i].YPos >e3Plane[i].Flytype +10)
e3Plane[i].Direct =UP;
if(e3Plane[i].YPos <e3Plane[i].Flytype -10)
e3Plane[i].Direct =DOWN;
if(e3Plane[i].Direct ==DOWN)
e3Plane[i].YPos ++;
if(e3Plane[i].Direct ==UP)
e3Plane[i].YPos --;
}
ShowPlane(e3Plane[i].XPos ,e3Plane[i].YPos ,e3Plane[i].ImgType );
}
i++;
}
}
}
// **************************************************
// 游戏引擎
// **************************************************
int GameEngine(int here)
{
int key=0;
key=vGetButtonData();
ShowMap(here);
if(key==KEY_UP)
{
if(myPlane.YPos > 3)
myPlane.YPos -=myPlane.Speed ;
SendBullet();
}
if(key==KEY_LEFT)
{
if(myPlane.XPos > 0)
myPlane.XPos -=myPlane.Speed ;
}
if(key==KEY_RIGHT)
{
if(myPlane.XPos < 80)
myPlane.XPos +=myPlane.Speed ;
}
if(key==KEY_DOWN)
{
if(myPlane.YPos < 70)
myPlane.YPos +=myPlane.Speed ;
SendBullet();
}
if(key==0)
{
//SendBullet();
}
key=0;
ShowBoss(here);
PlaneTrace();
BulletTrace();
//eSendBullet();
//eBulletTrace();
/*if(here%10==0)
{
SendBullet();
}*/
vFlipScreen(1);
return 1;
}
// **************************************************
// 主函数.
// **************************************************
int main(void)
{
uint32_t key=0;//键盘键值变量。
int mapX=0,SpeedTemp=0;
vClearScreen(vRGB(0,0,0)) ; // Clear the "backbuffer" with black
vSetClipWindow(0,0,101,80);
vDrawObject(0,0,&Menu);
vFlipScreen(1);
GameInit();
while(!key)
key = vGetButtonData();
while(vGetButtonData()==key); //等待键盘输入...
while(1)
{
Sleep(GameSpeed);
if(!GameEngine(mapX))
break;
//地图速度控制
if(SpeedTemp >= MapSpeed)
{
mapX++;
SpeedTemp=0;
}
SpeedTemp++;
}
vTerminateVMGP(); // Terminate vmgp
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -