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