⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 一款不错的射击类游戏
💻 C
📖 第 1 页 / 共 2 页
字号:
// *******************************************************
//
// FILENAME:    main.c
// PROJECT:		Attack Plane
// DESCRIPTION:	飞机空战游戏
// DATE:		2002-11-23
// BY:			bo
// 
// *******************************************************

#include <vmgp.h> 
#include "res.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	5		//游戏速度:微妙
#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 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 eBullet[eBulletSize*7]={0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0,
							0,0,0,0,0,0,0
							};
//x,y,img,bullet1,bullet2.
int eBoss[5]={1000,50,1,10,10};
//***************
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];
//--------------------------------------------------------
//--------------------------------------------------------
void Sleep(int nTime);
void GameInit();
void PlaneTrace();
int GameEngine(int here);
void ShowMap(int h);
void ShowPlane(int x,int y,int ImgPlane);
int Square(int a,int n);
void ShowBullet(int x,int y,int ImgBullet);
void BulletTrace();
void SendBullet();
void eSendBullet();
void eBulletTrace();
void ShowBoss(int h);
//--------------------------------------------------------
// **************************************************
// Game Init
//	1		初始化我方子弹类型
//	2		初始化敌方子弹类型
// 3		初始化我方子弹数组
// 4		初始化敌方子弹数组
//	5		初始化地图
// 6		初始化我方飞机
//  7		初始化三类敌方飞机
// **************************************************
void GameInit()
{
	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*7]	=0;
		eBullet[i*7+3]	=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 ShowBoss(int h)
{
	if(eBoss[0]-h < 80)
	{
		eBoss[0]=70;
		//Boss[1]=;
		vDrawObject(eBoss[0],eBoss[1],&Boss);
	}
}
// **************************************************
// 显示子弹
//	X			X坐标
//	Y			Y坐标
// ImgBullet	子弹的图片索引值
// **************************************************
void ShowBullet(int x,int y,int ImgBullet)
{
	if(ImgBullet==1)
		vDrawObject(x,y,&MyBullet02);
	if(ImgBullet==2)
		vDrawObject(x,y,&MyBullet02);
	if(ImgBullet==3)
		vDrawObject(x,y,&EnemyBullet01);
	if(ImgBullet==4)
		vDrawObject(x,y,&EnemyBullet02);
}
// **************************************************
// 敌方发射子弹
// **************************************************
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++;
		}

		while(k<j)
		{
			i=eBulletSize;
			while(i >= 0)
			{
				eBullet[(i+1)*7+3]	=eBullet[(i)*7+3];
				eBullet[(i+1)*7]	=eBullet[(i)*7];
				eBullet[(i+1)*7+4]	=eBullet[(i)*7+4];
				eBullet[(i+1)*7+1]	=eBullet[(i)*7+1] ;
				eBullet[(i+1)*7+2]	=eBullet[(i)*7+2] ;
				eBullet[(i+1)*7+5]	=eBullet[(i)*7+5] ;
				eBullet[(i+1)*7+6]	=eBullet[(i)*7+6] ;
				i--;
			}
			eBullet[3]	=e1Plane[0].BulletType ;
			eBullet[0]	=1;
			eBullet[4]	=0;
			eBullet[1]	=e1Plane[index[k]].XPos ;
			eBullet[2]	=e1Plane[index[k]].YPos ;
			eBullet[5]	=myPlane.XPos ;
			eBullet[6]	=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++;
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -