boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 坛子里某家知名p公司的知名成就系统设计
相关主题
急问一个题
a behavioral question
请问你最大的成就是什么
H1: Under what circumstances can H1B application be rejected?
Epic怎么这样
opt (VSC)---A little complicated case
有谁的OPT申请比我更倒霉?
收到信被通知被拒。。。怎么回复
被拒了,很伤心
请教,大家....
相关话题的讨论汇总
话题: player话题: event话题: 或者
进入JobHunting版参与讨论
1 (共1页)
x*****0
发帖数: 452
1
这家知名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
请问大家这个怎么解呢?
不知道有没有同学愿意一起讨论这道题的,我的qq:271296325
f*******t
发帖数: 7549
2
不难吧
x*****0
发帖数: 452
3
嗯嗯,哈哈。对我来说有点难啊。没做个系统设计的题目。
可以给些思路吗?然后我可以顺着思路往下走。

【在 f*******t 的大作中提到】
: 不难吧
l******s
发帖数: 3045
4
抛个砖
(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。可能我想得简单了,没觉得哪里有重复的可能。
x*****0
发帖数: 452
5
谢谢,谢谢啦。容我好好想想,消化消化!

况。

【在 l******s 的大作中提到】
: 抛个砖
: (1) 新增加一种 achievement, 只需输入新的 input 就行了,其它代码不能修改
: --这个似乎一个Interface可以做到,这个Interface要提前考虑到尽可能多的情况。
: (2) 添加新的属性,比如在 player 中你又可以有 girlfriend 或者 boyfriend 或者
: 拉拉或者 gay
: --基本上是维护一个Key/Value list, 但新加属性的数据类型可能会很复杂,也就
: 是Value的类型很多样,如果复杂到加入一个全新的Class作为数据类型,又要求不修改
: 代码则要考虑使用Dependency Injection Container。
: 另一个方式是利用Extension的模式,也就是在已有类上进行附加方法,属性等
: ,不过不够优雅。

f*******t
发帖数: 7549
6
随便说一下最基本的设计思路。
问题的核心点在于如何判断达成成就的条件,我们可以做一个event系统,游戏进行中
数据改变会publish各种event,比如升到10级,会有一个升级event:
class LevelUpEvent extends Event {
int oldLevel, newLevel;
}
achievement作为subscriber等待并处理相应的event。例子:
Level20Achievement extends EventListener {
void Handle(Event e) {
event = (LevelUpEvent)e;
if (event.newLevel == 20) {
// Reward player
}
}
}
注册相应event是:
Events.registerListener(LevelUpEvent.class, Level20Achievement.class);
所以定义新achievement只是加个class,并注册成listener。
加属性其实就是在player类里加field,并在引擎里实现相应的publisher:
class Player {
//... (other fields)
int level;
void ChangeLevel(int delta) {
int oldHP = this.HP;
this.HP += delta;
Events.publish(new HPChangedEvent(oldHP, HP));
}
}
x*****0
发帖数: 452
7
谢谢,谢谢了,对数据进行监听太好了。我开始想的是对player进行监听,可是player
好多啊。

【在 f*******t 的大作中提到】
: 随便说一下最基本的设计思路。
: 问题的核心点在于如何判断达成成就的条件,我们可以做一个event系统,游戏进行中
: 数据改变会publish各种event,比如升到10级,会有一个升级event:
: class LevelUpEvent extends Event {
: int oldLevel, newLevel;
: }
: achievement作为subscriber等待并处理相应的event。例子:
: Level20Achievement extends EventListener {
: void Handle(Event e) {
: event = (LevelUpEvent)e;

1 (共1页)
进入JobHunting版参与讨论
相关主题
请教,大家....
G家HR发信说有结果了,问我什么时候方便接电话
一个面试题,不会做,大家看看
rejected by IBM on Saturday
绿卡可以同时给两家公司干活吗?
请教perl的tainted和cgi::param() (转载)
除了IT其他行业工作市场不怎么样啊,怎么H1就用没了呢
理论上没抽中的也还有机会
USCIS rejection rate is around 14-18% of processed Visa’s??
提供 Facebook refer
相关话题的讨论汇总
话题: player话题: event话题: 或者