我目前正在使用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);
在代码的最后一部分,我调用的函数检查是否可以在该位置插入一条船。它需要标签,暗板,这是板的尺寸,例如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;
}
}
}
}
我真的很感谢你的帮助,谢谢你。
答案 0 :(得分:0)
我没有调试你的代码,但这听起来像索引与计数问题。当你有四个项目然后循环它们时,索引为0,1,2,3,项目1,2,3和&amp; 4.你最有可能尝试引用项目nbr 4,但它将在索引3(第4个索引)。索引4处没有任何内容(未定义)。尝试在i = 1而不是i = 0或更好的情况下启动循环,然后将项目设置为零而不是1。