概述:

本协议为2012中国计算机博弈大赛军棋博弈项目协议。

棋盘和棋子的编码约定:

  1. 棋盘棋位编码与布局规则
    军棋棋盘共有12行5列60个棋位,行编码从上到下依次为A,B,C……K,L;列编码从左到右依次为0,1,2,3,4;每个棋位用行号和列号顺序表示见图1。
    己方应在下方棋盘的棋位上布置棋子,对方在上方棋盘的棋位上布置棋子。 布阵时选手只能将己方的25枚棋子扣放在本方区域的兵站和大本营中(军旗必须放在大本营中;地雷必须放在最后两排;炸弹不能放在第一排,行营中不能布子。)

  1. 棋子编码:
    棋子分为红方和黑方,每一方的棋子各25枚,司令、军长、军旗各一;师长、旅长、团长、营长、炸弹各二;连长、排长、工兵、地雷各三。各棋子的编码和数量见下表1。
名称 司令 军长 师长 旅长 团长 营长 连长 排长 工兵 地雷 炸弹 军旗
编号 a b c d e f g h i j k l
数量 1 1 2 2 2 2 3 3 3 3 2 1
  1. 对局规则:
    布局结束后,红方先行一着,如果发生碰子由裁判将碰棋输赢结果通知双方,然后双方轮流行棋,直到根据和棋或输赢规则结束棋局。
    (1)行棋规则
    军旗和地雷不可移动,在大本营里的棋子不可移动,其它棋子可以移动。
    棋子沿公路线移动时每次只能走到相邻的停靠点;
    工兵沿铁路线移动时可不限格数直行或转弯到达铁路线上未被阻挡的任何兵站,其它棋子沿铁路线移动时不可转弯只可不限格数沿直线移动到未被阻挡的兵站。
    棋子不能碰行营中的棋子。
    (2)碰子规则
    基本碰子规则是双方棋子相碰时军阶低的棋子战败被吃掉(移出棋盘),如果两个棋子级别相同则同归于尽(双方棋子移出棋盘)。具体碰子胜败可参照表1。
    炸弹碰到对方任何棋子时同归于尽(包括军旗和地雷)。
    地雷被工兵碰到时被工兵吃掉,被炸弹碰到时同归于尽,被其它棋子碰到时可吃掉其它棋子。
    若司令被吃掉或同归于尽,则无司令的选手需亮出军旗所在位置。
攻守 司令 军长 师长 旅长 团长 营长 连长 排长 工兵 炸弹
司令 同尽 军长败 师长败 旅长败 团长败 营长败 连长败 排长败 工兵败 同尽
军长 军长败 同尽 师长败 旅长败 团长败 营长败 连长败 排长败 工兵败 同尽
师长 师长败 师长败 同尽 旅长败 团长败 营长败 连长败 排长败 工兵败 同尽
旅长 旅长败 旅长败 旅长败 同尽 团长败 营长败 连长败 排长败 工兵败 同尽
团长 团长败 团长败 团长败 团长败 同尽 营长败 连长败 排长败 工兵败 同尽
营长 营长败 营长败 营长败 营长败 营长败 同尽 连长败 排长败 工兵败 同尽
连长 连长败 连长败 连长败 连长败 连长败 连长败 同尽 排长败 工兵败 同尽
排长 排长败 排长败 排长败 排长败 排长败 排长败 排长败 同尽 工兵败 同尽
工兵 工兵败 工兵败 工兵败 工兵败 工兵败 工兵败 工兵败 工兵败 同尽 同尽
地雷 司令败 军长败 师长败 旅长败 团长败 营长败 连长败 排长败 地雷败 同尽
炸弹 同尽 同尽 同尽 同尽 同尽 同尽 同尽 同尽 同尽 同尽
军旗 军旗败 军旗败 军旗败 军旗败 军旗败 军旗败 军旗败 军旗败 军旗败 同尽

(3)和棋或胜负判定规则
结束对局后,按以下顺序优先判定胜负:
行棋着法非法的一方为负;
双方都无棋可走为和棋,只有一方无棋可走的一方为负;
军旗被吃或被炸的一方为负;
某一方行棋累计时间先超过30分钟为负;
双方连续31步未碰子时当前行棋方为负;(由于普遍认为防守方略占优势,为了减少平局和互不进攻的僵局,鼓励主动进攻,建议31步内必须碰子)。

协议使用示例:

