C ++ 2D Vector在向量中设置位置

时间:2013-12-22 15:44:35

标签: c++ class robotics 2d-vector

我有一个为大学项目制作机器人控制器的任务。目前它进展顺利,但我有一个令人烦恼的琐事,我似乎无法纠正它。

基本上,我必须设计一个对比度控制器,以便在避开障碍物的同时实现随机移动。所以,我有一个机器人在控制台上显示为“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循环时,它会在屏幕上绘制另一个机器人,但似乎不会删除旧的机器人。该代码的工作原理是在2D矢量中使用X(这是我的机器人)分配某个Ychar 'R'。我的想法是否正确,我必须在每个运动周期后绘制2D矩阵?

由于

1 个答案:

答案 0 :(得分:2)

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