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

用了一百多行代码做了一个相当简陋的飞机大战,用的是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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值