首页 » C++

C++实战项目:坦克大战(十)

       上一篇中我们已经得到了一个比较完善的游戏,不过有人反馈说目前的难度较大,第三关已经很难通过了。今天我们来做点小的修改。  如果你认为我们要通过调整参数降低游戏的难度,那你就错了。作为游戏的开发者,我们最大的优势就是拥有上帝视角,可以随意让游戏按照我们的要求变化。  添加奖励  目前的三滴血不太够用,我们添加一个功能,每得到500分就另外获得一滴血。实现起来很简单,只需要在计算分数的时候修改就好阅读全文 »

2017年3月20日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

C++实战项目:坦克大战(九)

       现在我们的游戏已经初具规模,但如果主战坦克一直是无敌状态那也很无趣。今天我们来让敌人的炮火发挥作用。  主战坦克被击中  当敌人的炮弹和主战坦克接触时,主战坦克生命值减一。我们预设的主战坦克共有三条命,被击中三次后游戏结束。  为主战坦克添加碰撞检测大家应该很熟悉,修改之前的CheckCrash()函数如下:...阅读全文 »

2017年3月15日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(八)

       上一篇中设计出了关卡和分数,但每新开始一个新的关卡时没有任何提示信息,这样略显突兀。我们需要在每一个关卡开始之前给出一个提示信息,同时让玩家有休息的时间。 绘制提示信息 我们要在Battle区域中,显示一个矩形,中间打印关卡号。效果如下:  实现起来也很容易,在Graphic类中添加一个ShowGameLevel函数:...阅读全文 »

2017年3月13日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(七)

       目前我们的主战坦克已经能够开炮击毁敌人坦克了,但敌人坦克不会开炮貌似比较欺负人。今天我们让敌人坦克也拥有开炮功能。同时,我们要为游戏设定关卡,让它变得好玩起来。  让敌人坦克开炮  在EnemyTank类中,添加Shoot函数几乎和MainTank中完全相同,... 这里唯一的区别是最后一句话,我们对m_bNeedShoot属性进行了赋值。敌人坦克和主战坦克最大的区别在于自动开炮,它不像主战坦克那阅读全文 »

2017年3月8日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(六)

       上一篇中,我们的主战坦克发出的炮弹还没有实际的作用,今天我们就让它拥有击毁敌军坦克的功能。  新增基础API  Rect类  在Rect类中,我们添加下面两个新接口。 ... 这两个函数的作用是返回矩形右上角和左下角的两个点。这样方便我们在计算炮弹是否击中坦克时使用。阅读全文 »

2017年3月6日
作者:鸡啄米 分类:软件开发 浏览: 评论:2

C/C++产生随机数的方法

       c库伪随机数发生器  rand  srand  大多时候用时间产生随机发生器的seed c++11 引入的伪随机数发生器.随机数抽象成随机数引擎和分布两部分.引擎用来产生随机数,分布产生特定分布的随机数 常用的就是线性均匀分布 uniform_int_distribution uniform_real_distribution阅读全文 »

2017年2月17日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(五)

       上一篇中我们给主战坦克添加了发射炮弹的功能。不过有一个问题,炮弹飞到战场边缘时,自动消失的感觉不太好。我们今天来给炮弹加上一个爆炸的效果。  爆炸功能  爆炸的效果不仅仅用在炮弹上,当坦克被击中后也应该有这么一个爆炸效果。我们给所有的元素都抽象一个爆炸的功能,放在Object类中。阅读全文 »

2017年1月4日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

C++实战项目:坦克大战(四)

       上一篇中,我们添加了可以自动行驶的敌人坦克,今天我们给主战坦克添加最核心的功能——开炮。  第一次重构  既然要开炮,就要有炮弹。我们自然就想到要新建一个炮弹类。为了符合我们之前的设计思想,我们需要给这个新的炮弹类找一个基类。用Tank类作基类貌似不太合适,于是,我们要重构代码。  我们创建一个全新的Object类作为今后程序中所有类的基类。阅读全文 »

2016年12月30日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

C++实战项目:坦克大战(三)

       战场范围  之前我们的坦克从战场的一边走出之后会从另一边重新进入战场。这样不符合我们游戏的定义。我们需要把它们改成遇到战场边就不能再继续向前走了。  主战坦克  修改MainTank.cpp中的Move方法...阅读全文 »

2016年12月27日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(二)

       这一篇中,我们继续继续进行我们的坦克大战。 位置信息数据结构  在游戏设计过程中,需要记录大量的位置信息,如果仅仅使用(x,y)坐标很容易出错。这一篇中,我们先定义两个简单的数据结构用来保存点和矩形的信息。 在项目中新建Model目录,创建下面四个文件:... 这个头文件创建了一个Point类,有两个成员变量m_x,m_y用来记录一个点的横、纵坐标。阅读全文 »

