- 博客(38)
- 资源 (1)
- 收藏
- 关注
原创 C++ 资源管理
c++的资源管理的简单解决方案:根据依赖关系管理资源。在分层架构中,底层的资源被上层使用,当上层使用完成时,底层就可以释放资源了。c++中的shared智能指针也是根据依赖关系来管理资源的一个例子。所以,结构的重要性再次得到证明。采用清晰的分层结构后,资源自然得到合理的管理。
2012-08-20 14:02:30 269
原创 读mugen有感
最近看openmugen,有很多心得:1. 它将所有的structure放到一个structs.h的文件里,相对于c++的纯粹用类来表达,感觉整个工程的结构一下清晰很多,没有了乱七八糟的函数,类型声明,宏,模板,清爽好多。2. 没有过多使用c++的高级特性。连new操作都没有重载。一个明显的好处是,不用分心到这些花俏的功能上。3. mugen官方声明为什么没有gui编辑器是为了让开发人
2012-02-24 10:22:42 808
原创 小议设计模式
1. 设计模式的团队里面的人,会创建一个单件多次2. 设计模式团队里面的人,会理解和熟练使用各种复杂的模式我想表达的意思是,如果你的团队里面也是这中情况,你应该考虑的不是怎么让语言跟安全(加更多的type check)而是给那些经验少的同事多培训一下。有句话说的好,有好工具的傻瓜
2011-07-27 10:30:44 322
原创 mir2 client: review
- 所有的图片类资源由一个类管理,包括精灵,动画。gameplay用id来索引资源(无指针,维护简单)- 游戏中的所有网络消息由一个类发送:sendLogin,sendLogout,sendSkill,sendChat。。。(facade,紧凑)- 游戏中的magic类实际上是所有magic的工厂(facade,结构紧凑)- 大量的public变量(自己养成习惯只去读不去写就好)- 大量使用固定长度的基本数组做容器(高效简单)- 极少使用继承、多态、接口(结构简单)- 网络包手动分发
2010-12-28 11:18:00 416
原创 make your life easy
<br />8:28 PM 12/20/2010<br /><br />避免过多与c++类型系统纠缠。。。<br />程序员都很忙,有很多代码要写。。。<br />同理,尽量少于类,继承,封装,多态,模板,宏,打交道。。。
2010-12-20 20:36:00 361
原创 编码优先级列表
<br />== 编码优先级列表 ==<br />1 可维护性 / 明晰性<br />2 可测试性<br />3 全局效率<br />4 正确性<br />5 可重用性<br />6 一致性<br />7 局部效率<br /><br />(未列:大小、个人表达方式、个人方便性)<br />(以上是对大部分情况,特殊情况例外)<br /><br />- 1 > 3 ?<br />正确的代码如果不具维护性,不如重写,这样的例子太多了<br />- 2 > 3 ?<
2010-07-26 11:02:00 660
原创 编码审查表
<br />来自《write clean code》<br />编码审查表:<br /><br />一般问题<br />── 你是否为程序建立了DEBUG版本?<br />── 你是否将发现的错误及时改正了?<br />─一 你是否坚持彻底测试代码.即使耽误了进度也在所不惜?<br />── 你是否依靠测试组为你测试代码?<br />─一 你是否知道编码的优先顺序?<br />─一 你的编译程序是否有可选的各种警告? <br /><br />关于将更改归并到主程序<br
2010-07-20 10:26:00 342
原创 双分发示例
<br />/** 双分发示例。 我们有各种各样的输入事件:鼠标、键盘、手柄...我们需要在客户端可以自动地调用对应的事件处理函数,而不需要对输入事件进行if/else分别处理,不管是客户端还是系统内,因为那样不具扩展性,那么我们怎么将这些具体的事件传给具体的处理器呢?双分发即可以满足这样的需求。 但是它的缺点很明显:事件处理器必须具有接受所有事件的接口,这样就使得扩展事件不封闭,因为你必须修改事件处理器的接口;事件具有多个输入点,这可能会带来维护的问题;暴露过多的接口的做法值得
2010-07-15 20:57:00 352
原创 2009-6-16,7/21/2008
<br />8:43 AM 7/21/2008<br />关于学习<br /> 要学习某个优点,首先看看如果你具备这个优点你该怎么做,然后在思想上模拟着做一<br /> 遍,以后也经常保持生活和思想上都去这样做,那么你就很容易的学会了它。因为不论<br /> 在思想上模拟着做,还是在实际生活中去中,都是为了养成习惯。一旦习惯养成,它自<br /> 然而然就成了你的优点了。<br /><br /> 要学会幽默,不论在任何场合。因为我认为幽默是改善乏味的人际
2010-07-15 20:55:00 335
原创 7/10/2008,2008-4-25
<br />14:58 2008-4-25<br />代码级别的重用带来的便利并没有想象中的那么好.在大部分游戏工程里面,引擎作为一个大<br />的块被重用.<br /><br />16:30 2008-4-29<br />在编码之前,必须要完成:目录结构,命名规范,分工等.<br />有个可视化的版本,就算功能相当简单也可以帮助团队解决那种浮空的感觉.<br /><br />11:28 2008-5-22<br />尽早集成,就算只有空壳。头脑清醒,随时检查需求。<br />
2010-07-15 20:54:00 301
原创 2009-6-23,
<br />2009-6-23 13:59:13<br />需求的重要性<br /> 设计应该由需求来驱动。如果一个设计不能很大程度满足我们的需求,而需要大量改动才能使用,那么<br /> 这一定不是一个好的设计。<br /> <br /> 因此,如果出现石头里蹦出来的设计,那么可能有两种情况:<br /> <br /> 1,设计者对要设计的东西非常熟悉,游刃有余<br /> 在这种情况下,如果设计者所熟悉的东西正好是我们需要
2010-07-15 20:53:00 265
原创 2009-11-25,2009-6-14
<br />15:40 2009-6-14<br /><br />大型游戏的关键需求:<br /><br />+ 灵活方便的UI界面<br /> ~ 方便的UI开发包<br /> ~ 方便的UI编辑器<br />+ 灵活强大的游戏编辑器<br /> ~ 编辑地图<br /> ~ 编辑游戏演员<br />+ 快速的进入测试<br /> ~ 运行时编辑游戏中的可编辑元素,包括UI,游戏演员,地图等<br /><br />粗略想法:<br /><br />1<br />
2010-07-15 20:51:00 311
原创 2009-6-13,5/27/2010
4:50 PM 5/27/2010内存泄露检测:在第a次申请内存是中断1 (w)mainCRTStartup打断点2 watch窗口,{,,msvcr90d.dll}_crtBreakAlloc的值改为a3 运行程序退出程序时报告泄露#define _CRTDBG_MAP_ALLOC#include static int g_enableCrtMemCheck = _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHE
2010-07-15 20:50:00 368
原创 5/17/2010,6/12/2010
<br />11:38 AM 6/12/2010<br />业务层需求<br />- 逻辑清晰:<br /> 代码直接反映需求<br /> 可以很复杂,但是要易维护<br />- 能快速开发<br /> 业务逻辑变动太快 <br />- 避免出现业务层无关的实现细节<br /> 严格内聚<br /><br />实现层<br /> 工具层<br /> - 使用简单<br /> 不能给用户带来
2010-07-15 20:23:00 298
原创 9:20 AM 7/15/2010
<br />9:20 AM 7/15/2010<br />千军易得,一将难求<br /><br />与其分而治之,不如化繁为简(做事的方法)<br /><br />对症下药<br /><br />模式<br /><br />噪音<br /><br />层次<br /><br />统一<br /><br />伟大的工具往往有巧妙的结构<br />(业务逻辑讲求清晰,工具注重使用简单实用和强大)<br /><br />提高代码质量:<br />1 想办法限制C++用户
2010-07-15 20:23:00 359
原创 4/6/2010,5/7/2010
<br />4:05 PM 5/7/2010<br />- 体会“代码噪音”这个词语。<br />- 遇到问题,首先考虑能不能做个工具来自动解决,这是最高级的方案<br />- 与其分而治之,不如化繁为简: 削除重复,寻求统一。普通的重复必然要削除。更隐蔽的重复,比如模式。程序里面可<br /> 能有许多的模式,但是却有相似的功能。统计程序的所有模式,并尽量减少模式的数量<br />- 分模块有时候就像搭电话线,一根线连接彼此,搭好了后就不管你想说啥想传啥都可以。。<br />
2010-07-15 20:22:00 337
原创 2009-6-26,3/26/2010
<br />3/26/2010<br />对于Onyx这样高度灵活但不稳定的系统,你需要更小心的决定哪些东西需要灵活哪些不需要,否则会给让工程带来方<br />向性混乱。比如带来大量细小但不太需要灵活性的组件。这将带来难维护的问题。。<br /><br /><br />3/25/2010<br />- 在update中有一些工作,只需要做一次以后结果都不会变,那么可以放在初始化里面做<br />- 给游戏加个网络后台控制,还不如加个输入秘技来调试来的简单.但是,网络后台也有好处,他可以把
2010-07-15 20:21:00 331
原创 8/6/2008,6/11/2009
<br />2:20 PM 8/6/2008<br />在数据驱动的模型下,大部分数据类型的安全检查可以转移到程序外部的工具中。<br /><br />3:44 PM 8/22/2008<br />对于大型项目,是否管理好了复杂度,是项目是否能够顺利进行的标志。<br /><br />11:18 AM 10/31/2008<br />关于重用:<br /> 在Mosaic中,组件的粒度过小,当项目变大时,必然会出现难以管理的困难。在没有遇<br /> 到需要重用的时候
2010-07-15 20:20:00 245
原创 6/12/2009,2009-6-16
<br />11:58 AM 6/12/2009<br />关于RaymanHD Tracker想到的:<br /> 雷曼工程非常大,重新编译一次要花费很长时间。如果测试中出了问题,就要从新打包<br /> 发给QC部门,需要更多的时间。这就要求程序的子模块有很高的灵活性。比如,当雷曼<br /> 在测试过程中出现丢帧,那么我们可以关闭一些繁重的模块来进行观察,因此要求模块<br /> 有很好的可配置性。<br /><br /> Tracker在结果JF
2010-07-15 20:20:00 265
原创 06-10-30,06-10-31
<br />(06-10-30)<br /><br /> 学习了irrlicht 引擎的 UI 部分的设计。就这个引擎来说,个人觉得 UI部分设计上虽然有些问题,但是效果还是不错的。于是写了 Panel 类。开始他只是个控件容器,后来添加了拖拽功能,目的很明显,我要通过他来实现窗口。<br /><br /> 所以,以前在事件上的处理部分需要改动。当几个 Panel重叠的时候,会出现输入事件处理上的一些问题,比如同时多个控件感应到输入等。于是当某个控件接收并处理了输入后应该返回一个信息。那么我
2010-07-15 20:19:00 226
原创 06-9-21,06-9-22
<br />(06-9-21)<br /> 决定把控件渲染的任务交给用户实现,尽量增加扩展性。<br /> 决定使用上个话题的方案一,先做做看。<br /> 必须先把按纽设计好。<br /> <br /> 给每个类注册一个唯一的ID,有了ID,我们可以获取一个类的实例的ID,然后与我们想要的类的ID进行比较,这样就可以从父类向下转换,而不用使用C++的dynatic_cast<>.<br /> <br /> 一些行为先在父类进行设计,比如一个组件关心输入事件,并且子类有不同
2010-07-15 20:18:00 248
原创 06-10-30,06-12-12
<br />(06-10-30)<br /><br /> 学习了irrlicht 引擎的 UI 部分的设计。就这个引擎来说,个人觉得 UI部分设计上虽然有些问题,但是效果还是不错的。于是写了 Panel 类。开始他只是个控件容器,后来添加了拖拽功能,目的很明显,我要通过他来实现窗口。<br /><br /> 所以,以前在事件上的处理部分需要改动。当几个 Panel重叠的时候,会出现输入事件处理上的一些问题,比如同时多个控件感应到输入等。于是当某个控件接收并处理了输入后应该返回一个信息。那么我就这样该
2010-07-15 20:18:00 241
原创 2007-8-21,06-9-11
<br />//19:39 2007-8-21 錦天<br /> <br /> 问题分解示意图:<br /> 方案1:<br /> 1<br /> 问题<br /> |<br /> +———————+<br /> | |<br /> 子问题1 子问题2<br />
2010-07-15 20:17:00 258
原创 2007-2-26,2007-8-16
<br />//2007-2-26<br /><br />1 类结构的一些体会<br /> <br /> 我感觉,所有的类都应该从一个类继承,为什么这么说呢,从已有的类继承的化,可以方便维护。父类的功能子类默认都有,子类还可以自己添加功能。这样么,可以重用大量的代码,也可以使维护十分方便。不过这样可能会增加类之间的偶合度。<br /><br />//2007-3-15<br /><br />1 关于MVC模式<br /><br /> 这个模式将对象分为逻辑Control,视图V
2010-07-15 20:16:00 271
原创 2007-2-13,2007-2-24
<br />//2007-2-13<br /><br /> 进度特别慢的FIGHTER07,今天先看了下DEMOSTAR2(网友的飞机),然后看了下水晶之约的代码,然后看了下SKYHUNTER,很有感触啊 。<br /><br /> 我们现在做游戏,应该把重点放在实现效果上,使用的算法笨拙点无所谓。水晶之约用的算法很简陋,但是解决了很多问题,再看我的SKYHUNTER,稍微有点意思的就是那个脚本机,其他的代简直没意义,地图问题到最后也没有解决,脚本机用在飞机里面的设计一开始就有问题,可是还
2010-07-15 20:15:00 295
原创 06-12-14,07-1-29
// 06-12-14关于对象的控制权限的问题。 一个对象可以控制其他的对象,但是,有时候,这种控制权需要进行良好的设计。 如果一个对象可以任意的驱动其他对象,那么,你的代码将很难维护。 如果一个容器内的对象可以将主流程从这个容器转移到其他地方,那么,你的容器将会有莫名其妙的逻辑,因为他没有对流程的控制权。 这个时候,容器内的对象就不能随意转移流程,转移流程的操作交给容纳他的容器来处理,这样容器将会有更好逻辑。 〈07-2-13 比如一个状态控制着一个状态工厂,使用这个状态
2010-07-15 20:13:00 211
原创 07-2-1,07-2-7
<br />//07-2-1<br /> <br />1 关于C++中静态对象的提前初试化。<br /> <br /> C++中可以在main函数之前调用一些方法,比如给静态变量初始化,单体的初始化等,这有方便也有坏处。<br /> 坏处就是没有调用的顺序,有可能出现这样得情况:一个类正在向类管理器(单体)注册类信息(类信息是必须在main之前被确定),但是这个时候的类管理器都还没有初始话!<br /> <br /> 解决得办法就是将类管理器单体的构造过程放在取单体的方
2010-07-15 20:13:00 310
原创 编程思绪,06-6-16 到 06-11-23
//06-6-16 接口分为查询状态类,更改状态类,分清楚点有利于规范代码。 不要将不该暴露的数据写进头文件。 凡是涉及到A对象的状态更新的,交给A来处理。 尽量保持对象接口的简单,接口要精练。 任务分配要具体,A只对象处理于A相关的事情,而且凡是与A对象相关的事情最好都交给A 对象来处理,不要让细节蔓延,以至于最后不能维护,出现代码混乱,对象互相偶合。//06-6-26 如果一个对象需要从文件加载数据,不要写加载方法在这个类,继承一个新类,写在新类 里。
2010-07-15 20:09:00 273
转载 far cry 2 xbox 360 map editor
一个字:酷! http://www.gametrailers.com/user-movie/far-cry-2-xbox-360-map-editor/255390
2010-05-08 16:03:00 406
转载 infoq, 一个很好的技术人员的网站
恕我落伍,才发现这个网站:)貌似好东西不少哦。具体的我也不太清楚,大家多去看看吧:http://www.infoq.com/cn/architect/;jsessionid=2136A514144C27A0381BC02A93BF8542
2010-05-06 20:52:00 634
转载 MSDN 杂志 2000-2010 在线免费阅读
哈哈,又发现了一堆好东西哦,赶紧跟大家分享。只不过是全英文的,凑合吧:) http://msdn.microsoft.com/en-us/magazine/ee310108.aspx
2010-05-06 20:46:00 576
转载 程序员能力矩阵 你属于哪一层?
由于版面原因,直接转帖: 原文出处:http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm译文出处:http://static.icybear.net/%5BCN%5DProgrammer%20competency%20matrix.htm
2010-05-06 20:19:00 248
转载 代码的创造性:向程序员学创造性的14种方法
对程序员传统的看法一般是这样的:书呆子,兜里揣着防止钢笔漏水的塑料片,以及,非常、非常的无聊。一般没有人会把程序员和创造性两个词放在一起。不过,这样的看法错的不能再离谱了。事实上,编写代码是一个人能做的最优创造性的事情了。程序编写者必须在两个完全不同的世界——结构的世界和想象的世界——之间求取平衡。他们使用一种非常结构化的语言,却实现了很抽象的概念。这可不是简简单单的工作。我能够知
2010-05-06 20:16:00 1681
转载 一个睡五分钟等于六个钟头的方法
睡觉的诀窍 所以,根据医学和我的体验、观察,一个人真正睡着觉最多只有两个钟头,其余都是浪费时间,躺在枕头上做梦,没有哪个人不做梦。至于醒来觉得自己没有做梦,那是因为他忘记了。 通常一个人睡两个钟头就够了,为什么有人要睡七、八个钟头?那是你赖床躺在枕头上休息的习惯养成的,并非我们需要那么久的睡眠时间,尤其打坐做功夫的人晓得,正午只要闭眼真正睡着三分钟,等于睡两个
2010-05-06 20:02:00 487
转载 微软华人软件人生经历:功夫在身外
微软华人软件人生经历:功夫在身外 出处:计算机世界 在微软工作的华人已近千人。在微软TechEd技术教育大会期间,他们中的16位作为讲师回到北京。他们为听众带来微软软件技术的最新进展,而他们自身的软件生涯也是一种财富。记者在大会期间,趁他们讲课 之余,采访了其中的5位讲师。学得杂一些
2008-10-16 11:27:00 527
A FLEXIBLE AND EXPANDABLE ARCHITECTURE
2009-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人