我是编程新手,我的朋友给了我以下问题。

宾果游戏-给定一个数组数组,编写一个函数来检查是否有赢家(对角线,直下等连续三个)

      var bingo = [
        [0,0,0],
        [0,0,0],
        [0,0,0]
        ];


我一直在努力像这样进行设置。

      function winCheck(bingo) {
        for (var i = 0; i < bingo[i].length; i++) {
           if (/* ??????? */) {
              /*?????*/
           } else {
              /*?????*/
           }
        }
      }


我不确定该如何处理。我是否需要在一个循环中循环?以我目前的知识,我只知道如何遍历单个数组。先感谢您。

最佳答案

按照您想要的方式执行此操作的代码太多,因此请首先确保:是否真的必要?如果数组的大小变化或未知,我们将无法进行任何优化,我们的函数将首先检查所有水平线:

function winCheck(bingo)
{
  // check for all values equals to 1 in any horizontal row:
  for (var i = 0; i < bingo.length; i++)
  {
    winner = true;

    for(var j=0; j < bingo[i].length; j++)
    {
      if(bingo[i][j] != 1)
      {
        winner=false;
        break;
      }
    }

    if(winner)
      return true;
  }

  // now the same code for for vertical rows
  // . . .

  // and finally two simple loops to check diagonals
  // . . .

  return false;
}


但是,如果数组大小始终为3 x 3,则一切都会改变!我们可以运行一个循环来检查水平和垂直行,最后如果中间单元格中有1,则对角线进行其他检查:

function winCheck(bingo)
{
  var winner = false;
  for (i=0; i<3; i++)
    if(winner = (bingo[i][0]==1) && (bingo[i][1]==1) && (bingo[i][2]==1))
      break;
    else if(winner = (bingo[0][i]==1) && (bingo[1][i]==1) && (bingo[2][i]==1))
      break;

  if(!winner)
    if(bingo[1][1]==1)
      if(!(winner = (bingo[0][0]==1) && (bingo[2][2]==1)))
        winner = (bingo[0][2]==1) && (bingo[2][0]==1);

   return winner;
 }

关于javascript - 连续三个检查宾果游戏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36840363/

10-11 03:04
查看更多