У меня есть задание сделать контроллер робота для университетского проекта. На данный момент все идет хорошо, но у меня есть ошибка, которая чертовски раздражает, и я не могу ее исправить.
По сути, я должен создать контрастный контроллер, чтобы обеспечить произвольное движение, избегая препятствий. Итак, у меня есть робот, который отображается как «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-матрицу после каждого цикла движения?
Спасибо
Когда вы впервые установите положение робота, скажем, (5,5), вы установите vector2D[5][5]
в R
, Затем, если вы установите положение, подобное (5,6), вы установите vector2D[5][6]
в R
, Теперь оба элемента [5][5]
а также [5][6]
установлены в R
Таким образом, робот находится в обоих положениях.
Есть несколько решений, которые зависят от того, как вы хотите создать его:
matrix
и в начале robotPosition
установите эту позицию, какой бы персонаж не был роботом. Это очистит предыдущую позицию перед установкой новой.update
в начале каждого кадра, который пытается изменить размеры векторов до того же размера, что они уже есть — это не очищает его. Вместо этого вы должны сделать эту работу в конструкторе, и вы можете включить init
в clear
функция.matrix
для каждого временного шага, то вам нужно переместить объявление matrix m;
в while
петля. Тогда у вас есть один для каждого кадра, который должен быть очищен во время строительства (если вы перемещаете init
материал для конструктора).Других решений пока нет …