-
Notifications
You must be signed in to change notification settings - Fork 1
Action Frames Specification
本文中介绍内核中的通用动作帧及成员函数的意义.
非内核的动作帧响应方式, 可实测该帧产生的 hints 来推断.
子类中不要重写此函数.
子类中, 调用
self.done(result)
让此帧退栈, 并将 result 传递给此后的栈顶帧. 传递方式见 resume 函数.
可能活跃 (即, 可能在作为栈顶时接受玩家动作) 的动作帧需要实现其
react(self, args)
函数来响应玩家动作. 其中 args 参数为玩家传入的字典.
任何动作帧可以在其 react 函数中抛出如下异常表示传入了不恰当的参数.
-
KeyError: 缺少参数 -
ValueError: 参数错误
这些异常将在 core.src.game_control.GameControl.player_act 中被捕获, 并返回对应的错误信息.
可能活跃的动作帧需要实现
allowed_players(self)
返回该帧允许响应的玩家对象列表. 动作帧自己无须检测传入参数的玩家 token, token 检测由 core.src.GameControl.player_act 完成.
如果玩家传入的字典中 token 对应的玩家不在此函数给出的玩家列表中, 则 react 函数不会被调用, 并直接向客户端返回错误.
当帧入栈时
activated(self)
会被调用.
此函数默认实现为 pass.
当一个动作帧从栈中被弹出时
destructed(self)
会被调用.
此函数默认实现为 pass.
当一个动作帧从非栈顶变为栈顶时 (入栈时除外, 即, 从该帧开始靠近栈顶的帧都被弹出时), 其
resume(self, result)
方法会被调用. 参数 result 为之前栈顶退栈时传递给 done 函数的值.
此函数默认实现为 pass.
子类中不要重写此函数.
返回客户端提示字典, 至少将包括
-
code: OK -
players: 当前响应玩家 id 列表 -
action: 动作分类, 调用self._hint_action(token)获得.
hint 函数会调用 self._hint(token) 获得具体的 hint 数据, 并合并入结果字典.
可能活跃的动作帧需要实现
_hint(self, token)
返回一个字典, 表示 hint 细节. 另外实现
_hint_action(self, token)
返回一个字符串, 表示 hint 分类.
文件 core/src/action_frames.py
任何栈帧都需要接受一个 core.src.game_control.GameControl 实例作为构造参数. 该对象用于帧中获取与该局游戏有关的信息.
构造参数
-
player: 出牌玩家 -
interface_map: 可用动作接口名到动作函数的映射
react 参数字典需要
-
action: 动作 -
use(可选): 牌
done 参数: None.
resume: 若当前玩家死亡, 则终止出牌.
构造参数
-
player: 需打出手牌的玩家 id -
cards_check: 打出手牌验证函数
done 参数: 传入 react 的参数.
react 参数字典需要
-
discard: 打出的牌
构造参数
-
player: 展示牌玩家 -
cards_check: 展示手牌验证函数
react 参数字典需要
-
discard: 展示的牌
done 参数: 传入 react 的参数.
构造参数
-
player: 弃牌玩家 -
cards_check: 弃置手牌验证函数
react 参数
-
discard: 弃置的牌
done 参数: 传入 react 的参数.
通常用于玩家只需决定是或否, 或从某些选项中选择一种, 而与卡牌和目标无关的消息接收.
构造参数
-
players: 允许发送消息的玩家列表 -
action: hint 动作分类字符串 -
hint: hint 详情字典 -
on_message: 接收到消息时执行的回调, 回调实参为传入react的参数
done 参数: 传入 react 的参数.