1。在《leela-zero-next》包中有一个
从人类游戏训练的(较弱的)网络的权重文件(https://sjeng.org/zero/best_v1.txt.zip)(6残差块,128通道)
2。并在《easyx吧》百度贴吧下了一个双人对战的五子棋+围棋的游戏(去掉其中的五子棋部分)。
把这两个合成一个人机对战围棋。
虽然leela-zero也是C++写的,但是我也看不懂,这里只使用其权重,还是按前面的方法生成推演网络。
难点在
(1)围棋界面的部分的数组数据--->转换成网络输入
(2)网络输出--->转换界面落子位
界面部分
流程:
载入一张背景图,在其上画19x19棋盘。
然后在鼠标点位下子(黑白轮流下)(鼠标左键)(任何时都可以双方交换子)
把其中的一方由网络代替
提子要手工提(鼠标右键)
一些变量:
int player_exchange = 0;//玩家轮流下棋
int arr[19][19] = { 0 };//棋盘数组
char str[5];//outtextxy转换字符中间容器
int a, b;//全局变量,记录交叉点位置
int a1, b1, a2, b2;//记录落子时落在数组的什么位置
int x, y;//全局变量,记录交叉点坐标
int record_now_player_exchange;//记录刚读档的exchange值,此后exchange就会++
int play_weiqi = 0;//是否选择围棋
//-------------------------------------
//人机对战
int jibw=0;//机器选黑白子 白:0,黑:1
vector<int> 顺序黑;//黑方下子序号(在网络图中的序号(也是下子顺序),连接界面和网络用)
vector<int> 顺序白;//白方下子序号
画棋盘:
// 画棋盘
void 画棋盘()
{
int i;
int j;
BeginBatchDraw();
IMAGE bk;
loadimage(&bk, "