2016-11-05 14 views
-1

userRectという動的に割り当てられたオブジェクトを取得し、矩形の形に配列された文字の配列で重複しているかどうかを調べるプログラムの一部で問題が発生します。他のrectangle rect [0]とrect [1]は、コンソールウィンドウの仮想グリッド上にランダムに配置されます。2次元配列の文字列の重複チェックで問題が発生しました

rect [0] '0'で印刷します rect [1] '1'で印刷します userRectは重複が存在しない場合は '#'で印刷されます。 userRectは、別のオブジェクトと重なっている配列内の各文字に '+'を付けて出力します。

オブジェクト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は真で、その逆を返します。私の質問はバグの原因ではないでしょう。なぜなら、返されたものの1つがtrueで、もう1つがfalseを返すと(つまり、文字が重複していることを意味します)結果は間違ったboolを返すため、bool isOverlappingは常にfalseを返します。 –

答えて

0

私が間違っていたものを考え出しました。問題は私のforループにありました。 userRectがrect [0]の境界内にあり、rect [1]の境界内ではない場合、userRect->draw('#');は、直前に実行されたuserRect->draw('+');オペレーションを上書きします。すべての助けをいただきありがとうございます。

関連する問題