javascript - 非常具体的错误 - Tic Tac Toe 测试仪

标签 javascript jquery arrays debugging

我上次提供了WAY太多的信息,所以我会减少它。

我正在编写一个井字游戏程序,但在引入人工智能之前,我需要修复这个错误。

用例:

  • 4x4 网格
  • 在右列选择 3,并在底行选择“索引 2”或“索引 3”。

这样做会产生错误的胜利。我已经用所有其他用例对此进行了测试,这是迄今为止我发现的唯一错误。 (下面提供的图片):

enter image description here enter image description here
这与我的检查系统有关。我提供了它正在测试 bug数组,以及寻找胜利的代码

var b = [ ["", "", "", "X"],
          ["", "", "", "X"],
          ["", "", "", "X"],
          ["", "", "X", ""] ]

function testWin() {
    var len=b.length, r=0, c=0, dr=0, dl=0;
    for(var i=0;i<len;i++){
        c=0;
        for(var j=0;j<len;j++){
            (b[j][i]==="X") ? c++ : c=0;
            (b[i][j]==="X") ? r++ : r=0;
            if(b[i][j]==="X" && i<len-win+1){ 
                dr=0; dl=0;
                for(var z=0;z<win;z++){ 
                    (b[i+z][j+z]==="X") ? dr++ : dr=0;
                    (b[i+z][j-z]==="X") ? dl++ : dl=0;
                }
            }
            if(c===win || r===win || dr===win || dl===win){ 
                         alert("YOU WIN!"); return true;
            }
         } 
         r=0;
    }
}

(我知道,很多三元运算符......希望它仍然有意义。我从头开始构建它,所以如果有人需要我,我可以详细说明。)

最佳答案

每次循环移至下一列时,您都需要重置列计数器c

function testWin() {
    var len=b.length, r=0, c=0, dr=0, dl=0;
    for(var i=0;i<len;i++){
        c=0;
        for(var j=0;j<len;j++){
            (b[j][i]==="X") ? c++ : c=0;
            (b[i][j]==="X") ? r++ : r=0;
            if(b[i][j]==="X" && i<len-win+1){ dr=0; dl=0;
                for(var z=0;z<win;z++){ 
                    (b[i+z][j+z]==="X") ? dr++ : dr=0;
                    (b[i+z][j-z]==="X") ? dl++ : dl=0;
                }
            }
            if(c===win || r===win || dr===win || dl===win){ alert("YOU WIN!"); return true;}
        } r=0;
    }
}

编辑:这是一种仅用两个循环即可实现的方法:

function testWin() {
    var len=b.length, r=0, c=0, dr=0, dl=0;
    for(var i=0;i<len;i++){
        r=0, c=0, dr=0, dl=0;
        for(var j=0;j<len;j++){
            (b[j][i]==="X") ? c++ : c=0;
            (b[i][j]==="X") ? r++ : r=0;
            if(i+j<len){ z = i+j;} else{z = i+j-len, dr=0, dl=0;}
            (b[j][z]==="X") ? dr++ : dr=0;
            (b[j][len-1-z]==="X") ? dl++ : dl=0;
            if(c===win || r===win || dr===win || dl===win){ alert("YOU WIN!"); return true;}
        }
    }
}

关于javascript - 非常具体的错误 - Tic Tac Toe 测试仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21358490/

相关文章:

Javascript 纯文本字符编码

javascript - JQGrid POST 列的值而不是 ID

javascript - 将同步功能转换为异步功能

jquery - 如何使用 jquery 获取元素的第一个 html 子元素(包含该子元素的开始和结束标记)?

arrays - 在 Swift 中对字符串数组进行排序

php - 在 PHP 中初始化(空)数组的最佳方法

javascript - 如何在 Javascript 中处理具有复杂名称的 JSON 属性?

javascript - json_encode() 无法返回 html

javascript - 模态对话框和表单元素

php - 数组的 echo 值?