摘要:飞机大战这是一款经典飞行射击类游戏,为玩家呈现一场不一样射击体验。简单的触屏操作,触屏按住随意一个地方,左右移动,便可自动攻击敌人,上下移动亦可躲避强敌。玩家在游戏中要做的就是驾驶着最新战机,向敌人发起冲击。
开发工具为VS2013
#include#include//包含图形库头文件 easyx#include#pragma comment(lib,"winmm.lib")//加载多媒体设备库#define WIN_WIDTH 591#define WIN_HEIGHT 864#define PLAYER_BULLET 15 //玩家子弹数量#define ENEMYPLANE_NUM 10//定义变量 int a=666;//定义一个图片IMAGE bk;IMAGE img_player[4];IMAGE img_bullet[2];IMAGE img_enemy[2];struct Plane{ int x; int y; bool flag;//..是否死亡 int width; int height;}player, pbull[PLAYER_BULLET], enemy[ENEMYPLANE_NUM];//时间的变化量DWORD t1, t2;//分模块处理,专门的事情,准们的函数做void GameInit(){ //1,创建一个图形窗口 initgraph(WIN_WIDTH, WIN_HEIGHT); //设置随机数种子 srand(GetTickCount()); //2,贴背景图片 //2.1加载图片到bk里面 loadimage(&bk, "./images/background.jpg"); loadimage(&img_player[0], "./images/planeNormal_1.jpg"); loadimage(&img_player[1], "./images/planeNormal_2.jpg"); loadimage(&img_player[2], "./images/planeBoom_1.jpg"); loadimage(&img_player[3], "./images/planeBoom_2.jpg"); loadimage(&img_bullet[0], "./images/bullet1.jpg"); loadimage(&img_bullet[1], "./images/bullet2.jpg"); loadimage(&img_enemy[0], "./images/enemy_1.jpg"); loadimage(&img_enemy[1], "./images/enemy_2.jpg"); //3,播放音乐 首先打开音乐,然后播放音乐 mciSendString("open ./images/game_music.mp3 alias BGM", 0, 0, 0); mciSendString("play BGM repeat", 0, 0, 0); //初始化玩家数据 player.height = 120; player.width = 117; player.x = WIN_WIDTH / 2 - player.width / 2; player.y = WIN_HEIGHT - player.height; player.flag = true; //初始化子弹 for (int i = 0; i < PLAYER_BULLET; i++) { pbull[i].flag = false; pbull[i].height = 24; pbull[i].width = 19; } //初始化时间变量 t1 = t2 = GetTickCount(); //初始化敌机 for (int i = 0; i < ENEMYPLANE_NUM; i++) { enemy[i].flag = false; enemy[i].width = 52; enemy[i].height = 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], SRCINVERT); } //绘制玩家子弹 for (int i = 0; i < PLAYER_BULLET; i++) { if (pbull[i].flag) { putimage(pbull[i].x, pbull[i].y, &img_bullet[0], NOTSRCERASE); putimage(pbull[i].x, pbull[i].y, &img_bullet[1], SRCINVERT); } } //绘制敌机 for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (enemy[i].flag) { putimage(enemy[i].x, enemy[i].y, &img_enemy[0], NOTSRCERASE); putimage(enemy[i].x, enemy[i].y, &img_enemy[1], SRCINVERT); } } EndBatchDraw();}//产生玩家子弹void CreatBullet(){ for (int i = 0; i < PLAYER_BULLET; i++) { if (!pbull[i].flag) { pbull[i].x = player.x+53; pbull[i].y = player.y; pbull[i].flag = true; break; } }}//生成敌机void CreateEnemy(){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (!enemy[i].flag) { enemy[i].x = rand() % (WIN_WIDTH - enemy[i].width); enemy[i].y =0; enemy[i].flag = true; break; } }}void EnemyMove(int speed){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (enemy[i].flag) { enemy[i].y += speed; if (enemy[i].y>WIN_HEIGHT) { enemy[i].flag = false; } } }}//操控飞机,开..void KeyControl(int speed){ //按键处理,用getch() //向上移动 边界处理 if(GetAsyncKeyState(VK_UP) && player.y>=0) { player.y -= speed; } //向下移动 if (GetAsyncKeyState(VK_DOWN) && player.y+player.height<=WIN_HEIGHT) { player.y += speed; } //向左移动 if (GetAsyncKeyState(VK_LEFT) && player.x+player.width/2>=0) { player.x -= speed; } //向右移动 if (GetAsyncKeyState(VK_RIGHT) && player.x+player.width/2<=WIN_WIDTH) { player.x += speed; } //发射子弹 if (GetAsyncKeyState(VK_SPACE) && t2-t1>200) { mciSendString("close gun", 0, 0, 0); mciSendString("open ./images/f_gun.mp3 alias gun", 0, 0, 0); mciSendString("play gun", 0, 0, 0); //产生一个子弹 CreatBullet(); t1 = t2; } t2 = GetTickCount();}//生成敌机void CreateEnemy(){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (!enemy[i].flag) { enemy[i].x = rand() % (WIN_WIDTH - enemy[i].width); enemy[i].y =0; enemy[i].flag = true; break; } }}void EnemyMove(int speed){ for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (enemy[i].flag) { enemy[i].y += speed; if (enemy[i].y>WIN_HEIGHT) { enemy[i].flag = false; } } }}
//玩家子弹的移动void BulletMove(int speed){ for (int i = 0; i < PLAYER_BULLET; i++) { if (pbull[i].flag) { pbull[i].y -= speed ; if (pbull[i].y < 0) { pbull[i].flag = false; } } }}//操控飞机,开..void KeyControl(int speed){ //按键处理,用getch() //向上移动 边界处理 if(GetAsyncKeyState(VK_UP) && player.y>=0) { player.y -= speed; } //向下移动 if (GetAsyncKeyState(VK_DOWN) && player.y+player.height<=WIN_HEIGHT) { player.y += speed; } //向左移动 if (GetAsyncKeyState(VK_LEFT) && player.x+player.width/2>=0) { player.x -= speed; } //向右移动 if (GetAsyncKeyState(VK_RIGHT) && player.x+player.width/2<=WIN_WIDTH) { player.x += speed; } //发射子弹 if (GetAsyncKeyState(VK_SPACE) && t2-t1>200) { mciSendString("close gun", 0, 0, 0); mciSendString("open ./images/f_gun.mp3 alias gun", 0, 0, 0); mciSendString("play gun", 0, 0, 0); //产生一个子弹 CreatBullet(); t1 = t2; } t2 = GetTickCount();}
//开始...void PlayPlane(){ //每个敌军和每个子弹都要比较 for (int i = 0; i < ENEMYPLANE_NUM; i++) { if (!enemy[i].flag) continue; //遍历子弹数组 for (int k = 0; k < PLAYER_BULLET; k++) { if (!pbull[k].flag) continue; //判断子弹是否击中敌机 if (pbull[k].x>enemy[i].x && pbull[k].xenemy[i].y && pbull[k].y
源码素材编译器图形库还有各种学习资料都在这里等你哦~https://jq.qq.com/?_wv=1027&k=ne3yBn5V
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/124024.html
摘要:黄金矿工是一款非常经典的游戏。在游戏中,玩家通过不断挖矿,获取金子,最终能够闯入下一关。游戏的玩法主要是通过不断采集地下的黄金和钻石,来得到更高的积分。 《黄金矿工》是一款非常经典的游戏。在游戏中,玩家通过不断挖矿,获取金子,最终能够闯入下一关。在这个过程中,会不断有岩石、烟雾、老...
摘要:中国象棋是中国一种流传十分广泛的游戏。宣布认输的一方算输。今天我就用语言带大家一步步去完成好玩有趣学会就能和朋友对弈的中国象棋小游戏。 中国象棋是中国一种流传十分广泛的游戏。 下棋双方根据自己对棋局形式的理解和对棋艺规律的掌握,调动车马,组织兵力,协调作战在棋盘这块特定的战场...
摘要:如果同级父元素不是层叠上下文元素就不需要看父元素的眼色了文章到这里就结束了,希望看完这篇文章的同学可以彻底理解。 今天写代码用antd-mobile的checkbox时候,想在内容文本后面添加一个icon,并且需要对这个icon绑定事件,发现绑定之后怎么也点不中,调试发现原来被层层嵌套的dom元素盖住了,肯定是z-index在作祟。可是按照我之前对z-index的了解(自信满满)却怎么...
摘要:如果同级父元素不是层叠上下文元素就不需要看父元素的眼色了文章到这里就结束了,希望看完这篇文章的同学可以彻底理解。 今天写代码用antd-mobile的checkbox时候,想在内容文本后面添加一个icon,并且需要对这个icon绑定事件,发现绑定之后怎么也点不中,调试发现原来被层层嵌套的dom元素盖住了,肯定是z-index在作祟。可是按照我之前对z-index的了解(自信满满)却怎么...
阅读 3560·2021-11-22 09:34
阅读 3167·2021-11-15 11:38
阅读 2862·2021-10-27 14:16
阅读 1189·2021-10-18 13:35
阅读 2395·2021-09-30 09:48
阅读 3353·2021-09-29 09:34
阅读 1521·2019-08-30 15:54
阅读 1786·2019-08-26 11:57