var map = [
["Blank", "Blank", "Blank"],
["Blank", "Player", "Blank"],
["Blank", "Blank", "Blank"]
];
配列のループ処理に問題があります。主にこちらの機能です。「プレーヤー」をマトリックス内で1つ下に移動することを想定しています。
「プレーヤー」を試してみると、プレーヤーの位置が一番上にある場合、常に一番下の行にドロップダウンします。また、私は奇妙なバグの問題を抱えています。コードをまったく変更しない場合もあります (または、少なくとも変更すると思います)。そして、コードにはこの問題はありませんが、再び発生します。また、現在、「プレーヤー」を中央から左に移動させることはできません。最後にその関数のコードを示します。助けてくれてありがとう。
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("===============================");
}