INFO 1.0									    裁判告知选手协议版本,询问参赛选手信息
NAME 参赛选手姓名 选手回复姓名
START 1 1800 31 裁判告知选手行棋先后顺序,每局时限,必攻步数
ARRAY abccddeeffggghhhiiijjkklj 选手回复布局序列
GO 0000 0 00 裁判告知先行选手可行棋
BESTMOVE G0F0 选手回复己方行棋着法
RESULT 0 00 裁判告知选手行棋结果和对方军旗位置
GO F4G4 1 00 裁判告知选手对方行棋着法、结果和军旗位置
BESTMOVE F0E0 选手回复己方行棋着法
RESULT 2 A1 裁判告知选手己方行棋结果和对方军旗位置
GO E4F4 3 A1 裁判告知选手对方行棋着法、结果和军旗位置
… …
END 1 裁判告知选手博弈结束

协议指令解释:

  1. INFO ver
    裁判告知选手所采用的协议版本,当前版本为1.0。
    例如:INFO 1.0
  2. NAME player
    选手回复姓名。
    例如:NAME HarbinUniversityOfScienceAndTechnology
  3. START first time steps
    裁判告知选手行棋先后顺序、每局时限、必攻步数;
    first=0为先手行棋,first=1为后手行棋;
    time为每局选手可用时间,单位秒;
    相互不碰子的局面持续达到steps时,行棋方为负。
    例如:START 0 1800 31
  4. ARRAY list
    选手回复布局序列;
    list为选手布局棋子从上到下每行棋子的序列,棋子编号应用小写字母表示,中间不要有空格或换行的字符信息。
    例如:ARRAY abccddeeffggghhhiiijjkklj
  5. GO move result flag
    裁判告知选手对方行棋着法和行棋结果和对方军旗位置
    move 为对方行棋着法由4个字符组成,依次为起点行号、起点列号、终点行号、终点列号;如果move=0000则表示通知先手行棋
    result=0为对方行棋后对方棋子被吃掉,1为吃掉己方棋子,2为对死,3为仅移动;
    flag表示对方军旗位置行号和列号,如果flag=00则表示对方司令尚存军旗位置未知。
    例如:GO 0000 0 00 表示对方布局结束,通知先行选手可以行棋
    或者:GO F0G0 0 00 表示对方将F0棋子行至G0,被己方吃掉,对方军旗位置未知
    或者:GO F2G2 1 00 表示对方将F2棋子行至G2,吃掉己方棋子,对方军旗位置未知
    或者:GO F4G4 2 A3 表示对方将F4棋子行至G4,双方对死,对方军旗位置A3
    或者:GO F3F4 3 A3 表示对方将F3棋子行至F4,仅移动,对方军旗位置A3
  6. BESTMOVE move
    选手回复己方行棋着法;
    move 为对方行棋着法由4个字符组成,依次为起点行号、起点列号、终点行号、终点列号;其中行号应为大写英文字母。
    例如:BESTMOVE GOF0 表示己方将GO棋子行至F0
  7. RESULT result flag
    裁判告知选手己方行棋结果和对方军旗位置
    result=0为己方行棋后被对方棋子吃掉,1为吃掉对方棋子,2为对死,3为仅移动;
    flag表示对方军旗位置行号和列号,如果flag=00则表示对方司令尚存军旗位置未知。
    例如:RESULT 0 00 表示己方本轮行动的棋子被对方吃掉,对方军旗位置未知
    或者:RESULT 1 A1 表示己方本轮行动的棋子吃掉对方棋子,对方军旗位置A1
    或者:RESULT 2 A1 表示己方本轮行动的棋子与对方棋子对死,对方军旗位置A1
    或者:RESULT 3 A1 表示己方本轮行动的棋子未碰到对方棋子,对方军旗位置A1
  8. END win
    裁判告知选手博弈结果
    win=0表示选手战败,1表示获胜,2表示非正常结束
    例如:END 0 表示选手战败
    或者:END 1 表示选手获胜
    或者:END 2 表示非正常结束

注意事项

  1. 选手引擎程序可通过标准输入输出流(例如cin和cout)以行为单位接受和发送指令。
  2. 指令和参数之间以一个空格分隔。
  3. 竞赛平台可发出的指令为:INFO、START、GO、RESULT和END,选手引擎程序可发出的指令为:NAME、ARRAY、BESTMOVE。
  4. 具体指令用法可参考示例程序(示例程序仅供参考协议指令交互内容,选手应改进信息函数CulInfo、布局函数CulArray和行棋函数CulBestmove) 。
  5. 其他问题反馈和建议请联系meixian@hrbust.edu.cn

发布时间:

2012-3-31