gpt4 book ai didi

C++ 2D Vector 在 vector 中设置一个位置

转载 作者:行者123 更新时间:2023-11-30 04:10:15 27 4
gpt4 key购买 nike

我有一项任务是为大学项目制作机器人 Controller 。目前它进展顺利,但我有一个令人讨厌的小错误,我似乎无法纠正它。

基本上,我必须设计一个对比 Controller 来实现随机移动,同时避开障碍物。所以,我有一个在控制台上显示为“R”的机器人,它位于 10 x 10 的区域内。这是我用来初始化 2D vector ,然后绘制网格的代码:

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

谢谢

最佳答案

当您第一次将机器人位置设置为 (5,5) 时,您会将 vector2D[5][5] 设置为 R。然后,如果您将位置设置为类似 (5,6) 的位置,您会将 vector2D[5][6] 设置为 R。现在 [5][5][5][6] 都设置为 R,因此机器人处于两个位置。

有一些解决方案取决于您希望如何设计它:

  1. 您可以将当前机器人位置存储在matrix 中,并在robotPosition 的开头将该位置设置为非机器人角色所在的位置。这将在设置新位置之前清除之前的位置。
  2. 您可以在每一帧的开头清除整个矩阵。您 在每一帧的开头调用 update ,它会尝试将 vector 的大小调整为与它们已经存在的大小完全相同的大小 - 这不会清除它。相反,你应该在构造函数中完成这项工作,你可以将 init 变成一个 clear 函数。
  3. 如果你想为每个时间步使用不同的matrix,那么你需要将matrix m;的声明移动到while 循环。然后每个帧都有一个应该在构造期间清除的帧(如果将 init 内容移动到构造函数)。

关于C++ 2D Vector 在 vector 中设置一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com