On The Road
(cond ((less 'code) (less 'bug)))
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 119 文章 - 290 trackbacks - 0
博客搬家了哦,请移步
叫我abc
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(12)
给我留言
查看公开留言
查看私人留言
随笔分类
《GAME PROGRAMMING GEMS6》读书笔记(4)
《UNIX编程艺术》读书笔记(4)
month-flow(5)
mysql入门(3)
垃圾收集(4)
我的博客
叫我abc
博客搬家啦
搜索
积分与排名
积分 - 301934
排名 - 84
最新评论
1. re: C++ std::fstream open mode
i'am got
--hdj
2. re: cppcheck的使用
你好,你会使用cppcheck吗?@robert
--wqq
3. re: 垃圾收集的那点事(H)
非常感谢
--7Qing_
4. re: 高效调用lua函数
为什么提示没有findLuaItem这个函数?
--sdfasf
5. re: android ndk调试知识[未登录]
博主你好,请问如果没有.so的源代码,应该如何进行arm的汇编级调试呢?
--dennis
阅读排行榜
1. cppcheck的使用(16931)
2. 十步精通新语言(10624)
3. 内存池实现(9864)
4. 高效调用lua函数(9201)
5. 在lua脚本中使用unicode(8157)
杂乱的设计念头
最近写课程需求的时候,掌握了一些东西。尽量把胶合物集中起来,放在一个模块中,而不是零碎的分布在各处,会让代码看起来不那么刺眼。
举手头上的project。
有4个类,分别是CPlayer,IMonster,IDevice,ITerrainPortion。这4个类代表了整个游戏逻辑(规则),逻辑的执行通过两两相交碰撞来驱动。
在最初的设计中,每一个类都有接口对待其余3个类,也就是每一个类都知道规则的一部分。比如代码:
CPlayer::collid(UserDefineObj
&
obj)
{
switch
(obj.getType())
{
case
MONSTER:
IMonster
*
pm
=
dynamic_cast
IMonster
*>
(
&
obj);
do
some work
1
;
break
;
case
DEVICE:
case
}
}
根据类型来向下转换是很烦人的,并且不同类型所用到的逻辑代码也大有不同。虽然说很想提供那么一个最高接口,给出统一的部署,省却转换,但是统一的部署首先是相当难做到,并且使得每个类的的有些行为的语意有些畸形。同时,统一部署之下,只是让接口看起来统一,但接口之下的实现确会更复杂。(完全说不明白)
按照这种分布式的胶合,增加了各个类型之间的耦合,因为每个类型都要区别其他类型,并执行恰当的代码,就先要知道其他类型的存在。
后来想到的集中胶合,由一个类,了解所有存在的类型,以及各个类型之间的规则,然后在实现中,根据两两的类型选择合适的处理函数,驱动逻辑。而其他类型本身,只要提供该类驱动逻辑时需要的方法就够了。
。。。。
posted on 2006-09-17 19:58
LOGOS
阅读(646)
评论(4)
编辑
收藏
引用
FeedBack:
#
re: 杂乱的设计念头 2006-09-17 21:08
万连文
如果基于COM做,如果想实现一个顶层对象以便查询所有需要接口,可以参考实现IServiceProvider接口进行服务派送
回复
更多评论
#
re: 杂乱的设计念头 2006-09-19 12:48
lunny
除了main中,其它的类应该都只知道接口
回复
更多评论
#
re: 杂乱的设计念头 2006-09-20 14:20
Wei
Try *Abstract Factory* or "Strategy" patterns
回复
更多评论
#
re: 杂乱的设计念头
2006-09-20 17:10
LOGOS
其实最终确定下来的念头是,要做一个collide AI模块,把所有麻烦的东西集中到一起。
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理