游戏中的物品交换逻辑抽象

如果总结一下游戏的内部逻辑,或许会让游戏变得很无趣,不过程序员大概会很高兴,比如说我。

如果把用户的各种信息都抽象成“物品”、“个数”,那么所有的游戏逻辑都是用户之间的物品交换。

为了方便描述,我来自定义一套语法表示这种交换。这里用的是类BNF语法,如果没耐心可跳过。

物品交换 := 物品描述 “=>” 物品描述

物品描述 := 物品描述 “+” 单个物品描述 | 单个物品描述

单个物品描述 := 用户 “(” 物品 “,” 数量 附加属性 “)”

物品 := 物品名称 | 物品函数

物品函数 := rand “(” 物品列表 “)”

物品列表 := 物品列表 “,” 物品 | 物品

附加属性 :=”,” “{” 附件属性列表 “}” | “”

附加属性列表 := 附加属性列表 “,” 属性 | 属性

属性 := 属性名 “:” 属性值

数量 := 数字 | 数字函数

数字 := 非负整数 | MAX

数字函数 := auto_change “(” 初始值 “,” 每秒变化步长 “,” 边界值 “)”
| max “(” 数字列表 “)”

数字列表 := 数字列表 “,” 数字 | 数字

函数说明:

希望不要看这些BNF晕了头……直接看例子其实也可以。

列举一下常见的游戏场景背后的数字逻辑:

仅仅通过这些很基本的物品交换逻辑,(理论上)就可以实现一个比较复杂的游戏数值逻辑了。只要实现一个服务,把所有这些可能的物品交换逻辑都放在某个配置里面,游戏核心就出来了。

这种做法也有不足,有些时候客户端需要从右边推导出左边的可选值就比较麻烦。比如物品1可以由游戏币或充值币其一换得,客户端需要根据物品1反查出游戏币和充值币各自需要的数量。这在技术上其实可行,只是需要花费更多精力去想明白里面的需求。

相关阅读

有话想说?请留下评论吧~~如果喜欢我的blog,欢迎订阅~~

评论

还没有任何评论。

留下评论

(必填)

(必填)