gpt4 book ai didi

javascript - 循环遍历嵌套数组

转载 作者:行者123 更新时间:2023-12-02 18:51:22 24 4
gpt4 key购买 nike

var map = [
["Blank", "Blank", "Blank"],
["Blank", "Player", "Blank"],
["Blank", "Blank", "Blank"]
];

我在循环数组时遇到问题。这里主要是这个功能。假设将“玩家”在矩阵内向下移动一位。

当玩家位置位于顶部时,我尝试的所有操作“玩家”总是会下降到底行。我也遇到了奇怪的 buggy 问题。有时我根本不会更改代码(或者至少我这么认为)。然后代码就不会出现这个问题,然后又会出现这个问题。而且现在我无法让“玩家”向左移动到中间。我将在最后展示该函数的代码。感谢您尝试提供帮助。

function moveDown() {
for (y = map.length - 1; y >= 0 ; y--) {
for (x = map[y].length - 1; x >= 0; x--) {
var posX = map[y].indexOf("Player");

if (posX > -1 && y == 0) {
map[1].splice(posX, 1,"Player");
map[y].splice(posX, 1,"Blank");
return;
} else if (posX > -1 && y == 1) {
map[2].splice(posX, 1,"Player");
map[y].splice(posX, 1,"Blank");
return;
} else if (posX > -1 && y == 2) {
return;
}
}
}

}

这是我的所有代码。如果您没有时间,请不要阅读全部内容。我现在的主要问题是 moveDown() 函数。 (我认为)

var map = [
["Blank", "Blank", "Blank"],
["Blank", "Player", "Blank"],
["Blank", "Blank", "Blank"]
];

var run = true;

menu();
printLoop(map);


while (run) {
var input = prompt();

if (input == "left") {
movePlayer("left");
} else if (input == "right") {
movePlayer("right");
} else if (input == "up") {
movePlayer("up");
} else if (input == "down") {
movePlayer("down");
}

switch (input) {
case "menu":
menu(); break;
case "quit":
run = false; break;
}
menu();
printLoop(map);
}


function movePlayer(direction) {
for (y=0; y<map.length; y++) {
var playerPos = map[y].indexOf("Player");

if (movableRight(playerPos)) {
if (direction == "right") {
map[y].splice(playerPos, 1,"Blank");
map[y].splice(playerPos + 1, 1,"Player");
}
} else if (movableLeft(playerPos)) {
if (direction == "left") {
map[y].splice(playerPos, 1,"Blank");
map[y].splice(playerPos - 1, 1,"Player");
}
}

if (direction == "up") {
moveUp();
} else if (direction == "down") {
moveDown();
}

}

}

/*function getX(obj) {
for (x = 0; x < map.length; x++) {
for (y = 0; y < map[x].length; y++) {
if (map[x][y] == obj) {
return x;
}
}
}
}

function getY(obj) {
for (x = 0; x < map.length; x++) {
for (y = 0; y < map[x].length; y++) {
if (map[x][y] == obj) {
return y;
}
}
}
}*/

function movableLeft(pos) {
if (pos <= 0) {
console.log(pos + "<= 0");
return false;
} else if (pos > map.length - 1) {
console.log(pos + "> map.length - 1");
return false;
} else {
console.log(pos + "true");
return true;
}
}

function movableRight(pos) {
if (pos < 0) {
return false;
} else if (pos >= map.length - 1) {
return false;
} else {
return true;
}
}

function moveUp() {
for (y = 0; y < map.length; y++) {
for (x = 0; x < map[y].length; x++) {
var posX = map[y].indexOf("Player");
if(posX > -1) {
switch (y) {
case 1:
map[0].splice(posX, 1,"Player");
map[y].splice(posX, 1,"Blank");
break;
case 2:
map[1].splice(posX, 1,"Player");
map[y].splice(posX, 1,"Blank");
}
}
}
}

}

function moveDown() {
for (y = map.length - 1; y >= 0 ; y--) {
for (x = map[y].length - 1; x >= 0; x--) {
var posX = map[y].indexOf("Player");

if (posX > -1 && y == 0) {
map[1].splice(posX, 1,"Player");
map[y].splice(posX, 1,"Blank");
return;
} else if (posX > -1 && y == 1) {
map[2].splice(posX, 1,"Player");
map[y].splice(posX, 1,"Blank");
return;
} else if (posX > -1 && y == 2) {
return;
}
}
}

}


function printLoop(array) {
var line0 = "";
var line1 = "";
var line2 = "";

for (y = 0; y < array.length; y++) {
for (x = 0; x < array[y].length; x++) {
switch (y) {
case 0:
line0 += array[y][x] + ", "; break;
case 1:
line1 += array[y][x] + ", "; break;
case 2:
line2 += array[y][x] + ", "; break;
}
}
}
console.log(" ");
console.log(line0);
console.log(line1);
console.log(line2);
console.log(" ");

}

function menu() {
console.log("===============================");
console.log("up - down - right - left - quit");
console.log("===============================");
}

最佳答案

除非我误解了你的问题,否则你把事情复杂化了。这就是您所需要的:

function moveDown() {
for (y = 0; y < map.length; y++) {
var posX = map[y].indexOf("Player");
if (posX < 0) continue;
if ( y == map.length-1 ) break;

map[y][posX] = "Blank";
map[y+1][posX] = "Player";
break;
}
}

迭代顶级数组,直到找到包含玩家的行。然后,一旦您找到播放器,如果它已经位于底部,那么您就完成了。否则,用"Blank"覆盖它,并用"Player"覆盖下一行中的相应位置。

关于javascript - 循环遍历嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com