C++2D矢量设置矢量内的位置

C++ 2D Vector setting a position within the vector

本文关键字:位置 设置 C++2D      更新时间:2023-10-16

我有一项任务要为一个大学项目制作机器人控制器。目前它进展得很顺利,但我有一个小错误,非常烦人,我似乎无法纠正它。

基本上,我必须设计一个对比控制器,以实现随机移动,同时避免障碍物。所以,我有一个机器人,它在控制台上显示为"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();mmatrix的对象

现在,屏幕上的机器人位置是用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循环时,它都会在屏幕上绘制另一个机器人,但似乎并没有删除旧的机器人。该代码通过用char 'R'(这是我的机器人)在2D向量中指定特定的XY来工作。我的想法是正确的吗?我必须在每个运动周期后绘制2D矩阵?

感谢

当您第一次将机器人位置设置为(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内容移动到构造函数)