Skip to content

Action Frames Specification

neuront edited this page Apr 16, 2012 · 4 revisions

本文中介绍内核中的通用动作帧及成员函数的意义.

非内核的动作帧响应方式, 可实测该帧产生的 hints 来推断.

基本方法

退栈 done

子类中不要重写此函数.

子类中, 调用

self.done(result)

让此帧退栈, 并将 result 传递给此后的栈顶帧. 传递方式见 resume 函数.

响应动作 react

可能活跃 (即, 可能在作为栈顶时接受玩家动作) 的动作帧需要实现其

react(self, args)

函数来响应玩家动作. 其中 args 参数为玩家传入的字典.

任何动作帧可以在其 react 函数中抛出如下异常表示传入了不恰当的参数.

  • KeyError: 缺少参数
  • ValueError: 参数错误

这些异常将在 core.src.game_control.GameControl.player_act 中被捕获, 并返回对应的错误信息.

活动玩家列表 allowed_players

可能活跃的动作帧需要实现

allowed_players(self)

返回该帧允许响应的玩家对象列表. 动作帧自己无须检测传入参数的玩家 token, token 检测由 core.src.GameControl.player_act 完成.

如果玩家传入的字典中 token 对应的玩家不在此函数给出的玩家列表中, 则 react 函数不会被调用, 并直接向客户端返回错误.

激活帧 activated

当帧入栈时

activated(self)

会被调用.

此函数默认实现为 pass.

清理 destructed

当一个动作帧从栈中被弹出时

destructed(self)

会被调用.

此函数默认实现为 pass.

回复 resume

当一个动作帧从非栈顶变为栈顶时 (入栈时除外, 即, 从该帧开始靠近栈顶的帧都被弹出时), 其

resume(self, result)

方法会被调用. 参数 result 为之前栈顶退栈时传递给 done 函数的值.

此函数默认实现为 pass.

提示 hint

子类中不要重写此函数.

返回客户端提示字典, 至少将包括

  • code: OK
  • players: 当前响应玩家 id 列表
  • action: 动作分类, 调用 self._hint_action(token) 获得.

hint 函数会调用 self._hint(token) 获得具体的 hint 数据, 并合并入结果字典.

提示详情 _hint_hint_action

可能活跃的动作帧需要实现

_hint(self, token)

返回一个字典, 表示 hint 细节. 另外实现

_hint_action(self, token)

返回一个字符串, 表示 hint 分类.

内核动作帧

文件 core/src/action_frames.py

帧的基本成员

任何栈帧都需要接受一个 core.src.game_control.GameControl 实例作为构造参数. 该对象用于帧中获取与该局游戏有关的信息.

使用手牌 UseCards

构造参数

  • player: 出牌玩家
  • interface_map: 可用动作接口名到动作函数的映射

react 参数字典需要

  • action: 动作
  • use (可选): 牌

done 参数: None.

resume: 若当前玩家死亡, 则终止出牌.

打出手牌 PlayCards

构造参数

  • player: 需打出手牌的玩家 id
  • cards_check: 打出手牌验证函数

done 参数: 传入 react 的参数.

react 参数字典需要

  • discard: 打出的牌

展示手牌 ShowCards

构造参数

  • player: 展示牌玩家
  • cards_check: 展示手牌验证函数

react 参数字典需要

  • discard: 展示的牌

done 参数: 传入 react 的参数.

弃置手牌 DiscardCards

构造参数

  • player: 弃牌玩家
  • cards_check: 弃置手牌验证函数

react 参数

  • discard: 弃置的牌

done 参数: 传入 react 的参数.

接收消息 AcceptMessage

通常用于玩家只需决定是或否, 或从某些选项中选择一种, 而与卡牌和目标无关的消息接收.

构造参数

  • players: 允许发送消息的玩家列表
  • action: hint 动作分类字符串
  • hint: hint 详情字典
  • on_message: 接收到消息时执行的回调, 回调实参为传入 react 的参数

done 参数: 传入 react 的参数.

Clone this wiki locally