C++实现人机对战围棋(使用Leela Zero权重)-自动提子

本文介绍了一个C++实现的自动提子功能,该功能用于人机对战围棋游戏中,判断并移除死子,提高了游戏体验。通过检查棋盘上棋子的气,确定棋子的生死状态,实现棋力提升。
摘要由CSDN通过智能技术生成

前面的需要手动提子,非常不方便,这里再实现一个自动提子(判断死子并在棋盘中拿走)功能。

在下围棋时,当一个棋子落到棋盘上,它会对周围对方棋子的死活产生影响,如果对方棋子没有气了(死了),必须从棋盘上拿掉(提子)。

进一步分析的话,刚落下的棋子,只可能威胁到周围与其紧临的上下左右方向的四个对方棋子(也可能是三个或两个,如在边角的话),
  而这四个方向上的对方棋子,可能是孤立的一个棋子,也可能是多个棋子相连的一片棋子(一块棋)。
  要判断一块棋是否还活着,需要逐个检查这块棋中的每一个棋子:如果其中某个棋子旁边没有棋子,说明这块棋至少还有一口气,因而确定它还没有死;
  如果检查完这块棋中的所有棋子,始终不能找到一口气,可以确定这整块棋都死掉了。


流程伪代码:

下子后

	判断有否提子
			在4个(边3,角2)位置计算相连块气,如无气提子
		如果没有提子,
						判断自身块有没有气
							如自己没有气,则不能落子,落子无效,返回假
							如有,返回真

		如有提子,返回真

判断:

//判断落子是否有效,并提子如有的话
bool 判断落子是否有效()
{

	int 行棋方,非行棋方;

	int a0=a-1,b0=b-1;//落点

	bool 提子=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值