目录结构
注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:
1、小甲鱼Python项目 – 飞机大战
2、本文使用的掩码图生成工具 自动生成遮罩图的程序,点击前往
3、EasyX官方链接,点击前往
4、中国色谱 颜色代码对照表(RGB多用于easyX中),点击前往
C++实现飞机大战
- 本人博客严正声明
- 文章快速说明索引
- EasyX免费绘图库
- 素材的掩码图制作
- 博客内部动图制作
- 飞机大战项目开发
- 初步效果展示
- 优化代码逻辑
- 打印模块增加

本人博客严正声明
一、专栏收费声明:
是这样的,熟悉在下的小伙伴们都知道 我写博客主要目的就是分享和学习总结。至于CSDN的排名 排名什么的,我并不是很在意!
- 一来 很不喜欢标题党
- 二来 更反感灌些水文
- 三来 痛恨无下限抄袭
本人博客都是认认真真写的,结果在CSDN并没有什么的太大的名气 关注度什么的也不高!前些天 一位好心的粉丝私聊了在下,反而一名某平台的哥们儿 快把我的《PostgreSQL的学习心得和知识总结》都给照搬过去了,甚至一个字都不改(连同在下 都是只字不提 好歹稍微提一下呀)!!!
实在是太过分,后来经过(友好)协商,现已经全部删除了!
本人是做PostgreSQL内核开发的,深感当下学风不正 大家都很浮躁,一向踏踏实实深耕的并不是很多!因为写代码这件事情上,欺骗不了任何人!本本分分老老实实地写好代码做好学问十分不易,容不得掺沙子和造假!这里把我喜欢的一句话送给各位以共勉:
非淡泊无以明志,
非宁静无以致远!
二、项目开源声明:
现在设置收费的专栏有这么两个:
说实话,我其实不太喜欢搞这些门槛!一来不方便,二来有违我的初衷,设置专栏的目的只有一个:防小人而不防君子!
至于一些小项目,我都放在了本人的gitee仓库里面,有需要自行去取 有什么疑问的,可以在博客的评论区进行留言!
文章快速说明索引
学习目标:
背景:前一段时间,偶然间听到一个将要从事于 C/C++后台开发 的小伙伴的抱怨。了解之后,ta看上的是小甲鱼的这个Python项目(飞机大战),可是ta自己对Python一知半解。后来在下看了这个项目之后,觉得也很有意思 网上倒是有C语言版的实现,思忖再三 想着自己使用C++来实现这个项目。也正好捡起来已经好长时间都没有使用的C++了,下面是这个项目的背景介绍和注意事项 希望可以帮到有需要的其他小伙伴们!
学习内容:(详见目录)
1、基于EasyX实现小甲鱼Python飞机大战项目(C++版)
学习时间:
2021年08月8日 12:53:33
学习产出:
1、飞机大战项目
2、CSDN 技术博客 1篇
EasyX免费绘图库
EasyX官方链接,点击前往
EasyX 是什么
EasyX Graphics Library 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2019,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。
超简单的 EasyX
“下载 -> 安装 -> 使用”,全过程不超过一分钟。具体安装步骤请参考 EasyX 安装教程,点击前往
学习 & 使用
在线参考手册地址,点击前往
生成 & 发布
EasyX 采用静态编译,不依赖任何 dll,同传统程序的发布方式没有区别,程序不会因为引入 EasyX 而增添任何发布负担。静态链接的 EasyX,会使编译后的 exe 体积增加 70KB 左右。对于绝大多数应用而言,增加的体积是可以忽略的。若将 Visual C++ 的运行时库改为静态链接模式,编译后的 exe 可以单文件运行。
素材的掩码图制作
关于掩码图的制作,网上有很多办法:
- ps (但是在下不会使用,这里就不详谈)
- png2bmp&mask.exe 工具,本文的掩码图都是用的这个工具制作,链接上面有
博客内部动图制作
所使用的工具是ScreenToGif,安装使用教程请见本人之前的博客:
CSDN博客专用动态图小程序的推荐—ScreentoGIF教程,点击前往
飞机大战项目开发
初步效果展示
这一版的代码,我放在了 v1.0,点击前往
song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++ (master)
$ git tag
v1.0
song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++ (master)
$ git branch
* master
song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++ (master)
$
这一版的代码的效果展示上有一个小问题:
1、敌机种类有三种
smallType、middleType、bigType
但是从上图可见,只有中敌机 和 大敌机两种,小敌机一直都没有出现。后来再次分析全部代码之后,已发现问题所在:
- 敌机的初始状态:
// C++ConsoleApplication1main.cpp
// 初始化 4 个敌机(大中小 三种),并设置初始状态
int enemyNum = 4;
vector<Enemys>enemys(enemyNum);
- 后续击中,判断敌机被击毁(这里判断血量为0,设置存活状态为假):
// C++ConsoleApplication1game.cpp
void SuccessfullyHit(vector<Enemys>& enemy, vector<Bullets>& bullet)
{
...
// 子弹已经进入敌机的内部
if (it1->getX() >= it->getX() && it1->getX() <= it->getX() + it->getWidth()
&& it1->getY() >= it->getY() && it1->getY() <= it->getY() + it->getHeight())
{
it1->setStatus(false);
it->modifyBloodVolume();
if (it->getBloodVolume() == 0)
{
it->setStatus(false);
}
}
...
}
- 产生敌机的时候(敌机的类型是不变的):
/*
* 敌机的产生
*/
void enemyCreate(vector<Enemys>& enemy)
{
// srand((unsigned)time(nullptr));
for (vector<Enemys>::iterator it = enemy.begin(); it != enemy.end(); ++it)
{
if (!(it->getStatus()))
{
it->setStatus(true);
it->setX(rand() % (WIDOWWIDTH - it->getWidth()));
it->setY(0);
if (it->getType() == EnemyType::smallType)
{
it->recoverBloodVolume(1);
}
else if (it->getType() == EnemyType::middleType)
{
it->recoverBloodVolume(2);
}
else
{
it->recoverBloodVolume(4);
}
break;
}
}
}
所以 这里的原因是:敌机一旦产生之后,其类型就没有变了。一旦随机数失效(不够随机),就会出现上述的情形
优化代码逻辑
上面的敌机类型是一成不变的,这个是不合理的,经过细微的修正如下:
song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++/ConsoleApplication1 (master)
$ git tag -a v1.1 -m "my version 1.1"
song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++/ConsoleApplication1 (master)
$ git push origin --tags
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 171 bytes | 171.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.0]
To https://gitee.com/lucky912_admin/my-html-study.git
* [new tag] v1.1 -> v1.1
song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++/ConsoleApplication1 (master)
$ git tag
v1.0
v1.1
song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++/ConsoleApplication1 (master)
$
注:本项目并非是完全版的,后续还可以做很多事情 鉴于本人身体状况,暂时就写到这里了 有兴趣的小伙伴们可以自行clone,有疑问可以在本文评论区留言 ????
打印模块增加
2021年08月22日 11:28:56
最新代码,已经增加了分数打印 和 玩法打印模块,演示如下:
最后
以上就是害怕音响最近收集整理的关于C++的学习心得和知识总结(十六)|基于EasyX实现小甲鱼Python飞机大战项目(C++版)本人博客严正声明文章快速说明索引EasyX免费绘图库素材的掩码图制作博客内部动图制作飞机大战项目开发的全部内容,更多相关C++内容请搜索靠谱客的其他文章。
发表评论 取消回复