C++实现人机对战围棋(使用Leela Zero权重)-界面

本文介绍了如何使用C++结合Leela Zero的权重文件创建人机对战的围棋游戏。通过加载权重文件,将围棋界面的棋盘状态转换为网络输入,再将网络的输出解析为落子位置。游戏界面包括19x19棋盘,鼠标操作进行黑白棋交替下子,机器通过网络代替一方进行智能决策。玩家需手动提子。文章提供了游戏循环和机器下子的流程,并展示了部分界面截图。
摘要由CSDN通过智能技术生成

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, "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值