Skip to content

Stage 0.6: Generating hint for clients

neuront edited this page Apr 3, 2012 · 1 revision

Code review: https://github.com/neuront/sgs/commit/2f7404f1d16eafa7e6de4b277c1b9b704ec85470

服务器端 hint 机制

提供 hint 的目标

服务端向客户端提供 hint 是为了防止客户端介入过于复杂的游戏逻辑. 客户端可以通过遵循服务器提供的 hint 为玩家提供可以操作的方式, 成为纯粹的表现层.

服务端提供 hint 应该包含下面这些信息

  • 此时哪些玩家在响应
  • 若此时你 (当前玩家) 需响应游戏, 那么
  • 你可以执行哪些动作
  • 你选择执行某个动作后, 可以选择的卡牌
  • 你选择不同卡牌组合时, 可以选择的目标玩家

提供者

由动作帧提供 hint. 每个可能活动的帧对象应当提供方法 hint(self, token) 来返回 hint, 当传入的参数 token 对应的玩家是当前帧可响应玩家之一时, 则返回的 hint 应包含该玩家可用于响应的详细信息, 否则, 仅返回当前响应的玩家列表.

Hint 规格

参见 hint 规格. https://github.com/neuront/sgs/wiki/Hint-Specification

其它修改

出牌接口

简化了出牌接口, 现在, 出牌分为两种形式

  • use 使用卡牌, 玩家需要指定卡牌和目标
  • discard 弃置卡牌, 展示卡牌, 打出卡牌均使用此接口, 玩家仅指定卡牌, 不指定目标

技能

实现了技能 [红颜].

完整实现了技能 [龙胆]: (增加效果: 你的 [杀] 可以作为 [闪] 打出, 你的 [闪] 可以作为 [杀] 使用).

进一步完善了技能 [武圣]: (增加效果: 你的红色手牌可以作为 [杀] 使用, 尚未实现: 你已装备的红色装备牌可以作为 [杀] 使用).

完整实现了 [丈八蛇矛]: (增加效果: 你可以使用 2 张手牌作为 [杀] 使用).

动作与卡牌分类

将卡牌极其动作进行分类, 如 [顺手牵羊] 属于 [非延时锦囊], 而 [非延时锦囊] 属于 [锦囊]. 详见 ext.src.category_hierarchy.

增加使用基本牌

可以使用 [杀]. 每个出牌阶段限 1 次.

卡牌与玩家对象

为玩家对象增加了卡牌属性转换锁定技接口.

如 [红颜] 需要的锁定技黑桃花色视为红桃花色, 在 ext.src.player.Player 中, 玩家的属性 card_suit_char 为一个函数, 接受卡牌作为参数, 返回花色. 在卡牌类型 core.src.card.Card 中, 卡牌的属性 base_suit 并不直接被结算过程使用, 而应该调用 suit() 成员函数, 根据牌的所有者对应的函数计算出卡牌的花色.

为玩家对象增加了其它在结算中需要用到的接口. 这些接口通常包含一个默认实现, 当玩家被赋予某个技能时, 该技能可以改写这些属性.

如技能 [奇才] 修改使用非延时锦囊距离时, 通过修改玩家的接口 range_char 来改变如 [顺手牵羊] 的距离.

Clone this wiki locally