挑战OOAD:游戏中物品使用时候的不同功能,用OO的方式,该如何设计?

简介:
在RPG游戏中,人物携带物品在地图中走动,不同的物品具有不同的功能,如果就这么简单,那对物品的使用,就可以成为物品的一个方法,使用物品就调用这个方法好了。

    很要命,不同的人物使用同一件物品的时候,效果也不一样。

     这时候还要把这个方法放到物品对象中吗?

    也许还可以,OO分析会开始非人类的胡言乱语:如果在方法调用中,加上user参数,那么物品知道是谁在使用它,于是就可以根据使用者的不同来进行不同的处理了。

     卖锅的,物品居然活了,它成了一个精灵,知道谁在使用它。

    好吧,这样是可以了。但问题是,做为一件物品,它为了根据使用者的不同来进行不同的处理,那么它就得知道使用者的类型,耦合就产生了,即使你又抽象出某种公共的接口,耦合依然存在,但处理上会稍微舒服一些。

    有人试图改变这种耦合,把使用物品的方法加到了人物对象上,只不过是顾头不顾腚的做法,按下葫芦浮起瓢。这里的耦合不见了,会在另外一个地方冒出来,只不过,有经验的设计者会预先知道这一点并权衡不同方式的利弊,对于性质不同的系统,采用不同的处理方式。

    如果再加上一种,那就是场景,比如地上打和地下使用不一样,在庄稼地和宫殿里使用也不一样,那又该如何?

    请园子里面的大牛,告诉我这个问题该如何OOAD?



    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/archive/2011/06/01/2067177.html,如需转载请自行联系原作者



相关文章
游戏行业术语解决及数据计算方式
游戏行业术语解决及数据计算方式
91 0
|
存储 JSON 区块链
NFT游戏系统开发逻辑规则源码实例分析
NFT游戏系统开发逻辑规则源码实例分析
|
安全 C#
案例18-案例开门小例子面向对象演化
案例18-案例开门小例子面向对象演化
|
Kubernetes 前端开发 JavaScript
架构概念探索:以开发纸牌游戏为例
新冠疫情令我错失了与朋友们见面、讨论和玩纸牌游戏的机会。
121 0
架构概念探索:以开发纸牌游戏为例
|
iOS开发 Android开发 UED
带你读《好设计,有方法:我们在搜狐做产品体验设计》之三:区分不同载体的设计
那些激动人心、让人拍手叫好的设计,到底有没有方法可循?背后到底有没有设计理论支撑?答案是肯定的!本书作者是资深体验设计专家,拥有超过10年的产品体验设计和团队管理经验,他们将试图为大家总结和揭示那些优秀设计背后的理论和方法。
|
数据可视化 移动开发
弊端重重的传统影楼,优兔家摄影网站赋予新生机
拍照是件十分幸福的事情,但是在传统影楼的弊端影响下,这项服务的客户满意度却在大大下降。据相关调查显示,消费者对于影楼拍摄的满意度只有20%左右,其中45.49%的用户不满意照片的拍摄环节,另外28.57%的用户最不能忍受的是隐性消费。这些数据背后,是传统影楼更多的弊病。
|
iOS开发
直观设计 VS. 共享式设计
本文讲的是直观设计 VS. 共享式设计,Snapchat 的界面使很多人困惑。这并不是欺负老年人,而是稍微有些年纪的人都会遇到,他们想在Snapchat里处理一些基础操作都很困难。比如说找到它的换脸功能。我无法告诉你有多少人曾向我抱怨 Snapchat。
1275 0
|
前端开发 JavaScript API
[译]为什么在使用了类之后会使得组合变得愈发困难(软件编写)(第九部分)
本文讲的是[译]为什么在使用了类之后会使得组合变得愈发困难(软件编写)(第九部分),前文中,我们仔细审视了工厂函数,并且也看到了在使用了函数式 mixins 之后,它们能很好地服务于函数组合。现在,我们还将更加仔细地看看类,验证 class 的机制是如何妨碍了组合式软件编写。
1371 0
下一篇
无影云桌面