2017-01-20 2 views
0

Мне сложно определить, как сохранить предыдущее значение myRover.position. Мне нужно получить к нему доступ, чтобы сделать резервную копию при приближении к препятствию.Как получить доступ к старой стоимости - JavaScript

var myRover = { 
position: [0, 0], 
direction: 'N', 
obstacleX: [0], 
obstacleY: [2], 
marsGrid: [ 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
] 
}; 

//prevent rover from falling off of planet Mars! 
//my best attempt at wrapping a 2d array :-(
function preventSuddenDeath() { 
if (myRover.position[0] > 9) { 
myRover.position[0] = 0; 
} 
if (myRover.position[0] < 0) { 
myRover.position[0] = 9; 
} 
if (myRover.position[1] > 9) { 
myRover.position[1] = 0; 
} 
if (myRover.position[1] < 0) { 
myRover.position[1] = 9; 
} 
} 

Это моя функция для маневрирования препятствия.

function maneuverObstacle() { 
if (myRover.position[0] == myRover.obstacleX && myRover.position[1] == myRover.obstacleY) { 
console.log("Crater ahead at " + myRover.position + ". Please change direction!"); 
return myRover.position(); 
} 
} 

Я попытался установить OldValue равную CurrentValue как таковой и, как я предполагаю, он просто переписывает OldValue к текущему.

И остальное, если полезно.

function move_forward() { 
if (myRover.direction == 'N') { 
myRover.position[0] -= 1; 
} else if (myRover.direction == 'E') { 
myRover.position[1] += 1; 
} else if (myRover.direction == 'S') { 
myRover.position[0] += 1; 
} else if (myRover.direction == 'W') { 
myRover.position[1] -= 1; 
} preventSuddenDeath(); 
} 

function move_backward() { 
if (myRover.direction == 'N') { 
myRover.position[0] += 1; 
} else if (myRover.direction == 'E') { 
myRover.position[1] -= 1; 
} else if (myRover.direction == 'S') { 
myRover.position[0] -= 1; 
} else if (myRover.direction == 'W') { 
myRover.position[1] += 1; 
} preventSuddenDeath(); 
} 

function turn_left() { 
if (myRover.direction == 'N') { 
myRover.direction = 'W'; 
} else if (myRover.direction == 'E') { 
myRover.direction = 'N'; 
} else if (myRover.direction == 'S') { 
myRover.direction = 'E'; 
} else if (myRover.direction == 'W') { 
myRover.direction = 'S'; 
} 
} 


function turn_right() { 
if (myRover.direction == 'N') { 
myRover.direction = 'E'; 
} else if (myRover.direction == 'E') { 
myRover.direction = 'S'; 
} else if (myRover.direction == 'S') { 
myRover.direction = 'W'; 
} else if (myRover.direction == 'W') { 
myRover.direction = 'N'; 
} 
} 

function letsGoMrRover() { 

//take user input from html prompt and convert the string to an array 
var commandString = document.getElementById("command").value; 
var output = document.getElementById("demo"); 
var csLength = commandString.length; 
var commandArray = []; 

//console.log the starting position 
output.innerHTML = "Rover is at " + myRover.position + " and heading " + myRover.direction + "<br />"; 

for (var i=0; i < csLength; i++) { 
commandArray[i] = commandString[i]; 

switch (commandArray[i]) { 
    case 'f': 
    move_forward(); 
    break; 
    case 'b': 
    move_backward(); 
    break; 
    case 'l': 
    turn_left(); 
    break; 
    case 'r': 
    turn_right(); 
    break; 
    } 
maneuverObstacle(); 
console.log(myRover.position); 
} 
} 
+0

Просто введите переменную с именем 'prev' или что-то в этом роде. –

+2

Я должен проверить препятствие перед тем, как переместить ровера. make checkObstacle - функция, которая принимает робота x, y в качестве параметров и возвращает, если его нормально перемещать, таким образом вы можете передать x + 1, y до фактического изменения робота x до x + 1 – softwarenewbie7331

+0

. Зачем нужна мешалка и решетка решетки объекта ровера? Кажется, это три разных вещи. –

ответ

0

Один из способов сделать newPosition переменную, которая вычисляет новое местоположение. Затем проверьте, есть ли у этой новой позиции препятствие, прежде чем обновлять позицию ровера.

В качестве альтернативы, вы можете добавить prevPosition в myRover, чтобы сохранить предыдущую позицию.

+0

@ KH2017 Пожалуйста, отредактируйте свой вопрос, чтобы показать, что вы пробовали. Также не забудьте показать результат и объяснить, как он отличается от того, что вы хотите. –

+0

@ KH2017 Перечитайте мой предыдущий комментарий. –

Смежные вопросы