这是一款经典的飞行射击游戏,为玩家呈现了不一样的射击体验。简单的触摸屏操作,触摸屏按住任何地方左右移动就能自动攻击敌人,上下移动也能避开强敌。玩家在游戏中要做的就是驾驶最新的战机,向敌人发起冲击。
经典的飞行射击游戏《飞机大战》为玩家呈现了不一样的射击体验。简单的触摸屏操作,触摸屏按住任何地方左右移动就能自动攻击敌人,上下移动也能避开强敌。玩家在游戏中要做的就是驾驶最新的战机,向敌人发起冲击。
今天我就用C++带你一步步完成风靡全球的小程序飞机大战游戏~ PS:要安装easyx图形库#include开发工具是VS2013。
在此之前,我先给大家解释一下,因为这是一个比较大的项目,所以把所有的代码都展示出来会比较困难,所以我把大部分的主要代码都剪掉了,主要是让大家理解实现这个项目的逻辑思路。希望你能明白,完整的代码/编译器/图形库可以在文章底部获取。
专题片开始:第一步:打开vs2013,创建一个项目,将准备好的素材资源放入同级目录中(素材可在文章底部收藏),如图:
第二步:编写基本框架,查看您的背景图片的像素,创建一个具有相同像素的图形窗口,并添加背景图片:
第三步:设置好音乐,玩家,敌机,子弹,启动双缓冲绘图:
#include#include//包含图形库头文件easyx # include # pragma comment(lib," winmm.lib")//加载多媒体设备库# Define win _ width 591 # Define win _ height 864 # Define Player _ bullet 15//Player子弹号#define ENEMYPLANE_NUM 10//定义变量int a = 666//定义一个图片图像bk;IMAGE img _ player[4];IMAGE img _ bullet[2];IMAGE img _ enemy[2];结构平面{ int x;int y;布尔标志;//..是否死int宽度;int高度;}player,pbull[PLAYER_BULLET],敌方[enemy plane _ NUM];//时间变化DWORD t1,T2;//在模块中处理,特殊的东西,允许我们的函数做void GameInit(){//1,创建图形窗口initgraph(WIN_WIDTH,WIN _ HEIGHT);//设置随机数种子srand(GetTickCount());//2,粘贴背景图片//2.1加载图片到bk,加载图片(&BK,”。/images/background . jpg ");loadimage(&img_player[0],"。/images/plane normal _ 1 . jpg ");loadimage(&img_player[1],"。/images/plane normal _ 2 . jpg ");loadimage(&img_player[2],"。/images/plane boom _ 1 . jpg ");loadimage(&img_player[3],"。/images/plane boom _ 2 . jpg ");loadimage(&img_bullet[0],"。/images/bullet 1 . jpg ");loadimage(&img_bullet[1],"。/images/bullet 2 . jpg ");loadimage(&img_enemy[0],"。/images/enemy _ 1 . jpg ");loadimage(&img_enemy[1],"。/images/enemy _ 2 . jpg ");//3、先打开音乐再播放音乐mcisendstring ("open。/images/game _ music.mp3aliasbgm ",0,0,0);mciSendString("播放BGM重复",0,0,0);//初始化player player.height = 120player.width = 117player . x = WIN _ WIDTH/2 -player . WIDTH/2;player . y = WIN _ HEIGHT -player . HEIGHT;player.flag = true//初始化(int i = 0的项目符号;i < PLAYER _ BULLETi++){pbull[i]。flag = falsepbull[i]。身高= 24;pbull[i]。宽度= 19;}//初始化时间变量t1 = T2 = GetTickCount();//初始化敌机为(int I = 0;I <敌人平面数量;i++){敌人[i]。flag = false敌人[我]。宽度= 52;敌人[我]。身高= 39;} }//游戏画图函数void GameDarw(){//双缓冲画图防止画面闪烁BeginBatchDraw();//2.2输出背景图片putimage(0,0,& bk);//透明贴图if(player . flag){ Putimage(player . x,player.y,&img _ player [0],notsrcerase);putimage(player.x,player.y,&img_player[1],src invert);}//绘制玩家的子弹for(int I = 0;i < PLAYER _ BULLETi++){if (pbull[i]。flag){putimage(pbull[i].x,pbull[i]。y,&img_bullet[0],not srce rase);putimage(pbull[i].x,pbull[i]。y,&img_bullet[1],src invert);} }//绘制敌机for(int I = 0;I <敌人平面数量;i++){if(敌人[i]。flag){putimage(敌人[i].x,敌人[我]。y,&img_enemy[0],not srce rase);putimage(敌人[i]。x,敌人[我]。y,&img_enemy[1],src invert);} } EndBatchDraw();}//生成播放器bullet void creat bullet(){ for(int I = 0;i < PLAYER _ BULLETi++){if(!pbull[i]。flag){pbull[i]。x = player . x+53;pbull[i]。y = player.ypbull[i]。flag = true打破;} } }//生成敌机void create enemy(){ for(int I = 0;I <敌人平面数量;i++){if(!敌人[我]。flag){敌人[我]。x = rand() % (WIN_WIDTH -敌人[i]。宽度);敌人[我]。y = 0;敌人[我]。flag = true打破;} } } void enemy move(int speed){ for(int I = 0;I WIN _ HEIGHT){敌人[i]。flag = false} } } }//控制平面,打开..void KeyControl(int speed){// key进行处理,使用getch()//将边界上移进行处理if(getasynckeystate(vk _ up)& & player . y > = 0){ player . y-= speed;}//下移if(getasynckeystate(vk _ down)& & player . y+player . height = 0){ player . x-= speed;}//将if(getasynckeystate(vk _ right)& & player . x+player . width/2200)向右移动{mcisendstring ("closegun ",0,0,0);mciSendString("open。/images/f_gun.mp3别名gun ",0,0,0);mciSendString("玩枪",0,0,0);//生成一个bullet creat bullet();t1 = t2} T2 = GetTickCount();}//生成敌机void create enemy(){ for(int I = 0;I <敌人平面数量;i++){if(!敌人[我]。flag){敌人[我]。x = rand() % (WIN_WIDTH -敌人[i]。宽度);敌人[我]。y = 0;敌人[我]。flag = true打破;} } } void enemy move(int speed){ for(int I = 0;I WIN _ HEIGHT){敌人[i]。flag = false}}}}
第四步:设置子弹的移动,用鼠标控制飞机;
//玩家的子弹移动Void bullet move(int speed){ for(int I = 0;i < PLAYER _ BULLETi++){if (pbull[i]。flag){pbull[i]。y -=速度;if (pbull[i].y = 0){ player . y-= speed;}//下移if(getasynckeystate(vk _ down)& & player . y+player . height = 0){ player . x-= speed;}//将if(getasynckeystate(vk _ right)& & player . x+player . width/2200)向右移动{mcisendstring ("closegun ",0,0,0);mciSendString("open。/images/f_gun.mp3别名gun ",0,0,0);mciSendString("玩枪",0,0,0);//生成一个bullet creat bullet();t1 = t2} T2 = GetTickCount();}
第五步:设置游戏开始,判断子弹是否命中:
//去...void PlayPlane(){//每一个敌人,每一颗子弹都要比较for(int I = 0;I <敌人平面数量;i++){if(!敌人[我]。flag)继续;//遍历for (int k = 0的项目符号数组;k 敌人[我]。x&&p公牛[k]。x敌人[我]。y&&p牛[k]。y.
评论前必须登录!
注册