Я работаю над программой Mars to Rover с JavaScript, и я уже закончил итерацию 1, которая позволяет моему роверу перемещаться во все направления в 2 измерениях (x, y). Теперь наступает итерация №2, где мне нужно рассказать о серии команд для ровера и выполнить их последовательно.Марс для Rover на JavaScript. Мне нужно уметь сообщать серию команд роуверу и выполнять их последовательно.
Пожалуйста, дайте мне некоторое представление о том, как вы могли бы сделать итерации 2.
Это мой текущий код:
// --------- Mars Rover Kata: Iteration #1 ------------ \\
// ------------------- User Experience using Console --------- \\
var promptSay = "Play with the Console!\nW = UP \nS = DOWN \nD = RIGHT \nA = LEFT";
var gridEdge = "You can\'go there! \n\nPlease notice that you are playing with an imaginary grid and the farest you can go is 9 steps";
var wrongInput = "---WRONG INPUT!--- Please use a correct input i. e. : \nW = UP \nS = DOWN \nD = RIGHT \nA = LEFT";
// Object Definition: (Vars inside a Var , may have functions) \\
var AJRover = {
position : [0, 0],
invalidInput: function(notright) { // Notification for invalid Input
alert(notright);
this.move(prompt(wrongInput));
},
invalidKey: function(message) { // Notification if you reach grid's edge
alert(message);
this.move(prompt(promptSay));
},
move: function(moveRover) { //Directions
switch(moveRover.toLowerCase()) {
case 'w':
this.goDirection("up");
break;
case 's':
this.goDirection("down");
break;
case 'd':
this.goDirection("right");
break;
case 'a':
this.goDirection('left');
break;
default:
this.invalidInput(wrongInput);
}
},
goDirection: function(direction) { //Directions Functions
switch(direction) {
case 'up':
if (this.position[1] >= -9 && (this.position[1] + 1) <= 9) {
this.position[1]++;
break;
} else {
this.invalidKey(gridEdge);
break;
}
case 'down':
if (this.position[1] <= 9 && (this.position[1] -1) >= -9) { // this needs to go back and stop at -9
this.position[1]--;
break;
} else {
this.invalidKey(gridEdge);
break;
}
case 'right':
if (this.position[0] >= -9 && (this.position[0] + 1) <= 9) {
this.position[0]++;
break;
} else {
this.invalidKey(gridEdge);
break;
}
case 'left':
if (this.position[0] <= 9 && (this.position[0] -1) >= -9) {
this.position[0]--;
break;
} else {
this.invalidKey(gridEdge);
break;
}
}
}
};
// ---- object END ----- \\\
// 1- This function calls the object move (this.move)
// 2- Sends the alert to prompts the var promptSay
// 3- Expects input to decide the output
while (true) { //This code block allows user move the rover on mars by interacting with console
var entry = prompt(promptSay);
AJRover.move(entry);
console.log('You are now at position: ', AJRover.position);
}
Название этого вопроса бесценно! –
Неясно из вашего вопроса, что именно вы спрашиваете и какой ответ вы ожидаете. Это правильный ответ? : «Храните команды в массиве, а затем итерации через массив, выполняющий одну команду за другой». – Matey
@Matey, как только вы выполните этот код, пользователь должен написать букву «w», для которой «s» не работает «d», и «a» означает «идти влево». Моя программа читает только один символ, поэтому я могу только шаг за шагом ходить по сетке. Что я хочу сделать, так это написать «wsdawwwwd» или любую другую серию команд, и в качестве примера вы перемещаете мой ровер из координат [0,0] в [1,4]. – randseed1724