首页 > 解决方案 > 战舰错误JavaScript

问题描述

我目前正在用 Javascript 开发 Battleship 游戏,但是,每次运行代码都会出现Cannot read property '4' of undefined错误。

我到处寻找答案,但找不到任何答案。我还尝试console.log查看未定义的内容,我认为这是我的变量选项卡,它是游戏的棋盘,但我找不到解决方案使其未定义。

这是我创建板的代码:

var tab = [];
for (var i=0; i<dim; i++) {
    tab.push([]);
    for(var j=0; j<dim; j++) {
      tab[i].push(0);  
    }    
}

generateships(tab, dim, 1, 4); 
generateships(tab, dim, 2, 3); 
generateships(tab, dim, 3, 2);
generateships(tab, dim, 4, 1); 

在代码的最后一部分,我调用了检查是否可以在该位置插入船的函数。它需要tab,dim,这是板的尺寸,例如10,船的数量,最后是船的长度。

function generateships(tab, dim, numbships, boatlen) {
  for (var i = 0; i < numbships; i++) {
    var empty = false;
    while (!empty) {
      var direction = Math.floor(Math.random() * 2);
      if (direction === 1) {
        var X = Math.floor(Math.random() * (dim - boatlen));
        var Y = Math.floor(Math.random() * dim);
        for (var i = 0; i < dim; i++) {
          if (tab[X][Y + i] == 0) {
            empty = true;
          } else {
            empty = false;
          }
        }
      } else {
        var X = Math.floor(Math.random() * dim);
        var Y = Math.floor(Math.random() * (dim - boatlen));
        for (var k = 0; k < dim; k++) {
          if (tab[X + k][Y] == 0) {
            empty = true;
          } else {
            empty = false;
          }
        }
      }
    }
    shiplocations(numbships, boatlen, direction, X, Y);
  }
}

我调用的最后一个函数是将船插入特定位置的函数。它需要船只的数量、船的长度、方向和坐标。

function shiplocations(numbships, boatlen, direction, X, Y) {
  for (var k = 0; k < numbships; k++) {
    for (var i = 0; i < boatlen; i++) {
      if (direction === 1) {
        tab[X][Y + i] = boatlen;
      } else if (direction != 1) {
        tab[X + i][Y] = boatlen;
      }
    }
  }
}

我真的很感谢你的帮助,谢谢。

标签: javascript

解决方案


我还没有调试过你的代码,但这听起来像是一个索引与计数的问题。当您有四个项目并遍历它们时,项目 1、2、3 和 4 的索引为 0、1、2、3。很可能您正在尝试引用项目 nbr 4,但它将位于索引 3 (第四指数)。索引 4 处将没有任何内容(未定义)。尝试从 i = 1 而不是 i = 0 开始循环,或者更好地从零而不是 1 开始你的项目。


推荐阅读