我被要求制作一个井字游戏算法,但我不是很明白如何检查每一行或每一列是否能成为结束状态。
我尝试了5×5的棋盘,但只能做到五子连线,所以我希望能找到一种方法来实现四子连线的结束状态。我还没有考虑对角线,所以我只专注于检查列和行。
我的检查代码如下:
var B = this.board; //检查行 for(var i = 0; i <= 20; i = i + 5) { if(B[i] !== "E" && B[i] === B[i + 1] && B[i + 1] == B[i + 2] && B[i + 2] == B[i + 3] && B[i + 3] == B[i + 4]) { this.result = B[i] + "-won"; //更新状态结果 return true; } } //检查列 for(var i = 0; i <= 4 ; i++) { if(B[i] !== "E" && B[i] === B[i + 5] && B[i + 5] === B[i + 10] && B[i + 10] === B[i + 15]) && B[i +15] === B[i + 20]{ this.result = B[i] + "-won"; //更新状态结果 return true; } } var available = this.emptyCells(); if(available.length == 0) { //游戏平局 this.result = "draw"; //更新状态结果 return true; } else { return false; }
回答:
你可以只遍历最上面的行(从0到1,包括1)和所有列,检查从给定行开始向下的一列中连续4个单元格是否包含相同的元素。
你可以对行做同样的事情,通过遍历最左边的列(同样,从0到1)和所有行,检查向右的序列是否符合要求。