IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 飞机大战c语言 -> 正文阅读

[C++知识库]飞机大战c语言

飞机大战c语言、简单小游戏

概述

项目:飞机大战
主要功能有以下几点:飞机发射子弹,击中敌机敌机血量减少,敌机与飞机碰撞飞机血量减少,击中敌机分数增加,到达一定分数进入下一个关卡,直到通关或游戏结束。

注意:此项目用VS2019编译运行,比Dev c++更适合用来写大项目,方便实时报错更改错误。所以有些函数、定义方式、文件读取方式有所不一样,包括图形库的使用,需要安装Easyx(Dev c++使用的是EGE 图形库)

关卡设置

本次飞机大战游戏中共设置了三个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关背景切换,在原有的基础上子弹数量增加;第三关在第二关的基础上子弹数量增加,新出现了大血量boss,当大boss被消灭后通关成功。

敌机设置

敌机随机出现,当敌机与战机相撞或被战机的子弹击中时,小敌机消失。小boss需要子弹击中两次才会消失,当小敌机与战机相撞失去1滴血,小boss与战机相撞失去2滴血,若战机在敌机的正下方时,战机也会掉血量。大boss上方都有血量显示,当血条消失时意味着生命消失,大boss。小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。大boss则在屏幕中固定不动,并发射子弹,直至血量为0消失。

战机设置

战机初始有10条生命,所获得的积分以及其生命值都在窗口的左上角显示。在第一关时,按空格键战机会出现一个向上发射的子弹,到第二关的时候,按空格键战机会发射两个向上的子弹,到第三关发射三颗子弹,当战机被敌方的炮弹击中或与敌方相撞时,血量减少。

游戏设置

进入游戏时,会有背景音乐,窗口左上角显示战机所得积分及其生命值。根据积分情况进入不同的关卡,切换不同的背景。当战机生命值为0时,游戏失败,屏幕显示游戏结束。

相关技术

双缓冲技术

在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样即可解决图片闪烁问题。
本程序在绘制滚动背景以及飞机,敌机等中用到了BeginBatchDraw()函数,用于批量绘图。FlushBatchDraw()用于执行未完成的绘制任务,EndBatchDraw()函数用于结束批量绘制,并执行未完成的绘制任务。

流程图

通过流程图我们能更好地理清写代码的思路
在这里插入图片描述

主要功能模块

在这里插入图片描痛述

代码实现

头文件

在这里插入图片描述

定义变量

在这里插入图片描述
在这里插入图片描述

主函数

在这里插入图片描述

游戏初始化

首先把BGM和图片加载出来
注意播放音乐和加载图片都有固定的格式

播放影月
然后设计游戏界面
把整个游戏界面当作是以左上角为(0,0)的坐标原点,x对应width,y对应height
自定义飞机、敌机和子弹出现的位置
注意调整子弹与战机位置,要尽量对齐
在这里插入图片描述

在这里插入图片描述
flag为false表示已不存活(子弹消失,敌机消失),初始化都为false
开始界面可以用Easyx图形库的文字函数显示各种字体颜色和大小,为了省事我这里直接用自己ps过的图片~

在这里插入图片描述

在这里插入图片描述

创建敌机和boss

在这里插入图片描述

创建大boss和战机的子弹

在这里插入图片描述

创建大boss子弹和战机子弹移动速度

在这里插入图片描述

设置移动速度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

遇到的主要问题以及改进

1、无法无限产生敌机和子弹及解决方案
在运行时发现子弹很快就用尽,敌机后面也不出现了,查找资料以后发现可以使用GetTickCount函数来返回操作系统启动到当前所经过的毫秒数,原型是DWORD,再通过产生随机数来调用CreateEnemy和Createbullet来产生敌机和子弹,这样数量就不会受到限制了。

2、 图片闪烁问题及解决方案
在运行过程中发现无论是战机敌机等还是背景都产生剧烈的闪烁问题,非常晃眼,不知道该如何解决。后来上网查找资料,知道利用双缓冲技术可解决图片闪烁问题。然后仔细研究用法,最后成功将该问题解决。

3、无法读取音乐和图片文件及解决方案
在Dev C++和VS2019尝试了不同的表示方法,无法加载的主要原因还是文件路径不对,之前一直用/来读取文件路径,尝试了很久发现并不可行,通过向别人提问被指出应该用双反斜杠\ ,查找资料后发现写成单独的\的是windows的标准形式,而写成\才是程序语言中用到的形式。
4、不足与改进
1.原本想实现三个关卡对应三个BGM,但出现问题没有找到解决的办法
2.加载了飞机爆炸的效果,出现闪烁,没有实现爆炸效果
3.游戏无法存档,读档
4.没有用数据结构的知识
5.关卡设置简单,没有加血道具/放大招
6.最后的敌机无法设置左右来回移动发射子弹

接下来将通过数据结构知识改编代码

下面附上源代码的百度网盘链接:
https://pan.baidu.com/doc/share/Rrf8gIAwx8YZaEwcq7Ig-25057923021041
提取码:23u1

图片和音乐素材到我的资源里下载~

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:05:17  更:2021-07-16 11:06:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 10:14:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码