我知道,这可能是有关JavaScipt的最常见错误!但是我已经阅读过,至少有20篇关于StackOverflow上这个错误的文章没有给我提供我需要的信息。所以,提前抱歉任何愚蠢的问题! ;)
我正在使用JavaScript开始一个基本的战舰游戏。现在,我有两个功能:船(生成船)和桌子(生成表格并与用户交互。这些是完整的功能:
表:
function table (){
const DIM = parseInt(prompt("Insert the size:"));
var arr = [];
for (var i = 0; i < DIM; i++){
arr[i] = [];
for (var j = 0; j < DIM; j++){
arr[i][j] = parseInt(0);
}
}
arr = boats(5, 1, DIM, arr); //1 Carrier
arr = boats(4, 1, DIM, arr); //1 Battleship
arr = boats(3, 2, DIM, arr); //2 Cruiser
arr = boats(2, 3, DIM, arr); //3 Destroyer
arr = boats(1, 4, DIM, arr); //4 Submarines
console.log(arr);
}
船:
function boats (siz, numb, DIM, arr){
console.log(arr);
var size = siz;
var nrboats = numb;
var step = 0;
while (step < nrboats) {
var random_column = parseInt(Math.floor((Math.random() * DIM)));
console.log(random_column);
var random_line = parseInt(Math.floor((Math.random() * DIM)));
console.log(random_line);
var verification = true;
var orientation = "";
while (verification && orientation === "") {
for(var k = 0; k < size; k++) {
if (arr[random_line][Math.min((random_column) + k, DIM-1)] === 0 && arr[random_line][((random_column) + 1 + k)] === 0 && arr[random_line][((random_column) - 1 + k)] === 0 && arr[((random_line) + 1)][(random_column + k)] === 0 && arr[((random_line) - 1)][(random_column + k)] === 0) {
verification = true;
orientation = "horizontal";
} else if (arr[Math.min((random_line) + k,DIM-1)][random_column] === 0 && arr[((random_line) + k)][((random_column) + 1)] === 0 && arr[((random_line) + k)][((random_column) - 1)] === 0 && arr[((random_line) + 1 + k)][random_column] === 0 && arr[((random_line) - 1 + k)][random_column] === 0) {
verification = true;
orientation = "vertical";
} else {
verification = false;
}
}
if (verification && orientation === "horizontal") {
for(var i = 0; i < size; i++){
arr[random_line][random_column+i] = 1;
}
step++;
} else if (verification && orientation === "vertical") {
for(var j = 0; j < size; j++){
arr[random_line+j][random_column] = 1;
}
step++;
}
}
return arr;
}
这可能是一个简单的问题,但我无法弄清楚发生了什么!任何帮助都会很棒!
谢谢,
mikeysantana
答案 0 :(得分:0)
在random_line
等情况下,arr[((random_line) + k)][random_column]
变量的值大于数组arr
的长度-1,因此您正在执行undefined[random_column]
。
对于你在那里看到的每个random_line变量,你需要确保它们不超过数组的lastIndex,我做了一行:
...else if (arr[Math.min((random_line) + k,DIM-1)][random_column] === 0 && arr[((random_line) + k)][((random_column) + 1)] === 0 && arr[((random_line) + k)][((random_column) - 1)] === 0 && arr[((random_line) + 1 + k)][random_column] === 0 && arr[((random_line) - 1 + k)][random_column] === 0){....
确保它与您的游戏逻辑一致。在某些情况下,战列舰的大小太大而不适合你的网格,特别是当你的随机变量朝向阵列附近但你有一艘大船适合时。