目录结构


注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:

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

但是从上图可见,只有中敌机 和 大敌机两种,小敌机一直都没有出现。后来再次分析全部代码之后,已发现问题所在:

  1. 敌机的初始状态:
// C++\ConsoleApplication1\main.cpp// 初始化 4 个敌机(大中小 三种),并设置初始状态int enemyNum = 4;vector<Enemys>enemys(enemyNum);
  1. 后续击中,判断敌机被击毁(这里判断血量为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);}}...
}
  1. 产生敌机的时候(敌机的类型是不变的):
/*
* 敌机的产生
*/
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++版)相关推荐

  1. PostgreSQL的学习心得和知识总结(六十四)|关于PostgreSQL数据库 图式搜索(graph search)及递归查询 的场景说明

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<PostgreSQL数据库内核分析> 2.参考书籍:<数据库事务处理的艺术:事务管理与并发 ...

  2. Oracle的学习心得和知识总结(六)|Oracle数据库同义词技术详解

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<Oracle Database SQL Language Reference> 2.参考书籍:& ...

  3. PostgreSQL的学习心得和知识总结(六十三)|详解PostgreSQL数据库 ANY/SOMEALL 的使用及原理

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<PostgreSQL数据库内核分析> 2.参考书籍:<数据库事务处理的艺术:事务管理与并发 ...

  4. C++的学习心得和知识总结(十八)|基于EasyX实现 2048游戏 项目(C/C++版)

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.网络热门游戏 2048,点击前往 2.EasyX官方链接,点击前往 3.中国色谱 颜色代码对照表(RGB多用于easyX ...

  5. 美学心得(第二百四十六集) 罗国正

    美学心得(第二百四十六集) 罗国正 (2023年3月) 3046.清朝画家董棨,是浙江秀水(今浙江嘉兴市)人.他的主要美学观点如下: 1.绘画可把"家贫境苦"变得"陶然自 ...

  6. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  7. 深度学习之图像分类(二十六)-- ConvMixer 网络详解

    深度学习之图像分类(二十六)ConvMixer 网络详解 目录 深度学习之图像分类(二十六)ConvMixer 网络详解 1. 前言 2. A Simple Model: ConvMixer 2.1 ...

  8. LINUX学习基础篇(二十六)swap分区

    LINUX学习基础篇(二十六)swap分区 swap分区 查看swap分区大小 分配swap分区 格式化swap分区 增加swap分区 swap分区 Linux中的swap分区相当于Windows中的 ...

  9. 电脑高手应用技巧荟萃(电脑知识二十六)

    电脑高手应用技巧荟萃(电脑知识二十六) 2010年12月07日 ★"锁定计算机"快捷方式 我想在桌面上创建一个"锁定计算机"的快捷方式,请问应该如何实现呢? 首 ...

最新文章

  1. 腾讯云TDSQL-A发布公有云版本 支持第七次全国人口普查等海量数据场景
  2. iOS响应事件传递, nextResponder研究
  3. STL删除元素注意事项
  4. python库(包)查找网站
  5. javascript --- [代码优化]将复杂的函数分解写异步请求数据的同步写法
  6. emqx使用webhook数据持久化到mysql
  7. conceptd什么时候上市_阳山水蜜桃多少钱一斤?什么时候成熟上市?
  8. mysql 主键外键sql_SQL外键VS主键说明了MySQL语法示例
  9. python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法
  10. 浅议磁盘分区——从MBR到GPT
  11. Xftp6的安装与使用
  12. 一卡通管理系统总体设计
  13. 工程图字体宋体仿宋_设计干货来了!最热门的宋体字要如何设计搭配?
  14. 树莓派如何刷RetroPie,制作一个复古游戏机
  15. Python基础知识点回顾
  16. Python计算时间差天数
  17. 黑科技计算机玩游戏,别再嘲笑苹果电脑玩不了游戏!有了这项黑科技后比台式机还猛...
  18. 高并发的核心技术-幂等的实现方案
  19. 【前端小点】CSS之background背景属性详解
  20. iOS 第三方框架-Masonry介绍与使用实践

热门文章

  1. scikit-learn工具包中分类模型predict_proba、predict、decision_function用法详解
  2. Linux根目录各个文件夹介绍及说明
  3. 补码和原码的转化过程
  4. python朴素贝叶斯分类示例_Python实现的朴素贝叶斯分类器示例
  5. 公路村村通 (30分)【C语言】Prim算法 和 Kruskal算法
  6. win7计算机所有软件无法运行程序,解决win7电脑程序打不开方法
  7. 【QTdesigner】课时52.绘制各种图形(paintEevnt()))【pyqt5+QTdesigner模式】
  8. 学习模式上的记录之统计篇三 置换检验 Permutation Test
  9. SAP SD 销售合同或者销售订单审批流搭建(状态管理)
  10. TC397开发板KIT_A2G_TC397_5V_TFT简介