坛子里某家知名p公司的知名成就系统设计

原帖地址:mitbbs

这家知名p公司有道知名设计题,名曰: 成就系统设计。搜遍了地里再加上自己的不断
脑补,终于得出了如下完整的题目:(脑补偏了,概不负责啊)

(1) Player 可以有动物,金币, level(就理解成练到几级了吧)
(2) 当 player 达到了某种 requirement 或者某几种 requirements,就会得到某种
achievement,
因为 player 达到了这种 achievement,系统当然要 reward 这个 player 一些东东啦
!(动物,
金币, level, 随便来。 然而并没有妹子。 Sad! )
以上两点就是我认为的这题这几个 objects( player, requirement, achievement,
reward) 之间的
关系。

再补充一点关于 requirement, 这里的 requirement 可以是:
a. Level>threshold ,比如你作为一个 player 终于打怪升级到了 20 级。
b. 或者 requirement 也可以是你终于收集齐了 7 个 rejects,
c. 或者 requirement 也可以是你的金币数量大于了某个 threshold

设计的关键:
(1) 新增加一种 achievement, 只需输入新的 input 就行了,其它代码不能修改
(2) 添加新的属性,比如在 player 中你又可以有 girlfriend 或者 boyfriend 或者
拉拉或者 gay
(3) 注意不要重复发送 reward

抛个砖

(1) 新增加一种 achievement, 只需输入新的 input 就行了,其它代码不能修改
–这个似乎一个Interface可以做到,这个Interface要提前考虑到尽可能多的情况。
(2) 添加新的属性,比如在 player 中你又可以有 girlfriend 或者 boyfriend 或者
拉拉或者 gay
–基本上是维护一个Key/Value list, 但新加属性的数据类型可能会很复杂,也就
是Value的类型很多样,如果复杂到加入一个全新的Class作为数据类型,又要求不修改
代码则要考虑使用Dependency Injection Container。
另一个方式是利用Extension的模式,也就是在已有类上进行附加方法,属性等
,不过不够优雅。
(3) 注意不要重复发送 reward
–这个要先定义“重复”。一般的打怪升级就是同时赚钱和经验。打过游戏的经验
,可以考虑建一个Task类,这个把Achievement,Requirement,Rewards都可以包括进
来了,Player可以Register it或者Add to his Task List,相当于签了个合同,任务
完成就给定好的Rewards。可能我想得简单了,没觉得哪里有重复的可能。