大一程序设计期末大作业(飞机大战 C)

   日期:2020-07-17     浏览:130    评论:0    
核心提示:用了一百多行代码做了一个相当简陋的飞机大战,用的是devc++,装了个ege库。文件部分素材都是网上找来抠的。。运行出来的效果十分简单,规则应该都知道,因为懒只有一种敌人和子弹,没有做出道具系统。代码#include#include#define width 640#define height 700 #define YSb 160//子弹射出间隔 #define YSe 500//敌人生成间隔 #define F
用了一百多行代码做了一个相当简陋的飞机大战,用的是devc++,装了个ege库。
文件部分

素材都是网上找来抠的。。

运行出来的效果


十分简单,规则应该都知道,因为懒只有一种敌人和子弹,没有做出道具系统。

代码
#include<graphics.h>
#include<time.h>
#define width 640
#define height 700 
#define YSb 160//子弹射出间隔 
#define YSe 500//敌人生成间隔 
#define FT 5//敌人飞行速度 

int bullet[100000][2],cnt;
int enemy[100000][2],idx;
int ifdestroy[100000];
int score;

bool destroy(int a,int b,int x,int y)//检测是否击中敌人 
{
	if(a>=x-15 && a<=x+15 && b>=y-10 && b<=y+10)
	{
		score++;
		return 1;
	}
	return 0;
}

void CreatEnemy()//生成敌人 
{
	int xx=rand()%width,yy=0;
	enemy[idx++][0]=xx;
	enemy[idx][1]=yy;
}

void enemyfly(int k)//敌人飞行轨迹 
{
	if(enemy[k][1]<=height && ifdestroy[k]==0)
	{
		PIMAGE enem=newimage();
		getimage(enem,"2.png");
		putimage_withalpha(NULL, enem, enemy[k][0]-31, enemy[k][1]-20);
		delimage(enem);
		enemy[k][1]+=1;
	}
	else if(enemy[k][1] > height)//敌人到达底部,游戏失败判定 
	{
		//cleardevice();
		xyprintf(width/2-120,height/2,"Game over!your final score:%d",score);
		getch();
		memset(ifdestroy,0,sizeof ifdestroy);
		memset(enemy,0,sizeof enemy);
		cnt = 0;
		idx = 0;
		score = 0;
	}
}

void shoot(int x,int y)//发射子弹 
{
	bullet[cnt++][0]=x;
	bullet[cnt][1]=y;
}

void bulletfly(int k)//子弹飞行轨迹 
{
	if(bullet[k][1]>=0)
	{
		fillellipse(bullet[k][0], bullet[k][1], 4, 8);
		bullet[k][1]-=2;
		for(int i=0;i<idx;i++)
			if(ifdestroy[i]==0 && enemy[i][1]<=height)
				if(destroy(bullet[k][0],bullet[k][1],enemy[i][0],enemy[i][1]))
					ifdestroy[i]=1;
	}
}

int main()
{
	int nowx=width/2,nowy=height/2;
	int timeb=YSb;
	int timee=YSe;
	int flytime=FT;
	srand( (unsigned)time( NULL ) );
	setinitmode(INIT_RENDERMANUAL, 100, 100);
	initgraph(width,height);
	
	PIMAGE background=newimage();
	PIMAGE plane=newimage();
	PIMAGE enem=newimage();
	getimage(background,"background.jfif");
	getimage(plane,"1.png");
	getimage(enem,"2.png");
	setcaption("Fantastic War");
	
	setcolor(YELLOW);			//设置前景色为红色
	setfillcolor(YELLOW);		//设置填充色为黄色
	setfont(20,0,"宋体");
	
	xyprintf(width/2-60,height/2,"按任意键开始");
	getch();
    for(; is_run(); delay_fps(900))
    {
    	mouse_msg msg = {0};
    	if(mousemsg())
    	{
    		msg=getmouse();
			nowx=msg.x;
			nowy=msg.y;
		}
		
		timeb--;//用于子弹延迟 
		if(timeb == 0)
		{
			shoot(nowx,nowy);
			timeb=YSb;
		}
		
		timee--;//用于敌人生成延迟 
		if(timee == 0)
		{
			CreatEnemy();
			timee=YSe;
		}
		
		cleardevice();
		putimage(0,0,background);
		putimage_withalpha(NULL,plane, nowx-47, nowy-20);
		
		for(int i=0;i<cnt;i++)
			bulletfly(i);
		
		flytime--;//敌人飞行速度 
		if(flytime == 0)
		{
			for(int i=0;i<idx;i++)
				enemyfly(i);
			flytime=FT;
		}
		else
		{
			for(int i=0;i<idx;i++)
				if(enemy[i][1]<=height && ifdestroy[i] == 0)
					putimage_withalpha(NULL, enem, enemy[i][0]-31, enemy[i][1]-20);
		}
		xyprintf(10,10,"得分:%d",score);
		//delimage(plane);
		//closegraph();
	}
    return 0;
}
//designed by Sankkl1
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服