打飞机由来,游戏中心选择的游戏都是极度符合移动平台规律的休闲游戏。就以飞机大战为例吧,微博上有人说这货只是一个程序员一边啃面包一边突发奇想,用一周时间完成的小游戏。
游戏极为简约,就是漫画式的竖版弹幕作品,游戏也不分什么模式,就是不停的打飞机,看谁的分数高,有两种增益状态随机出现,蓝色的是可以限时增强飞机子弹威力的道具,红色的则是全屏清敌的炸弹。敌机也只有三种,由小到大。我方飞机被敌方飞机碰到,游戏就结束了。
就这么一个作品吧,其上手难度简直就是秒杀全年龄段所有用户,只要智商没问题都能轻松上手。是啊,这么多用户不是每个人都有时间去整天玩各种高端大气的解谜难度作品的,就弄这么几款游戏让我们上下班交通时间,中午午休时间,平日碎片时间放松放松不就得了,嗯,游戏中心满足你们的要求。
我也因此借助网上素材和游戏引擎写了一个简单的打飞机游戏,程序用到很多线程以及图片,精灵等
初始界面有开始游戏和游戏介绍,鼠标被替换了形状
鼠标单击游戏介绍便会出来介绍,再点游戏介绍回到主界面
点开始游戏,会有一个加载动画,然后播放游戏进行音乐
初始有两枚炸弹,炸弹可以清屏地方飞机,我方飞机是连续单发子弹,由鼠标控制,吃到蓝色道具就转变成为双发子弹的飞机,更加厉害,子弹射中敌机,敌机消失,并增加分数,分数每大于5000,地方飞机下落速度会增加!
游戏上方会显示游戏坚持的时间,以激励人的某种欲望,以及有分数显示
蓝色道具和红色道具会从游戏界面上方随机产生位置并左右飘落,遇到墙壁往反方向飘落,蓝色道具可以变成双发子弹的飞机,红色道具为可以使用的炸弹
我方飞机碰到地方飞机为游戏结束,结束后停止播放游戏进行曲,播放失败的音效
并在结束页面显示坚持的秒数以及分数,可以点击结束游戏或重新开始
下面简单介绍一下
1.游戏初始界面
2.点击介绍后的页面
3.再次点击介绍回到主页面
4.点开始游戏会有加载动画
6.游戏开始后界面
随机蓝色道具飘落
需要飞机碰到才算拥有,道具会左右来回飘动,缓慢下降
红色道具类似会这样产生
使用红色道具可以清屏
碰到敌机身亡,显示
大概如此,有待改进,如敌机也发射子弹,不同敌机需要击中次数不一样才消失,界面也还需优化
主要代码如下
int xiangjiao(int x1,int y1,int width1,int height1,int x2,int y2,int width2,int height2) //两个矩形框是否相交
{
if(x1>x2+width2||x1+width1y2+height2||y1+height1=x1&&mousex<=(x1+width1)&&mousey>=y1&&mousey<=(y1+height1))
{
return 1;
}
return 0;
}
int ismouseSprite(int Sprite)//鼠标与精灵是否相交
{
int mousex=getMousePositionX();
int mousey=getMousePositionY();
int x1=getSpriteX(Sprite);
int y1=getSpriteY(Sprite);
int width1=getSpriteWidth(Sprite);
int height1=getSpriteHeight(Sprite);
if(mousex>=x1&&mousex<=(x1+width1)&&mousey>=y1&&mousey<=(y1+height1))
{
return 1;
}
return 0;
}
int k=10; //开始敌机编号
int flagenemy=1; //标志位,我的飞机没有死的时候
int k1=20000; //开始子弹编号
long sum; //总分
int k2=19500; //双发子弹道具
int doublezidan=1; //全局变量子弹速度
int down1=5;//初始下落速度
int boom=2; //初始拥有炸弹数量
void f1(void * k)//线程运行每架敌机的下降
{
int fd=(int)k;
int i;
for(i=0;i<200;i++)
{
setSpritePosition(fd,getSpriteX(fd),getSpriteY(fd)-down1);
pauseGame(100);
}
}
void f11(void * arg) //线程创建敌机,创建的时候近几架飞机不能重叠
{
char str[256];
int n,i,leap;
srand((unsigned)time(NULL));
while(flagenemy==1)
{
n=rand()%13+1;
sprintf(str,"%dfly",n);
createSprite(k,str);
hideSprite(k);
playSpriteAnimate(k,"fly");
if(n==1||n==4||n==6||n==7||n==9||n==10||n==11||n==13||n==8) //小飞机的概率要大
{
while(1)
{
leap=0;
setSpritePosition(k,(rand()%20)*21+rand()%11+15,850);
for(i=k-20;i=0&&leap==0) //碰壁后改变
{
if(getSpriteX(8)+getSpriteWidth(8)+28>=480)
lr=-lr;
if(getSpriteX(8)-28<=0)
lr=-lr;
setSpritePosition(8,getSpriteX(8)+lr,getSpriteY(8)-down);
if(issprite(8,1)) //吃到道具后
{
doublezidan=2;
hideSprite(8);
return;
}
pauseGame(150);
}
}
}
//缓落飘下可以得到的炸弹,碰左壁向右飘,碰右壁向左飘
void f11111(void * a)//游戏变成不可预知性太多,需要多多测试
{
int leap;
int down=10;
int lr=18;
createSprite(19499,"double");
playSpriteAnimate(19499,"boom");
hideSprite(19499);
while(flagenemy==1)
{
pauseGame(15000);
showSprite(19499);
setSpritePosition(19499,rand()%450+58,840);
leap=0;
while(getSpriteY(19499)>=0&&leap==0) //碰壁后改变
{
if(getSpriteX(19499)+getSpriteWidth(19499)+28>=480)
lr=-lr;
if(getSpriteX(19499)-28<=0)
lr=-lr;
setSpritePosition(19499,getSpriteX(19499)+lr,getSpriteY(19499)-down);
if(issprite(19499,1)) //吃到道具后
{
boom++;
hideSprite(19499);
break;
}
pauseGame(150);
}
}
}
void play()
{
int a=10,j,i,speed=5000,time1; //speed是一个量,分数每大于5000就加快敌机下落速度
char str[256];
char str1[256];
char str2[256];
time_t timep;
time1=time(&timep); //开始的秒数
playSound("game_music.mp3",1); //播放游戏进行音乐
createText(1,"分数:00000000"); //开始的分数
setTextFontSize(1,35); //设置文字位子及颜色
setTextPosition(1,10,810);
setTextColor(1,1,1,0);
createText(2,"坚持秒数:000s"); //设置坚持秒数
setTextFontSize(2,30);
setTextPosition(2,280,810);
setTextColor(2,1,1,0);
createImage(10,"bomb.png"); //设置炸弹位置
setImagePosition(10,20,20);
createText(3,"X 00"); //设置炸弹数量
setTextFontSize(3,25);
setTextPosition(3,90,20);
setTextColor(3,1,0,1);
asyncRun(f11,(void*)a);
asyncRun(f1111,(void*)a);
asyncRun(f11111,(void*)a);
showSprite(1); //显示我方人物
asyncRun(zidan,(void*)a); //线程运行子弹
while(1)
{
setSpritePosition(1,getMousePositionX(),getMousePositionY());
if(sum>=speed) //分数每大于5000,下路速度增加
{
speed=speed*2;
down1=down1+1;
}
sprintf(str1,"坚持秒数:%03ds",time(&timep)-time1); //实时变化坚持秒数
setText(2,str1);
sprintf(str2,"X %02d",boom); //实时变化拥有炸弹数量
setText(3,str2);
for(j=10;j=1)
{
boom--;
for(i=10;i