前面的需要手动提子,非常不方便,这里再实现一个自动提子(判断死子并在棋盘中拿走)功能。
在下围棋时,当一个棋子落到棋盘上,它会对周围对方棋子的死活产生影响,如果对方棋子没有气了(死了),必须从棋盘上拿掉(提子)。
进一步分析的话,刚落下的棋子,只可能威胁到周围与其紧临的上下左右方向的四个对方棋子(也可能是三个或两个,如在边角的话),
而这四个方向上的对方棋子,可能是孤立的一个棋子,也可能是多个棋子相连的一片棋子(一块棋)。
要判断一块棋是否还活着,需要逐个检查这块棋中的每一个棋子:如果其中某个棋子旁边没有棋子,说明这块棋至少还有一口气,因而确定它还没有死;
如果检查完这块棋中的所有棋子,始终不能找到一口气,可以确定这整块棋都死掉了。
流程伪代码:
下子后
判断有否提子
在4个(边3,角2)位置计算相连块气,如无气提子
如果没有提子,
判断自身块有没有气
如自己没有气,则不能落子,落子无效,返回假
如有,返回真
如有提子,返回真
判断:
//判断落子是否有效,并提子如有的话
bool 判断落子是否有效()
{
int 行棋方,非行棋方;
int a0=a-1,b0=b-1;//落点
bool 提子=