-
Notifications
You must be signed in to change notification settings - Fork 1
Stage 0.2 Raise exceptions for bad arguments
Code review: https://github.com/neuront/sgs/commit/9a5bd37a4922cdd669d8e0241783aca9e3a31adc
此阶段的主要工作是修正动作帧在 react 函数错误处理方面的设计. 由之前遇到错误返回错误信息, 改为抛出异常, 异常将在 core.src.GameControl.player_act 中捕获异常, 并转换为错误信息返回.
此阶段, 每张卡牌有状态, 可以是常规 NORMAL 或正在使用 IN_USE.
当卡牌处于正在使用状态时, 该卡牌仍属于持有该卡牌的玩家, 但并不计入手牌中. (例: 火攻的目标至少需要持有一张手牌, 但如果目标为自己, 那么除了正要使用的火攻牌之外, 自己必须还持有至少另一张卡牌)
火攻, 以及新增的锦囊实现过河拆桥和决斗从 ext/src/player_using_cards.py 移入了 ext/src/sleevecards/* 每个锦囊会有单独一个文件实现.
代码实现在 ext/src/sleevecards/sabotage.py 中.
在 ext/test/test_sabotage.py 中的测试代码可以看到如下面对 GameControl 的调用, 作为过河拆桥过程的参考.
使用过河拆桥的玩家, 在出牌阶段可以通过类似下面的调用来指定目标, 并使用过河拆桥 (gc 为 GameControl 对象)
gc.player_act({
'token': players[0].token,
'action': 'sabotage',
'targets': [players[1].player_id],
'cards': [0],
})
接下来, 仍由出牌玩家来指定弃掉哪个区域的牌. 目前的区域只有手牌区域 ('cards')
gc.player_act({
'token': players[0].token,
'sabotage': 'cards',
})
这时, 将随机弃掉目标玩家一张手牌. (在测试代码中, 随机的实现为取第一张手牌)
代码实现在 ext/src/sleevecards/duel.py 中.
在 ext/test/test_duel.py 中的测试代码可以看到如下面对 GameControl 的调用, 作为决斗过程的参考.
使用决斗的玩家, 在出牌阶段可以通过类似下面的调用来指定目标, 并使用决斗 (gc 为 GameControl 对象)
gc.player_act({
'token': players[0].token,
'action': 'duel',
'targets': [players[1].player_id],
'cards': [0],
})
接下来, 由目标玩家开始, 双方轮流打出杀.
gc.player_act({
'token': players[0].token,
'action': 'sabotage',
'targets': [players[1].player_id],
'cards': [0],
})
gc.player_act({
'token': players[1].token,
'play': [7],
})
gc.player_act({
'token': players[0].token,
'play': [2],
})
如此往复, 知道有一方不打出杀为止.
gc.player_act({
'token': players[1].token,
'play': [],
})
这时该玩家将受到一点伤害.