Javascript 尝试建立一个宾果游戏,而循环无限,可以';我似乎找不到原因

Javascript 尝试建立一个宾果游戏,而循环无限,可以';我似乎找不到原因,javascript,infinite-loop,Javascript,Infinite Loop,我正在尝试创建一个宾果游戏 这是给我们的任务。我写了所有我需要的函数,但是“main”函数运行整个程序,它有一个循环,不会停止。 我似乎不知道是什么使它无限,因为我给了它一个在最后停止的条件 代码有点长。我希望你能帮助我 var gNums=[] 变量gPlayers=[ { 名称:'player1', 命中率:0, 董事会:creatBingoBoard() }, { 名称:'player2', 命中率:0, 董事会:creatBingoBoard() } ] //var check=gPl

我正在尝试创建一个宾果游戏

这是给我们的任务。我写了所有我需要的函数,但是“main”函数运行整个程序,它有一个循环,不会停止。 我似乎不知道是什么使它无限,因为我给了它一个在最后停止的条件

代码有点长。我希望你能帮助我

var gNums=[]
变量gPlayers=[
{
名称:'player1',
命中率:0,
董事会:creatBingoBoard()
},
{
名称:'player2',
命中率:0,
董事会:creatBingoBoard()
}
]
//var check=gPlayers[0]。线路板[0][0]。isHit=true
//console.table(PrintBingBoard(gPlayers[0].board))
//控制台.table(printBingoBoard(gPlayers[1].board))
//var check=gPlayers[0]。线路板[0][0]。isHit=true
玩宾果游戏
//console.table(gPlayers[0].board)
函数playBingo(){
//调试器
resetNums()
var isVictory=错误
而(!胜利){
//console.log('仍在运行!')
var calledNum=drawNum(gNums)
//console.log(calledNum)
对于(var i=0;!isVictory&&i}
markBoard
中,您检查
player.board[i][j]
的值。这是一个对象,但您将其与一个数字进行比较。您所追求的数值似乎是
player.board[i][j]。值


正如其他人在评论中所述,解决此类问题的最佳方法是使用调试器。Chrome Developer Tools允许您附加断点并检查代码中对象的值。但是,记录变量的值也是一个很好的调试工具。

markBoard
中,您可以检查的值de>player.board[i][j]。这是一个对象,但您将其与一个数字进行比较。您所追求的数值似乎是
player.board[i][j]。值

正如其他人在评论中所述,解决此类问题的最佳方法是使用调试器。Chrome Developer Tools允许您附加断点并检查代码中对象的值。但是,记录变量的值也是一个很好的调试工具。

成功了

我尽量不把你的代码弄乱太多

我的更改用
/标记,使其正常工作

我尽量不把你的代码弄乱太多

我的更改标记为
/
var gNums=[]
变量gPlayers=[
{
名称:'player1',
命中率:0,
董事会:creatBingoBoard()
},
{
名称:'player2',
命中率:0,
董事会:creatBingoBoard()
}
]
//var check=gPlayers[0]。线路板[0][0]。isHit=true
console.table(PrintBingBoard(gPlayers[0].board))
控制台.table(printBingoBoard(gPlayers[1].board))
//var check=gPlayers[0]。线路板[0][0]。isHit=true
玩宾果游戏
//console.table(gPlayers[0].board)
函数playBingo(){
//调试器
resetNums()
var isVictory=错误
而(!胜利){
//console.log('仍在运行!')
var calledNum=drawNum();
//
var gNums=[]
变量gPlayers=[
{
名称:'player1',
命中率:0,
董事会:creatBingoBoard()
},
{
名称:'player2',
命中率:0,
董事会:creatBingoBoard()
}
]
//var check=gPlayers[0]。线路板[0][0]。isHit=true
console.table(PrintBingBoard(gPlayers[0].board))
控制台.table(printBingoBoard(gPlayers[1].board))
//var check=gPlayers[0]。线路板[0][0]。isHit=true
玩宾果游戏
//console.table(gPlayers[0].board)
函数playBingo(){
//调试器
resetNums()
var isVictory=错误
而(!胜利){
//console.log('仍在运行!')
var calledNum=drawNum();

//这看起来像是调试器的基本情况。你的宾果游戏规则是什么?我看到你允许玩家卡上有重复的数字。OP似乎还没有检查任何宾果游戏序列。OP,你是否在可疑的
循环中每次迭代后都记录
player.hitCounts
你的宾果游戏规则是什么?我看到你允许玩家卡上有重复的数字。OP似乎还没有检查任何宾果游戏序列
var gNums = []

var gPlayers = [

  {
    name: 'player1',
    hitCounts: 0,
    board: creatBingoBoard()
  },
  {
    name: 'player2',
    hitCounts: 0,
    board: creatBingoBoard()
  }
]
// var check=gPlayers[0].board[0][0].isHit = true
console.table(printBingoBoard(gPlayers[0].board))
console.table(printBingoBoard(gPlayers[1].board))

// var check = gPlayers[0].board[0][0].isHit = true
playBingo()
// console.table(gPlayers[0].board)

function playBingo() {
  // debugger
  resetNums()
  var isVictory = false
  while (!isVictory) {
    // console.log('still running!')
    var calledNum = drawNum();
   //<-- Fix 1 for some reason callednum is coming as Undefined
    if(calledNum){
        // console.log(calledNum)
        for (var i = 0; !isVictory && i < gPlayers.length; i++) {
          var player = gPlayers[i]
          markBoard(player, calledNum)
          isVictory = checkBingo(player)
        }
    }
    //<-- Fix 2 I am stopping fo gNums is empty 
    if(gNums.length == 0) isVictory=true;

  }
  console.table(printBingoBoard(gPlayers[0].board))
  console.table(printBingoBoard(gPlayers[1].board))
}

function creatBingoBoard() {
  resetNums()
  var board = [];
  const SIZE = 5;
  for (var i = 0; i < SIZE; i++) {
    board[i] = [];
    for (var j = 0; j < SIZE; j++) {
      board[i][j] = {
        value: getRandomIntInclusive(0, 25),
        isHit: false
      }
    }
  }
  return board;
}

function printBingoBoard(board) {
  var bingoBoardCopy = []
  var size = board.length
  for (var i = 0; i < size; i++) {
    bingoBoardCopy[i] = []
    for (var j = 0; j < size; j++) {
      if (board[i][j].isHit === true) {
        bingoBoardCopy[i][j] = board[i][j].value + 'v'
      } else bingoBoardCopy[i][j] = board[i][j].value
    }
  }
  return bingoBoardCopy
}

function resetNums() {
  gNums = []
  for (var i = 0; i < 25; i++) {
    gNums.push(i)
  }
  return gNums
}

function drawNum() {
  var index = getRandomIntInclusive(0, gNums.length);
  var num = gNums[index];
  gNums.splice(index, 1);

  return num;
}

function markBoard(player, calledNum) {
  for (var i = 0; i < player.board.length; i++) {
    for (var j = 0; j < player.board.length; j++) {
      var cell = player.board[i][j]
  //<-- Fix3 Cell is a object so we need to check with value 
      if (cell.value === calledNum) {
        player.hitCounts++
          cell.isHit = true
      }
    }

  }
  printBingoBoard(player.board)
}

function checkBingo(player) {
  // for (var i = 0; i < player.length; i++) {
  // if (player.hitsCount === 25) return true
  if (player.hitCounts === 25) {
    return true
  }

  return false;
}

function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive 
}