2017-01-31 9 views
1

Я работаю над программой 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); 
 
}

+1

Название этого вопроса бесценно! –

+0

Неясно из вашего вопроса, что именно вы спрашиваете и какой ответ вы ожидаете. Это правильный ответ? : «Храните команды в массиве, а затем итерации через массив, выполняющий одну команду за другой». – Matey

+0

@Matey, как только вы выполните этот код, пользователь должен написать букву «w», для которой «s» не работает «d», и «a» означает «идти влево». Моя программа читает только один символ, поэтому я могу только шаг за шагом ходить по сетке. Что я хочу сделать, так это написать «wsdawwwwd» или любую другую серию команд, и в качестве примера вы перемещаете мой ровер из координат [0,0] в [1,4]. – randseed1724

ответ

1

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

Что вам нужно сделать, так это использовать прослушиватели событий. Вот пример того, как это можно сделать, привязывая их к телу документа.

const W_KEY = 119; 
const A_KEY = 97; 
const S_KEY = 115; 
const D_KEY = 100; 

document.body.addEventListener("keypress", function(e) { 
    let entry = null; 

    switch(e.keyCode) { 
    case W_KEY: 
     entry = "w"; 
     break; 
    case A_KEY: 
     entry = "a"; 
     break; 
    case S_KEY: 
     entry = "s"; 
     break; 
    case D_KEY: 
     entry = "d"; 
     break; 
    } 

    if(entry) { 
    console.log("Key " + entry + " was pressed!"); 

    AJRover.move(key); 
    } 

} 
+0

, как я сказал Matey: «После того, как вы выполните этот код, пользователь должен написать письмо« w », для которого« s »не работает« d », и« a »означает« go ». Моя программа читает только один символ, поэтому я могу только шаг за шагом ходить по сетке.Что я хочу написать «wsdawwwwd» или любую другую команду команд, и это переместит мой ровер из координат [0,0] в [1,4] как пример ». – randseed1724

+0

@AlejandroJimenez Я переписал свой ответ в соответствии с новой спецификацией. – jankoritak

+0

Это должно работать только в консоли! – randseed1724

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

  • Нет связанных вопросов^_^