C++的学习心得和知识总结(十六)|基于EasyX实现小甲鱼Python飞机大战项目(C++版)
目录结构
注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:
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.0song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++ (master)
$ git branch
* mastersong@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++ (master)
$
这一版的代码的效果展示上有一个小问题:
1、敌机种类有三种
smallType、middleType、bigType
但是从上图可见,只有中敌机 和 大敌机两种,小敌机一直都没有出现。后来再次分析全部代码之后,已发现问题所在:
- 敌机的初始状态:
// C++\ConsoleApplication1\main.cpp// 初始化 4 个敌机(大中小 三种),并设置初始状态int enemyNum = 4;vector<Enemys>enemys(enemyNum);
- 后续击中,判断敌机被击毁(这里判断血量为0,设置存活状态为假):
// C++\ConsoleApplication1\game.cppvoid 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.1song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++/ConsoleApplication1 (master)
$ git tag
v1.0
v1.1song@LAPTOP-1UOL3Q59 MINGW64 /e/postgresql 12/my-html-study/C++/ConsoleApplication1 (master)
$
注:本项目并非是完全版的,后续还可以做很多事情 鉴于本人身体状况,暂时就写到这里了 有兴趣的小伙伴们可以自行clone,有疑问可以在本文评论区留言
C++的学习心得和知识总结(十六)|基于EasyX实现小甲鱼Python飞机大战项目(C++版)相关推荐
- PostgreSQL的学习心得和知识总结(六十四)|关于PostgreSQL数据库 图式搜索(graph search)及递归查询 的场景说明
目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<PostgreSQL数据库内核分析> 2.参考书籍:<数据库事务处理的艺术:事务管理与并发 ...
- Oracle的学习心得和知识总结(六)|Oracle数据库同义词技术详解
目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<Oracle Database SQL Language Reference> 2.参考书籍:& ...
- PostgreSQL的学习心得和知识总结(六十三)|详解PostgreSQL数据库 ANY/SOMEALL 的使用及原理
目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<PostgreSQL数据库内核分析> 2.参考书籍:<数据库事务处理的艺术:事务管理与并发 ...
- C++的学习心得和知识总结(十八)|基于EasyX实现 2048游戏 项目(C/C++版)
目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.网络热门游戏 2048,点击前往 2.EasyX官方链接,点击前往 3.中国色谱 颜色代码对照表(RGB多用于easyX ...
- 美学心得(第二百四十六集) 罗国正
美学心得(第二百四十六集) 罗国正 (2023年3月) 3046.清朝画家董棨,是浙江秀水(今浙江嘉兴市)人.他的主要美学观点如下: 1.绘画可把"家贫境苦"变得"陶然自 ...
- Linux性能优化实战学习笔记:第四十六讲=====实战分析
Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...
- 深度学习之图像分类(二十六)-- ConvMixer 网络详解
深度学习之图像分类(二十六)ConvMixer 网络详解 目录 深度学习之图像分类(二十六)ConvMixer 网络详解 1. 前言 2. A Simple Model: ConvMixer 2.1 ...
- LINUX学习基础篇(二十六)swap分区
LINUX学习基础篇(二十六)swap分区 swap分区 查看swap分区大小 分配swap分区 格式化swap分区 增加swap分区 swap分区 Linux中的swap分区相当于Windows中的 ...
- 电脑高手应用技巧荟萃(电脑知识二十六)
电脑高手应用技巧荟萃(电脑知识二十六) 2010年12月07日 ★"锁定计算机"快捷方式 我想在桌面上创建一个"锁定计算机"的快捷方式,请问应该如何实现呢? 首 ...
最新文章
- 腾讯云TDSQL-A发布公有云版本 支持第七次全国人口普查等海量数据场景
- iOS响应事件传递, nextResponder研究
- STL删除元素注意事项
- python库(包)查找网站
- javascript --- [代码优化]将复杂的函数分解写异步请求数据的同步写法
- emqx使用webhook数据持久化到mysql
- conceptd什么时候上市_阳山水蜜桃多少钱一斤?什么时候成熟上市?
- mysql 主键外键sql_SQL外键VS主键说明了MySQL语法示例
- python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法
- 浅议磁盘分区——从MBR到GPT
- Xftp6的安装与使用
- 一卡通管理系统总体设计
- 工程图字体宋体仿宋_设计干货来了!最热门的宋体字要如何设计搭配?
- 树莓派如何刷RetroPie,制作一个复古游戏机
- Python基础知识点回顾
- Python计算时间差天数
- 黑科技计算机玩游戏,别再嘲笑苹果电脑玩不了游戏!有了这项黑科技后比台式机还猛...
- 高并发的核心技术-幂等的实现方案
- 【前端小点】CSS之background背景属性详解
- iOS 第三方框架-Masonry介绍与使用实践
热门文章
- scikit-learn工具包中分类模型predict_proba、predict、decision_function用法详解
- Linux根目录各个文件夹介绍及说明
- 补码和原码的转化过程
- python朴素贝叶斯分类示例_Python实现的朴素贝叶斯分类器示例
- 公路村村通 (30分)【C语言】Prim算法 和 Kruskal算法
- win7计算机所有软件无法运行程序,解决win7电脑程序打不开方法
- 【QTdesigner】课时52.绘制各种图形(paintEevnt()))【pyqt5+QTdesigner模式】
- 学习模式上的记录之统计篇三 置换检验 Permutation Test
- SAP SD 销售合同或者销售订单审批流搭建(状态管理)
- TC397开发板KIT_A2G_TC397_5V_TFT简介