Javascript - 四子棋游戏验证

标签 javascript

我有以下测试多维数组,它反射(reflect)了标准四子棋游戏板:

var board = [['-','-','-','-','-','-','-'],
             ['-','-','-','-','-','-','-'],
             ['-','-','-','R','R','R','R'],
             ['-','-','-','Y','Y','R','Y'],
             ['-','-','-','Y','R','Y','Y'],
             ['-','-','Y','Y','R','R','R']];

我正在编写一个 js 验证,它检查 board 数组中的每个元素是否有 4 个同类匹配,无论是横向、向下还是对 Angular 线。查看上面的测试板,我的验证器应该返回 R 作为正确答案,因为第三行中有 4 个 R 元素的连接匹配。这是我的代码:

function fourTogether(a,b,c,d) {
   return (a != '-') && (a == b) && (a == c) && (a == d);
}

function connectFour(board) {
  // check RIGHT
   for (row=col=0; row<3 && col<7; row++, col++) {
       if (fourTogether(board[row][col], board[row+1][col], board[row+2][col], board[row+3][col])) {
         return board[row][col];
       }
     } 
    //  check DOWN    
   for (row=col= 0; row<6 && col<4; row++, col++) {
       if (fourTogether(board[row][col], board[row][col+1], board[row][col+2], board[row][col+3])) {
         return board[row][col];
       }
     }    
    //  check DIAGONAL to RIGHT
   for (row=col=0; row<3 && col<4; row++, col++) {
       if (fourTogether(board[row][col], board[row+1][col+1], board[row+2][col+2], board[row+3][col+3])) {
          return board[row][col];
       }
     }
    //  check DIAGONAL to LEFT
   for (row=3, col=0; row<6 && col<4; row++, col++) {
       if (fourTogether(board[row][col], board[row-1][col+1], board[row-2][col+2], board[row-3][col+3])) {
         return board[row][col];
       }
     }
   return board.indexOf('-') > -1 ? 'in progress' : 'draw';
}

所以我基本上使用 fourTogether 函数来建立 4 个同类匹配,并省略 '-' 元素(代表未填充的板槽) 。然后在 connectFour 函数中,我使用四个不同的 FOR 循环根据检查的方向迭代整个数组,然后添加一个 IF语句根据递增的棋盘元素检查 fourTogether 函数。最后,最后有一个三元语句,如果棋盘中没有 4 种匹配,则应返回“平局”或“游戏进行中”,具体取决于是否存在空 '-'板槽。不幸的是,我返回了 undefined 并且我对代码具体失败的地方有点茫然。任何帮助或指示将不胜感激。

最佳答案

for 循环,例如:

for (row=col=0; row<3 && col<7; row++, col++) {

将迭代(0,0),(1,1),(2,2)。你想要的是 (0,0),(0,1),(0,2),...,(1,0),(1,1),(1,2),... 。要实现此目的,您必须使用嵌套循环:

for (row = 0; row<3; row++) {
    for (col = 0; col<7; col++) {
        // do that check
    }
}

关于Javascript - 四子棋游戏验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247472/

相关文章:

javascript - 如何在tinymce中使模板内容不可编辑

javascript - 从左侧进行切换

javascript - 你能在 three.js 中提供一个作为纹理加载的图像作为另一个纹理 mipmap 吗?

javascript - 这是一个完全匿名的对象吗……如果是,您如何访问它?

javascript - 本例中的 Alexa 技能 : How to insert a AMAZON. yesintent 和 AMAZON.nointent ?

javascript - FullCalendar v.2.2.6 'hasTime' 使用 addEventSource 时出现未定义错误

javascript - Firefox 无法创建使用 TypeScript 生成的类的实例

Javascript:编辑表单字段的值?

javascript - 按字母顺序对 Backbone 集合进行排序

javascript - Mozilla 扩展命名空间 : How to differentiate between my function and functions from other packages?