跳转至

Gobang Bridge软件使用说明

Windows平台1.1版本下载链接

Linux平台1.1版本下载链接

Linux平台请执行sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-webkit2-4.1安装依赖项。

一、界面介绍

Example

  • 顶端

  • Home:首页

  • Black IO:黑色方程序文件的输入输出
  • White IO:白色方程序文件的输入输出

  • 界面

  • Move Record:移动过程记录

  • 棋盘:四周为坐标,中间为棋盘,存在人类玩家的情况下,鼠标点击可以为该方落子。

  • Control Panel

    • 禁手规则:可选择是否使用禁手规则。

    • State:显示当前对局状态,获胜(退出)原因。

    • Info:显示当前黑白方状态,包含人和机器两种模式,选择机器人对局点击Choose File选择编译好的C程序文件;选择人类玩家则点击Switch Manual,默认为人类玩家。人类玩家有直接鼠标点击落子和输入坐标落子两种方式,下为坐标输入格式:

1
1,2
1
2
3
4
5
  即表示在第一行第二列落子。

- `重新开始`:在当前玩家选取的情况下重新开始对局。

- `导出棋谱`:生成本局比赛到目前为止的状态信息,包含禁手规则`ForbiddenRule`,获胜玩家`WinPlayer`,对局情况`wincode`,黑方玩家`black`,白方玩家`white`,落子情况`movelog`。(关于日志导出的具体说明见后)

二、如何使用

  1. 下载Gobang_Bridge.exe,根据操作系统选择对应的Linux或Windows版本(暂不支持macOS系统)。
  2. 对于linux系统:需要安装一些依赖包,执行命令即可sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-webkit2-4.1
  3. 双击打开。
  4. 设定禁手规则黑方玩家白方玩家
  5. 进行对局。
  6. (可选)重新开始。
  7. (可选)导出棋谱。
  8. (可选)查看IO

三、输入输出规范

此程序对黑方白方的程序输入输出作了如下规范:

  1. 启动检测:

在输入黑方白方的函数(如用于输入黑方白方的scanf函数前),前的两条语句应该为:

1
2
printf("READY"\n);
fflush(stdout);

程序片段示例

1
2
3
4
5
6
printf("READY"\n);
fflush(stdout);
//必须紧跟着输入函数
scanf("%s",player);
//黑方:BLACK;白方:WHITE
fflush(stdout);
  1. 输入及输出规范

程序应当输出该步骤的落子,并接受对方的下一落子

对于棋子坐标的传输,规范统一采用下列格式化字符串形式:

1
2
3
4
5
6
" MOVE %c%d\n"
//MOVE前有一个空格,即读入坐标的函数应写为如下格式
char rowAsChar;int col;
scanf(" MOVE %c%d",&rowAsChar,&col);
int row=rowAsChar-'A'+1;col=col;
//其中行为row,列为col
对于一次交互过程:黑方机器先手,其先输出字符串

1
MOVE(1,3)//表明黑方机器在坐标(1,3)处落子,输出的时候,字符串MOVE前没有空格

通过Gobang_Bridge.exe程序,白方机器获取到黑方机器的输出,然后给出白方机器的落子,输出字符串

1
MOVE(2,3)//表明白方机器在(2,3)处落子

且对于输出同学们编写的C语言程序中的用于输出落子信息用的函数:

1
printf,puts等 

其输出格式规定为

1
2
3
4
printf("MOVE %c%d\n",row+'A'-1,col);
//必须从新行中开始输出
//MOVE前没有空格
//row为行,col为列

且其下一条语句必须为

1
fflush(stdout);

原理部分(省流可跳过):fflush(stdout)的作用本质为清空标准输出stdout的缓冲区,本程序采用标准输入输出实现白方与黑方的交互,需保证每次传入的格式为"MOVE(%d,%d)\n"

下为一段示例程序,输入输出规范可参考此程序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <string.h>
char s[100];
int main()
{
    puts("READY\n");             // 输出READY表示初始化完成
    fflush(stdout);              // puts和printf之后都要刷新缓冲区
    gets(s);                     // 读取自己的颜色
    if (strcmp(s, "BLACK") == 0) // 判断自己是黑方还是白方
        printf("MOVE H8\n");     // 如果是黑方,就先下一步
    fflush(stdout);
    while (1)
    {
        int row = 7, col = 7;char c;
        // 读取对手下棋的坐标,注意scanf的空格很重要,不然会读到换行符等
        scanf(" MOVE %c%d", &c, &row);
        col = c - 'A' + 1;

        // 然后根据对手的坐标下一步棋,这里只是简单的下在对手的右边
        row = row;
        col = col > 14 ? 1 : col + 1;

        // 输出自己的下棋坐标
        // 必须从新行开始输出
        // printf("MOVE %d %d\n", row, col);
        printf("MOVE %c%d\n", col + 'A' - 1, row);
        fflush(stdout);
    }
    return 0;
}

四、棋谱日志介绍

  • forbidden:禁手规则

  • 0:无禁手

  • 1:有禁手

  • WinPlayer:获胜方

  • true:黑方

  • false:白方

  • Wincode:对局状态(胜利状态)

  • Still-Playing:仍在进行

  • Five in a row:五个连成一串
  • Non-empt position:重复落子(即落子到了已经有棋子的位置)
  • Draw:平局
  • Timeout:超时(未采用)

  • Black&While

  • PID:进程号

  • CmdLine:文件路径
  • ExitCode:终止码

  • Movelog

  • true:黑方

  • false:白方
  • rolcol行与列

五、附加调试

可以使用PID号进行附加调试,感兴趣的同学可以使用

六、命令行参数

本程序也可以使用命令行参数运行。

本程序命令行参数表如下:

  • -b:黑方玩家(不填默认为人类玩家)(填写文件路径)
1
2
示例 ./Gobang_Bridge.exe -b "E:\VSCODE\Gobang\test_b.exe" 
# 黑方为机器,白方为人类
  • -w:白方玩家(不填默认为人类玩家)(填写文件路径)
1
2
示例 ./Gobang_Bridge.exe -w "E:\VSCODE\Gobang\test_w.exe" 
# 黑方为机器,白方为人类
1
2
示例 ./Gobang_Bridge.exe -b "E:\VSCODE\Gobang\test_b.exe" -w "E:\VSCODE\Gobang\test_w.exe" 
# 黑白方均为机器
  • -l:日志导出(log):后面跟存储路径。

日志写入模式为附加,不是覆盖。

1
./Gobang_Bridge.exe -l "E:\VSCODE\Gobang\log.json"
  • -f:禁手规则制定:
1
2
0:无禁手
1:有禁手