一直做程序开发,整天忙于业务开发,好多东西并没有去深究,貌似一直都是在使用开源库拼凑代码。前几天偶尔玩了几把捕鱼,发现即使有道具还是很难捕到鱼,反正也是闲着,不如自己写个捕鱼程序,这就是开发这个程序的原因。本人一般做后端开发,程序在我的眼里就是处理数据的,图形化对我来讲就是个样子,怎么展示而已,但我知道,在用户眼里UI还是很重要的。很久以前就读过《Windows游戏编程大师技巧》,但一直没有实践过,正好试一试,反正程序开发对我来讲都一样,稍微查查资料,仔细琢磨怎么实现就好了。运行程序下载地址:https://xianfa.github.io/download/FishGold.zip

实现过程

首先是基于什么环境开发,目前游戏引擎以Unity和Cocos为潮流,但是如果只是使用现成的环境,写写脚本完成游戏,总觉得深度不够,还是自己从头开始写有挑战性,环境定为Windows,开发使用我最熟悉的C++,用VS2017开发。本来做的时候想和其他框架开发一样,都设计为Interface,但在实现的过程中发现还是直接使用定义的类较方便。先定义接口,基于接口实现,太过麻烦。至于实现,开始决定用GDI来实现,后来经过查找资料,改用D2D来实现。

游戏截图
截个图演示下,百发百中。

设计概要

一般做一个软件,我们都需要需求分析,概要设计,编码,测试这几个步骤。我这里的需求就是仿制,最大的问题是游戏资源难以获取,找来找去,发现有个开源的,直接用了,感谢资源提供者。至于设计就没有写文档了,因为我自己也是盲人摸象,做到哪里是哪里,根据实际需要再修改。类的话主要就是Node->ContainerNode->Animate->MoveAnimate->Fish类似的这样,直接做,不合理的地方直接更改,敏捷就是不怕啰嗦,该重构直接重构,自己写的东西,只要是合理的想怎么改就怎么改。底层渲染先用D2D实现一个版本,能实现功能即可,后续再考虑如何做一个跨平台的软件。

相关问题

首先在功能上,没有多个场景的展示和处理,这里仅实现了游戏场景,没有实现金币动画功能,积分处理只是简单的处理为每条鱼100,炮弹也只有一种,每次消耗5。还有就是体验上直接用鱼进入范围就捕到没有挑战性。 其次在于程序结构,这个是我重点关注的。类的功能不够整洁,想了下,大概每个类要处理为Constructor,Destructor,Initialize,UnInitialize,然后外加功能函数。对于内存管理,必须是谁产生,谁释放,这个问题主要是针对ContainerNode,开始没想那么多,直接在ContainerNode里面释放,这导致后面的很多处理,都需要考虑是否生成了野指针。还有就是控件目前处理为Image,直接在GameScene里面硬编码,需要抽出相应的类结构来处理,就是像MFC一样的CButton,CProgress等等。 然后是设计问题,这里主要是指设计模式的运用。设计模式读过很多遍,工作中经常是业务逻辑处理,涉及模式较少,毕竟在框架里面才是模式大量出现的场景。 最后是通用性问题,一般程序跨平台最好,一套代码,所有平台搞定,使用开源库,我也喜欢用能跨平台的。 有问题可以邮件联系:zhang_xianfa@tom.com