📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
//--------------------------------------------------------
#define MapSpeed 2 //地图滚动速度
#define LFly 1 //飞行轨迹:直线
#define S1Fly 20 //飞行轨迹:S型,中心轴20像素
#define S2Fly 60 //飞行轨迹:S型,中心轴60像素
#define LSpeed 1 //速度:低速
#define MSpeed 2 //速度:中速
#define HSpeed 3 //速度:高速
#define myID 1 //自己飞机编号。注:敌方飞机为自动编号
#define eID01 2000 //类型一敌方的数量
#define eID02 500 //类型二敌方的数量
#define eID03 500 //类型三敌方的数量
#define DOWN 0 //方向:下
#define UP 1 //方向:上
#define YES 1 //是
#define NO 0 //否
#define GameSpeed 50 //游戏速度:微妙
#define myBulletSize 20 //自己子弹最大量
#define eBulletSize 10 //敌方子弹最大量
#define eSendBullet1 90 //定义敌方发射子弹的点,单位像素
#define eSendBullet2 50 //定义敌方发射子弹的点,单位像素
#define Offset 4 //定义偏移量,单位像素
//--------------------------------------------------------
typedef struct _Plane_
{
int id; // 类型编号
int XPos; // X坐标
int YPos; // Y坐标
int ImgType; // 图片类型
int Flytype; // 飞行轨迹
int HP ; // 生命值
int BulletType; // 子弹类型
int Speed; // 速度
int Direct; // 方向
int ShowBullet; // 是否显示子弹
}
PLANE;
typedef struct _bullettype_
{
int id; //Bullet
int imgtype;//子弹图片
int xpos; //子弹X坐标
int ypos; //子弹Y坐标
int number; //数量
int step; //子弹距离
int time; //发射后的时间
int speed; //子弹速度
int show; //是否显示
}
BULLETTYPE;
typedef struct _bullet_
{
int index;
int x;
int y;
int id;
int time;
}
BULLET;
typedef struct _ebullet_
{
int index;
int x;
int y;
int id;
int time;
int xObject;//目标坐标X
int yObject;//目标坐标Y
}
EBULLET;
//--------------------------------------------------------
int Square(int a,int n);
int BulletSave[5]={0,0,0,0,0};
int eBulletSave[7]={0,0,0,0,0,0,0};
PLANE myPlane; //自己飞机
PLANE e1Plane[eID01]; //敌方飞机一
PLANE e2Plane[eID02]; //敌方飞机二
PLANE e3Plane[eID03]; //敌方飞机三
BULLETTYPE myBulletType[4]; //定义自己四中子弹类型.
BULLETTYPE eBulletType[3]; //定义敌方三种子弹类型.
BULLET myBullet[myBulletSize]; //自己子弹数组
EBULLET eBullet[eBulletSize]; //敌方子弹数组
int AllPlane[10]={0,1,2,3,4,5,6,7,8,9}; //所有的飞机图片0:没有
int AllBullet[10]={1,2,2,2,2,2,2,2,2,2};//图片0:没有1:自己弹,2:敌弹
int AllMap[5]={1,2,3,4,5}; //所有地图图片
int Map[1000];
//--------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//game init
int i=0;
//初始化子弹类型
i=0;
while(i<4)
{
myBulletType[i].id =i;
myBulletType[i].imgtype =AllBullet[0];
myBulletType[i].number =Square(2,i);
myBulletType[i].speed =LSpeed; //自己子弹速度。
myBulletType[i].step =5; //一组子弹中的子弹间距,单位像素
myBulletType[i].time =3; //两次发射的时间间隔,单位是像素
myBulletType[i].xpos =0;
myBulletType[i].ypos =0;
myBulletType[i].show =YES;
i++;
}
i=0;
while(i<3)
{
eBulletType[i].id =i+4; //id:4,5,6
eBulletType[i].imgtype =AllBullet[1];
eBulletType[i].number =1;
if(i==2)
eBulletType[i].number =20; //boss bullet type2.
eBulletType[i].speed =LSpeed;
eBulletType[i].step =10;
eBulletType[i].time =100;
eBulletType[i].xpos =0;
eBulletType[i].ypos =0;
eBulletType[i].show =YES;
i++;
}
//初始化子弹数组
i=0;
while(i < myBulletSize)
{
myBullet[i].index =0;
myBullet[i].id =myBulletType[0].id ;
i++;
}
i=0;
while(i < eBulletSize)
{
eBullet[i].index =0;
eBullet[i].id =eBulletType[0].id ;
i++;
}
//初始化地图
i=0;
while(i<1000)
{
if(i<20)
Map[i]=AllMap[0];//Blue map
if(i>=20 && i<60)
Map[i]=AllMap[1];//Block
if(i>=60)
Map[i]=AllMap[2];//Red Map
i++;
}
//初始化自己飞机
myPlane.id =myID;
myPlane.BulletType =myBulletType[3].id ;
myPlane.ImgType =AllPlane[1];
myPlane.XPos =5;
myPlane.YPos =40;
myPlane.Speed =HSpeed;
myPlane.ShowBullet =YES;
//初始化敌方飞机
i=0;
while(i<eID01)
{
e1Plane[i].id =i;
e1Plane[i].BulletType =eBulletType[0].id ;
e1Plane[i].Flytype =LFly;
e1Plane[i].HP =1;
e1Plane[i].ImgType =AllPlane[2];
e1Plane[i].Speed =LSpeed;
e1Plane[i].XPos =101+i*50;
e1Plane[i].YPos =(i%Offset)*10+20;
e1Plane[i].ShowBullet =YES;
i++;
}
i=0;
while(i<eID02)
{
e2Plane[i].id =i;
e2Plane[i].BulletType =0; //eBulletType[0].id ;
e2Plane[i].Flytype =S1Fly;
e2Plane[i].HP =1;
e2Plane[i].ImgType =AllPlane[2];
e2Plane[i].Speed =LSpeed;
e2Plane[i].XPos =101+i*80;
e2Plane[i].YPos =20;
e2Plane[i].Direct =DOWN;
e2Plane[i].ShowBullet =NO;
i++;
}
i=0;
while(i<eID03)
{
e3Plane[i].id =i;
e3Plane[i].BulletType =0; //eBulletType[0].id ;
e3Plane[i].Flytype =S2Fly;
e3Plane[i].HP =1;
e3Plane[i].ImgType =AllPlane[2];
e3Plane[i].Speed =LSpeed;
e3Plane[i].XPos =101+i*80;
e3Plane[i].YPos =60;
e3Plane[i].Direct =UP;
e3Plane[i].ShowBullet =NO;
i++;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//void eSendBullet()
int i=0,j=0,k=0,index[5]={0,0,0,0,0};
//判断类型一飞机的子弹发射情况
if(e1Plane[0].BulletType )
{
while(i < eID01)//分析出那个飞机在发射子弹
{
// if(e1Plane[i].XPos+e1Plane[i].id%Offset == eSendBullet1|| e1Plane[i].XPos+e1Plane[i].id%Offset == eSendBullet2)
{
index[j++] =e1Plane[i].id;
i++;
break;
}
}
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 =e1Plane[0].BulletType ;
eBullet[0].index =1;
eBullet[0].time =0;
eBullet[0].x =e1Plane[index[k]].XPos ;
eBullet[0].y =e1Plane[index[k]].YPos ;
eBullet[0].xObject =myPlane.XPos ;
eBullet[0].yObject =myPlane.YPos ;
k++;
}
}
//判断类型二飞机的子弹发射情况
if(e2Plane[0].BulletType )
{
i=0;j=0;k=0;
while(i < eID02)//分析出那个飞机在发射子弹
{
if(e2Plane[i].XPos+e2Plane[i].id%Offset == eSendBullet1
|| e2Plane[i].XPos+e2Plane[i].id%Offset == eSendBullet2)
index[j++] =e2Plane[i].id;
i++;
}
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 =e2Plane[0].BulletType ;
eBullet[0].index =1;
eBullet[0].time =0;
eBullet[0].x =e2Plane[index[k]].XPos ;
eBullet[0].y =e2Plane[index[k]].YPos ;
eBullet[0].xObject =myPlane.XPos ;
eBullet[0].yObject =myPlane.YPos ;
k++;
}
}
//判断类型三飞机的子弹发射情况
if(e3Plane[0].BulletType )
{
i=0;j=0;k=0;
while(i < eID03)//分析出那个飞机在发射子弹
{
if(e3Plane[i].XPos+e3Plane[i].id%Offset == eSendBullet1
|| e3Plane[i].XPos+e3Plane[i].id%Offset == eSendBullet2)
index[j++] =e3Plane[i].id;
i++;
}
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 __fastcall TForm1::Button3Click(TObject *Sender)
{
//void SendBullet()
//*************
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 ;
//*************
int i=myBulletSize;
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 ;
//*************
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 __fastcall TForm1::Button4Click(TObject *Sender)
{
//void eBulletTrace()
int i=0;
while(i < eBulletSize)
{
if(eBullet[i].index !=0)
{
eBullet[i].x -=eBulletType[eBullet[i].id-4 ].speed ;
eBullet[i].y +=eBulletType[eBullet[i].id-4 ].speed ;
//if(eBulletType[eBullet[i].id-4].number ==1
// && eBulletType[eBullet[i].id-4].show ==YES)
ShowBullet(eBullet[i].x ,eBullet[i].y,eBulletType[eBullet[i].id-4 ].imgtype );
}
i++;
}
}
//---------------------------------------------------------------------------
void TForm1::ShowBullet(int x,int y,int ImgBullet)
{
Memo1->Lines->Add (" X: " + IntToStr(x)+" Y: " + IntToStr(y)+ " ImgBullet: " + IntToStr(ImgBullet));
}
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;
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//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++;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
Memo1->Clear ();
//GameInit();
// Button1->Click ();
Button3->Click (); //void SendBullet()
Button5->Click (); //void BulletTrace()
Button2->Click (); //void eSendBullet()
Button4->Click (); //void eBulletTrace()
/* PlaneTrace();
BulletTrace();
eSendBullet();
eBulletTrace();*/
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -