C/C++游戏项目教程:《雷霆战机》

news/2024/11/16 18:27:53/

《雷霆战机》是以太空科幻世界观,12星座关卡模式和弹幕联袂上演掌上“星球大战”。百种战机,千种弹幕,酷炫装备,强劲暴走,演绎别样星海激情。在继承了经典飞行射击游戏爽快体验的同时,更添加了革命性的创新玩法,引爆了全世界玩家的打飞机热情!

雷霆战机

我们今天就来模仿《雷霆战机》创造出属于我们自己的飞机大战

直接开始吧

首先定义飞机和子弹结构体

//1.定义数据
#define		WIDTH	591
#define		HEIGHT  864
IMAGE		backimg;  //定义背景数据
bool		isplay;	  //定义音乐数据//定义自己的飞机
struct Plane {int		x, y;		//坐标int		w, h;		//图片的宽度 和 高度bool	isExist;    //是否存在IMAGE   img[2];     //图片
}myplane;//子弹
IMAGE bimg[2];
struct Bullet {int		x, y;bool	isExist;    //是否存在
}bullet[15];			//10个IMAGE eimg[2];
unsigned long t1, t2;
struct Enemy {int		x, y;bool	isExist;    //是否存在int     vy;         //速度
}enemy[15];			//10个

游戏进行初始化

//2.初始化
void GameInit() {//加载图片loadimage(&backimg, "images/background.jpg", WIDTH, HEIGHT);//播放背景音乐mciSendString("open images/backmusic.mp3",0,0,0);mciSendString("play images/backmusic.mp3", 0, 0, 0);isplay = true; //正在播放//初始化自己的飞机myplane.w = 94;myplane.h = 107;loadimage(&myplane.img[0], "images/plane0.jpg");loadimage(&myplane.img[1], "images/plane1.jpg");myplane.x = (WIDTH- myplane.w)/2;myplane.y = HEIGHT - myplane.h;myplane.isExist = true;//初始化自己的子弹 9 21loadimage(&bimg[0], "images/bullet0.jpg");loadimage(&bimg[1], "images/bullet1.jpg");for (int i = 0; i < 15; i++)bullet[i].isExist = false;loadimage(&eimg[0], "images/enemy0.jpg");loadimage(&eimg[1], "images/enemy1.jpg");for (int i = 0; i < 15; i++){enemy[i].isExist = false;if (rand() % 2 == 0)enemy[i].vy = 1;else enemy[i].vy = 2;}t1 = GetTickCount();
} 

绘制游戏背景

//3.绘制
void GameDraw() {BeginBatchDraw();//绘制背景图片putimage(0, 0, &backimg);//绘制自己的飞机if (myplane.isExist) {  //如果自己的飞机是存在的putimage(myplane.x, myplane.y, &myplane.img[0], SRCPAINT);putimage(myplane.x, myplane.y, &myplane.img[1], SRCAND);}//绘制自己的子弹for (int i = 0; i < 15; i++) {if (bullet[i].isExist) { //存在的子弹putimage(bullet[i].x, bullet[i].y, &bimg[0], SRCPAINT);putimage(bullet[i].x, bullet[i].y, &bimg[1], SRCAND);}}for (int i = 0; i < 15; i++) {if (enemy[i].isExist) { //存在的子弹putimage(enemy[i].x, enemy[i].y, &eimg[0], SRCPAINT);putimage(enemy[i].x, enemy[i].y, &eimg[1], SRCAND);}}EndBatchDraw();
}

游戏数据的更新

//4.数据的更新
void GameUpdate() {//非阻塞的 丝滑的if (GetAsyncKeyState(VK_UP)) myplane.y--;if (GetAsyncKeyState(VK_DOWN)) myplane.y++;if (GetAsyncKeyState(VK_LEFT)) myplane.x--;if (GetAsyncKeyState(VK_RIGHT)) myplane.x++;//按下某一个键的时候char key=' ';if (_kbhit()) {		 //检测按键key = _getch();  //接收按键 if (key == '1'){if(isplay)mciSendString("pause images/backmusic.mp3", 0, 0, 0);elsemciSendString("play images/backmusic.mp3", 0, 0, 0);isplay = !isplay;}else if (key == 32)  //空格产生一个子弹{PlaySound("images/shoot.wav", NULL, SND_ASYNC | SND_FILENAME);for (int i = 0; i < 15; i++) {if (!bullet[i].isExist) //找到一个不存在的 100 50{bullet[i].x = myplane.x + (myplane.w - 9) / 2; //自己的飞机bullet[i].y = myplane.y - 21;bullet[i].isExist = true;break;}}}}//子弹自己移动for (int i = 0; i < 15; i++) {if (bullet[i].isExist){bullet[i].y -= 2;if (bullet[i].y < 0) //飞出去bullet[i].isExist = false;}}for (int i = 0; i < 15; i++) {if (enemy[i].isExist){enemy[i].y += enemy[i].vy;if (enemy[i].y > HEIGHT) //飞出去enemy[i].isExist = false;}}t2 = GetTickCount();if (t2 - t1 > 500){//产生一个敌机for (int i = 0; i < 15; i++)if (!enemy[i].isExist) //找到一个不存在的 100 50{enemy[i].x = rand()%(HEIGHT-46); //自己的飞机enemy[i].y = -33;enemy[i].isExist = true;break;}t1 = t2;}//子弹碰撞敌机  子弹消失  敌机消失//数组   敌机for (int i = 0; i < 15; i++)  //遍历子弹{if (bullet[i].isExist) {  //找到存在的子弹for (int j = 0; j < 15; j++)  //遍历敌机{if (enemy[j].isExist) {if (bullet[i].x+9>=enemy[j].x&&bullet[i].x<= enemy[j].x+46&&bullet[i].y + 21 >= enemy[j].y&&bullet[i].y <= enemy[j].y+33)  //判断子弹和敌机有没有发生碰撞{bullet[i].isExist = false;enemy[j].isExist = false;}}}}}
}

最后用主函数进行调用

int main(){initgraph(WIDTH, HEIGHT);GameInit();  //初始化数据//游戏的过程while (1){GameDraw();  //不断绘制界面GameUpdate(); //数据也是不断更新Sleep(2);}return 0;
}

这样我们自己的《雷霆战机》就完成了。快去自己动手尝试一下叭!!!

有什么问题可以回帖留言,我尽量回答。想要C/C++学习资料以及其他项目的源码的可以加群【1083227756】了解。想要对程序员的未来发展有兴趣的也可加群闲聊。也可以关注微信公众号:【狐狸的编码时光】,希望和大家一起学习进步!!!

点击下方链接更快拿到学习资料以及项目源码


https://jq.qq.com/?_wv=1027&k=JLh5Pqgchttps://jq.qq.com/?_wv=1027&k=JLh5Pqgchttps://jq.qq.com/?_wv=1027&k=JLh5Pqgc

点击下方链接观看视频详细讲解 

https://www.bilibili.com/video/BV19m4y1S7m3/icon-default.png?t=LBL2https://www.bilibili.com/video/BV19m4y1S7m3/

 


http://www.ppmy.cn/news/892756.html

相关文章

carx2服务器维护不足什么问题,carx2赛车漂移

carx2赛车漂移玩起来手感超级棒,漂移的时候感觉非常刺激,地图蛮大的赛道外那些跑道好玩,地图数量不怎么多,而且大部分都要金币!我存了20多万,然后买新车,改装也花了很多钱! carx2赛车漂移介绍 很喜爱carx2赛车漂移这款游戏。最先,重中之重,把自动刹车关掉,或是降低,…

Unity3D教程:赛车漂移算法

漂移的解决方案。 方案1.整个赛车干脆都用translate做坐标移动&#xff0c;这个就是无视wheelcollider物理引擎的做法&#xff0c;新手适用&#xff0c;简单方便&#xff0c;但之后的开发上会有很多问题需要解决&#xff08;如果你想解决这些问题的话&#xff09;。 方案2.用…

疯狂的赛车下载

剧情简介 黄渤饰演的自行车车手耿浩&#xff0c;因为0.01秒落败&#xff0c;成为银牌车手&#xff0c;这是一条线&#xff1b;第二条线是大贼二贼&#xff0c;他们阴差阳错成了贼&#xff0c;最后还绑票伤人&#xff1b;第三条线是台湾来的黑帮四人组&#xff0c;他们意图在内…

Unity3D赛车游戏+脚本基础

前言 游戏对象实例化 Scenes游戏场景 GameObject游戏对象 Component组件 Component使用方法 预制体 Unity事件函数 Instantiate():实例化对象 什么是Time.deltaTime Transform的移动&#xff0c;旋转和缩放 实战:赛车游戏 运行演示 具体步骤 游戏打包流程 前言 …

控制台版 赛车游戏

视频&#xff1a;https://www.bilibili.com/video/BV14z4y1r7wX?p4&t717 代码&#xff1a;https://github.com/OneLoneCoder/videos/blob/master/OneLoneCoder_RetroArcadeRacer.cpp 目录 一、预览图 二、代码过程 三、完整代码 一、预览图 左图是做出来的效果&#xff…

html实现经典赛车小游戏

文章目录 1.设计来源1.1 主界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/130580123 html实现经典赛车小游戏源码 html实现经典赛车小游戏源码&#xff0c;1.通过键盘…

jQuery——赛车小游戏

效果分析: 效果展示: html代码如下: css代码: * {margin: 0;padding: 0; }/*父容器*/ .car_box {width: 50%;height: 100%;background: whitesmoke;position: absolute;left: 25%;border-left: 5px solid white;border-right: 5px solid white;box-shadow: 0px 0px 10px black…

818. 赛车

你的赛车起始停留在位置 0&#xff0c;速度为 1&#xff0c;正行驶在一个无限长的数轴上。&#xff08;车也可以向负数方向行驶。&#xff09; 你的车会根据一系列由 A&#xff08;加速&#xff09;和 R&#xff08;倒车&#xff09;组成的指令进行自动驾驶 。 当车得到指令 …