2013-12-22 60 views
1

我有一個任務是爲大學項目製作機器人控制器。目前它進展順利,但我有一個小問題,只是令人討厭,我似乎無法糾正它。C++ 2D矢量設置向量中的位置

基本上,我必須設計一個對比的控制器,以避免障礙物的同時進行隨機移動。所以,我有一個機器人,在控制檯上顯示爲「R」,它在10乘10的範圍內。下面是我用我的初始化二維矢量,然後繪製網格代碼:

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循環它在屏幕上畫出另一個機器人,但似乎並沒有刪除舊的。該代碼的工作原理是將2D矢量中的某個XY分配給char 'R'(這是我的機器人)。我的想法是否正確,我將不得不在每個運動週期後繪製2D矩陣?

感謝

回答

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的東西移到構造函數中)。
+0

是的,我是在正確的思路上。感謝您解決我的問題的三種不同方式。目前我已經通過在每個時間步驟上製作一個新矩陣來快速修復,但我確實認爲這是一種不好的方法。我很喜歡第二種方式,所以我會努力的!謝謝 –