2016年12月13日
作者:鸡啄米 分类:软件开发 浏览: 评论:3

C++实战项目:坦克大战(一)

       对坦克大战情有独钟是因为大学时候第一次参加程序设计比赛就做的这个游戏。当时用的语言是Java,那个比赛让我悟出了面向对象的强大之处,我也是从那时开始接触设计模式的。对我而言,坦克大战有着非同寻常的意义,所以一定要带大家用C++实现一下。 知识准备 建议大家先看看面向对象编程的三个重要特性,之后再来学习后面的内容。 代码分享 这个项目中的代码会在GitHub上发布,里面的每一个分支对应着简书中的每阅读全文 »

2016年12月7日
作者:鸡啄米 分类:软件开发 浏览: 评论:5

编程语言间的战争

       1 桌面时代  古老的C 王国从1972诞生以后, 一直都非常强大, 这里的臣民对它又爱又恨, 因为它的法律允许它的臣民直接操作内存,执行效率极高, 但是又对内存分配回收不管不顾,全部扔给子民们去处理。  其实纯粹的C语言还是比较简单的, 只要你能真正的搞懂指针是怎么回事 , C++诞生以后,在C的基础上又加入了面向对象, 泛型编程等“时髦”概念阅读全文 »

2016年9月28日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C/C++面试中碰到这种字符串指针的题你能得几分

       许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到 strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。阅读全文 »

2016年9月27日
作者:鸡啄米 分类:软件开发 浏览: 评论:2

30年程序生涯26种语言 看我与“Hello World”的往事

       我最近在7月4日的那一周休了一个假,因此有时间来回顾我的职业生涯。令我震惊的是,我已经写了近30年的代码了!于是,我决定好好利用这段额外的休息时间来创作一篇怀旧的帖子,回顾在过去近30年时间中我工作过的编程语言。向我从“Hello, World”开始学习新语言的30年致敬。 我学习的第一种编程语言是TI BASIC,BASIC专门为微软TI 99 / 4A microcomputer而编写的一种语阅读全文 »

2016年9月8日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

结构体和类的内存字节对齐详解

       先说个题外话:早些年我学C程序设计时,写过一段解释硬盘MBR分区表的代码,对着磁盘编辑器怎么看,怎么对,可一执行,结果就错了。当时调试也不太会,又根本没听过结构体对齐这一说,所以,问题解决不了,好几天都十分纠结。后来万般无奈请教一个朋友,才获悉可能是结构体对齐的事,一查、一改,果真如此。 问题是解决了,可网上的资料多数只提到内存对齐是如何做的,却鲜有提及为什么这样做(即使提,也相当简单)。阅读全文 »

2016年5月11日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

内存分配:堆和栈

       内存区域划分  栈区(stack)  1)程序运行时由编译器自动分配的一块连续的内容,存放函数的参数值,局部变量的值等  2)程序结束时由编译器自动释放  3) 栈由系统自动分配,程序员无法控制 4)只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。阅读全文 »

2016年4月15日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

MFC CFile类读写文件详解

       CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作。  一个读写文件的例子:  文件I/O  虽然使用CArchive类内建的序列化功能是保存和加载持久性数据的便捷方式,但有时在程序中需要对文件处理过程拥有更多的控制权,对于这种文件输入输出(I/O)服务的需求阅读全文 »

2016年1月11日
作者:鸡啄米 分类:软件开发 浏览: 评论:4

MFC工具栏的创建、设计与使用实例

       本文通过实例说明MFC工具栏的创建、设计和使用方法,包括三个demo。 demo1:创建一个工具栏 demo2:停靠和浮动工具栏 demo3:点击菜单项显示和隐藏工具栏阅读全文 »

2016年1月6日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

趣文:C++程序员离职前丧心病狂的报复

       有人先在 Twitter 发了一条推,号称 「C++ 砖家建议」:... 然后随着扩散和转发,越来越多丧心病狂的邪恶建议,最后汇集而成:...阅读全文 »

2015年11月6日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

最热门编程语言薪资与职位需求揭秘

       我们可以从与工作相关的指标来决定要学习的“最佳”技术,例如需求和薪资。职业规划公司Gooroo通过仔细查看了美国、英国和澳大利亚的超过50万份的IT职位空缺,得到了下面这份《2015年的工资和供需报告》。 需求量最大的前十项技术  以下这些就是在职位空缺广告中呼声最多的技术:...阅读全文 »

2015年10月14日
作者:鸡啄米 分类:职场人生 浏览: 评论:0