function takePath(jstring, move) {
var string = JSON.parse(jstring);
var crystal = 0;
var grid = string['grid'];
var start = string['start'];
var x = start[0];
var y = start[1];
for (var i of move) {
start = movePlayer(string, move[i]);
if (grid[y][x] === 0 || grid[y][x] === 2) {
if (grid[y][x] == 2) {
crystal += 1;
grid[y][x] = 0;
}
}
var object = {
"location": start,
"crystals": crystal
};
return object;
}
}
function movePlayer(string, move){
var start = string['start'];
var grid = string['grid'];
var x = start[0];
var y = start[1];
var len = grid.length;
var xaxis = 0;
var yaxis = 0;
if (move === 'w'){
y = start[1] - 1;
yaxis = yaxis - 1;
if (y > len - 1){
return start;
}
if (y < 0){
return start;
}
if (grid[y][x] == 1){
return start;
}
if (grid[y][x] == 3){
return start;
}
if (grid[y][x] == 7){
return start;
}
else;
return [x,y];
}
if (move === 'a'){
x = start[0] - 1;
xaxis = xaxis - 1;
if (x > len - 1){
return start;
}
if (x < 0){
return start;
}
if (grid[y][x] == 1){
return start;
}
if (grid[y][x] == 3){
return start;
}
if (grid[y][x] == 7){
return start;
}
else;
return [x,y];
}
if (move === 's'){
y = start[1] + 1;
yaxis = yaxis + 1;
if (y > len - 1){
return start;
}
if (y < 0){
return start;
}
if (grid[y][x] == 1){
return start;
}
if (grid[y][x] == 3){
return start;
}
if (grid[y][x] == 7){
return start;
}
else;
return [x,y];
}
if (move === 'd'){
x = start[0] + 1;
xaxis = xaxis + 1;
if (x > len - 1){
return start;
}
if (x < 0){
return start;
}
if (grid[y][x] == 1){
return start;
}
if (grid[y][x] == 3){
return start;
}
if (grid[y][x] == 7){
return start;
}
else;
return [x,y];
}
return start;
}
Часть 3: Давайте теперь расширим функцию takePath, чтобы отслеживать количество кристаллов, собранных игроком. Начните с решения части 2 и расширьте его для этой части. Напишите функцию с именем «takePath», которая принимает в качестве параметров строку JSON, представляющую уровень в указанном выше формате, и массив строк, представляющих движения игрока в том порядке, в котором они выполняются, где каждый ход - либо «w», «a» , "s" или "d", используя тот же стандарт, что и в частях 1 и 2. Возвращает объект, содержащий ключи "location", сохраняющий новое местоположение игрока в виде массива в формате [x, y] и "кристаллы", сохраняющие количество кристаллов, собранных игроком на пути. Вы можете предположить, что на уровне нет ключей, запертых дверей, ботинок, плиток лавы или выхода. Также можно предположить, что игрок не запускается на кристалле
возвращено: {'кристаллы': 0, 'местоположение': [2, 1]} ожидается: {'кристаллы': 1, 'местоположение': [3, 1]}
Вот ввод: ['{"начало": [2, 1], "сетка": [[1, 1, 0, 1], [1, 2, 0, 2], [2, 2, 2, 1] ], [0, 1, 0, 0]]} ', [' d ',' w ',' s ',' a ',' d ',' d ']]]
Код нам НЕ был дан; Я написал это сам. Я пытаюсь понять, почему вывод неверен.
Я отредактировал соответственно, спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если показанный вами код не является частью задания, а является вашим решением, было бы хорошо, если бы вы объяснили его нам, а также предоставили образец ввода, который дал неправильный результат.