класс — C ++ 2D Вектор, устанавливающий позицию в векторе

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

По сути, я должен создать контрастный контроллер, чтобы обеспечить произвольное движение, избегая препятствий. Итак, у меня есть робот, который отображается как «R» на консоли, который находится в пределах 10 на 10. Вот код, который я использую, чтобы инициализировать мой 2D вектор, а затем нарисовать сетку:

void matrix::init() // init my 2D vector
{
dot = 10; // 10 by 10 area
vector2D.resize(dot);
for (int i=0; i<dot; i++)
{
vector2D[i].resize(dot);
}
}

void matrix::draw() // drawing the vector to the screen
{
for(int i=0; i<dot; i++)
{
for(int j=0; j<dot; j++)
{
cout <<vector2D[i][j]<<"."; // I being the Y access, J the X access
}
cout<<endl;
}
}

void matrix::update()
{
init();
draw();
}

Это в своем собственном классе под названием matrix.cpp, который затем вызывается в main.cpp с m.update(); m будучи объектом matrix

Теперь позиция робота на экране устанавливается с помощью этого кода в пределах matrix.cpp учебный класс

void matrix::robotPosition(int x, int y)
{
bot = 'R';
cout << "X Pos"<< x <<endl;
cout << "Y Pos"<< y <<endl;
vector2D[x][y] = bot; // Outputting location of robot onto the grid / matrix
}

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

int main()
{
matrix m;
robot r;

while(true)
{
m.update(); // vector2D init and draw
m.robotPosition(r.getX(), r.getY());
r.update();
system("pause");
}
}

Каждый раз, когда моя программа проходит цикл while, она рисует на экране другого робота, но, похоже, не удаляет старого. Код работает, назначая определенный X а также Y в 2D-вектор с char 'R' (Какой мой робот). Правильно ли мое мышление, что мне придется рисовать 2D-матрицу после каждого цикла движения?

Спасибо

1

Решение

Когда вы впервые установите положение робота, скажем, (5,5), вы установите vector2D[5][5] в R, Затем, если вы установите положение, подобное (5,6), вы установите vector2D[5][6] в R, Теперь оба элемента [5][5] а также [5][6] установлены в RТаким образом, робот находится в обоих положениях.

Есть несколько решений, которые зависят от того, как вы хотите создать его:

  1. Вы можете сохранить текущую позицию робота в matrix и в начале robotPosition установите эту позицию, какой бы персонаж не был роботом. Это очистит предыдущую позицию перед установкой новой.
  2. Вы можете очистить всю матрицу в начале каждого кадра. Вы являются призвание update в начале каждого кадра, который пытается изменить размеры векторов до того же размера, что они уже есть — это не очищает его. Вместо этого вы должны сделать эту работу в конструкторе, и вы можете включить init в clear функция.
  3. Если вы хотите использовать другой matrix для каждого временного шага, то вам нужно переместить объявление matrix m; в while петля. Тогда у вас есть один для каждого кадра, который должен быть очищен во время строительства (если вы перемещаете init материал для конструктора).
2

Другие решения

Других решений пока нет …