2016-11-05 72 views
-1

我遇到了一個程序的一部分出現問題,它需要一個名爲userRect的動態分配對象,並檢查它是否重疊在以矩形形狀排列的字符數組上。其他矩形rect [0]和rect [1]隨機放置在控制檯窗口中的假想網格上。檢查字符的二維數組中的重疊問題

rect [0]用'0'打印0 rect [1]用'1'打印出來 如果沒有重疊,userRect用'#'打印出來。 userRect在與另一個對象重疊的數組中的每個char處用'+'打印。

對象userRect可與w,a,s,d鍵一起移動。 應該發生的事情是當用戶移動userRect對象並且它與另一個rect對象重疊時。每個重疊的字符都被替換爲「+」。

當userRect重疊另一個矩形時,程序不打印'+'。任何人都可以指出是什麼導致了這一點?

這裏是我的代碼示例:

bool isOverlapping(Rect const & r) const 
    { 
     return !(min.x >= r.max.x || max.x <= r.min.x 
      || min.y >= r.max.y || max.y <= r.min.y); 
    } 


int main() 
{ 
    srand(time(NULL)); 
    // initialization 
    Rect * userRect; 
    const int rectSize = 5; 
    Rect rect[rectSize]; 
    const int ARRAY_SIZE = 13; // size of userRect 
    userRect = new Rect(); 

    // set 
    rect[0].setRandom(rect[0]); 
    rect[1].setRandomByPointer(& rect[1]); 
    userRect->setMin(7, 5); 
    userRect->setMax(10, 9); 
    //rect0.setMin(10, 2); 
    //rect0.setMax(14, 4); 
    //rect1.setMin(1, 6); 
    //rect1.setMax(5, 15); 
    int userInput; 

    do 
    { 
     // draw 
     rect[0].draw('0'); 
     rect[1].draw('1'); 
     for (int i = 0; i < ARRAY_SIZE; i++) 
     { 
      if (userRect->isOverlapping(rect[i])) 
      { 
       userRect->draw('+'); 
      } 
      else userRect->draw('#'); 
     } 
+0

我在這裏沒有看到實際的問題。另外,如果您希望增加獲得幫助的機會,您可能需要將其壓縮到[MCVE](http://stackoverflow.com/help/mcve)中。 – Dolda2000

+0

您的開發環境幾乎可以肯定[有調試器](https://en.wikipedia.org/wiki/Debugger)。你越早使用它,你就會越有效率的程序員。 – user4581301

+0

我正在使用調試器,從我可以告訴userRect-> isOverlapping(rect [i])傳遞每個rect [i]對象到函數中,並檢查是否min.x> = r.max.x || max.x <= r.min.x || min.y> = r.max.y || max.y <= r.min.y爲真,返回相反。我的問題是這不會導致錯誤,因爲如果其中一個返回true和另一個返回false(意味着一個是字符重疊),結果仍然會返回錯誤的布爾導致布爾isOverlapping總是返回false。 –

回答

0

我已經想通了,什麼是錯的。問題出在我的循環中。如果userRect位於rect [0]的邊界內,但不在rect [1]的範圍內,則userRect->draw('#');將覆蓋剛剛在其之前執行的userRect->draw('+');操作。謝謝你們的幫助。