2012-01-30 7 views
5

Я делаю программу, используя LRV (наименее недавно посещенный) алгоритм. В принципе, я проектирую алгоритм для того, чтобы робот проходил через сетку (которая представляет собой массив двумерных символов). Робот при обходе сетки проверяет, является ли каждая ячейка либо EMPTY (определяется «O»), OCCUPIED (определяется «S»), либо BLOCKED (определяется «X»). Клетки могут быть заняты только объектом, известным как Sensor (у этого есть свой класс). BLOCKED Ячейки не могут быть перемещены. Каждый раз, когда робот должен двигаться, он получает направление от датчика. Таким образом, вначале робот будет помещен в сетку, и он сбросит датчик и получит направление от него или получит направление от уже существующего датчика.Как получить направление для робота из метода в классе датчиков?

Теперь, когда я объяснил свою программу, мой конкретный вопрос: У меня есть датчик класса, который имеет метод getVisitingDirection, который возвращает INT. У меня есть счетчик для каждого направления (север, юг, восток и запад от типа INT) Вот этот класс.

package ITI1121A; 
public class Sensor { 

private int cColumns; 
private int cRows; 
private int North; 
private int South; 
private int West; 
private int East; 

public Sensor(int sX, int sY) { 

cColumns = sX; 
cRows = sY; 
South= -1; 
North = -1; 
West = -1; 
East = -1; 

} 
/* ADD YOUR CODE HERE */ 
public int getX() 
{return cColumns;} 
public int getY() 
{return cRows;} 

public int getVisitingDirection(GridMap g1) 
    boolean temp; 
{ 
    if(cRows==0){ 
    //top row 
    if(cColumns==0){ 
    temp=g1.isCellBlocked(cColumns+1,cRows); 
    if (temp=false){ 
    return West++; 
    } 

    } 

    } 

} 

public void increaseCounter(int direction) 
{} 

} 

Теперь, когда я застрял в в getVisitingDirection, я пытался сделать, если заявления, чтобы проверить верхний левый край сетки (координаты 0,0) и да, что это о нем. Я хочу, чтобы метод дал направление роботу, а затем увеличил счетчик этого направления. Имея настоящую трудность даже при получении концепции здесь. Любая помощь будет высоко оценена! Thanks Varun

+0

Sau робот устанавливается на (3,3) и падает на датчик (3,4), тогда датчик будет инструктировать робота двигаться (2,3), а затем? Робот помещает новый датчик в (3,3) => свою последнюю позицию? Или этот датчик в (3,4) продолжает давать команды в любом месте сетки? – Frankie

+0

, помещенный в (3,3), проверьте, пусто ли, если да, тогда поместите «S» .. затем получите направление от «S» для следующего перемещения, так далее и т. Д. каждый раз, когда робот обнаруживает датчик в ячейке, он запрашивает направление – Mjall2

+0

ах! Таким образом, как робот, так и датчик могут «сосуществовать» в одной ячейке? Робот расположен на (5,5), там нет датчика. Затем он падает на датчик (5,5) и спрашивает о направлениях, что это? – Frankie

ответ

3

Я поставил функцию в псевдокоде, который должен установить вас на правильном пути.

// lets assume binary code where 0000 represents top, right, bottom, left 
// (0011 would mean can go bottom or left) 
public int getVisitingDirection() 
{ 
    String tmpBinary = "b"; // to initialize the field 

    // check if can go up 
    tmpBinary += (cCollums>0&&checkIfUpIsBlocked()) "1" : "0"; 
    // TODO check if can go right (compare with size + 1) 
    // check if can go bottom (compare with size +1) 
    // check if can go left (check if > 0) 

    // when this runs tmpBinary will be in the form of a binary representation 
    // this will be passed to the robot that can then chooses where to go 
    // 1111 would mean that all squares are clear to go 
    // 1101 would mean top, right and left 
    // etc... 

} 

private boolean checkIfUpIsBlocked() 
{ 
    // TODO must check if the cell is blocked 
    return true; 
} 

Обратите внимание, что вам необходимо создать методы checkIfUpIsBlocked +.

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

Как вернуть направление с номером int?
Вы можете использовать двоичную логику и вернуть один int для представления нескольких направлений.

0000 (int 0) => no possible direction 
0001 (int 1) => left direction 
0010 (int 2) => bottom direction 
0011 (int 3) => left and bottom 
0100 (int 4) => right direction 
(...) 
1111 (int 15) => all directions possible 
+0

Хорошо, это очень помогает. Однако мне нужно сохранить указания INT, теперь моя проблема заключается в том, как вернуть INT из getVisitingDirection(), который представляет направление. – Mjall2

+0

У меня есть такие методы, как isCellBlocked() getElementAt() теперь я должен сделать isLeftOf() isRightOf() isAbove() isBelow() Правильно? @Frankie – Mjall2

+0

@ Обновленный ответ Mjall2, чтобы вы могли лучше понять связь между десятичным и двоичным и как вы можете использовать его для сопоставления нескольких направлений с помощью одного int. – Frankie

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

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