外部接口:
- match(name1, func1, name2, func2, k=9, h=15)
- match_with_log(name1, func1, name2, func2, k=9, h=15)
用法:
from match_core import match
match_result = match('noob', noob_ai, 'master', master_ai, k=25, h=49) # noob VS master in 50*49 field match_result['log'] # each step including endgame
from match_core import match_with_log
match_with_log('noob', noob_ai, 'master', master_ai, max_turn=5, max_time=1) # output to 'noob-VS-master' shelf
-
进行一次比赛
- name1 - 玩家1名称 (str)
- func1 - 玩家1控制函数
-
- 接收游戏数据字典
包含纸片场地、纸带场地、玩家位置、玩家朝向等参数
- 接收游戏数据字典
-
- 返回操作符(left,right,None)
-
- 详见 “游戏数据” 部分
- name2 - 玩家2名称
- func2 - 玩家2控制函数
- k - 场地半宽(奇数)
- h - 场地高(奇数)
- max_turn - 总回合数(双方各行动一次为一回合)
- max_time - 总思考时间(秒)
- 字典,详见 “对局记录” 部分
-
同上,但没有返回值
将对局记录输出为形如"{name1}-VS-{name2}.pkl"文件名格式保存
-
由内部 get_params 辅助函数生成,包含对局一个回合的必要决策信息
- turnleft : 剩余回合数
- timeleft : 双方剩余思考时间
- fields : 纸片场地二维列表
- bands : 纸带场地二维列表
- players : 玩家信息列表,包含先后手玩家信息,详见 “玩家信息” 部分
(返回给玩家)
- me : 该玩家信息
- enemy : 对手玩家信息
(返回给总对局记录)
- band_route : 双方纸带行进方向
-
由内部 player.get_info 类函数生成,包含玩家当前信息
- id : 玩家标记
1 - 先手
2 - 后手 - x, y : 横纵坐标(场地数组下标1)
先x后y访问场地列表
- direction : 当前方向
0 - 向东
1 - 向南
2 - 向西
3 - 向北
- id : 玩家标记
-
由 match 函数生成,包含一次对局信息
- players : 参赛玩家名称
- size : 该局比赛场地大小
- maxturn : 最大回合数
- maxtime : 最大思考时间
- log : 对局记录列表
保存由初始状态(不包含)至终局(包含)每回合游戏数据 - result : 对局结果,详见 “对局结果” 部分
-
由内部 parse_match 函数生成,经 match 函数修饰
记录对局结果信息- 胜利玩家编号
0 - 先手玩家
1 - 后手玩家 - 终局原因
0 - 撞墙
1 - 纸带碰撞
2 - 侧碰
3 - 正碰,结算得分
-1 - AI函数报错
-2 - 超时
-3 - 回合数耗尽,结算得分 - 额外信息
- 胜利玩家编号