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('#');
}
ここに実際の質問はありません。また、ヘルプを得る機会を増やしたい場合は、これを[MCVE](http://stackoverflow.com/help/mcve)にコンパクトにしたいかもしれません。 – Dolda2000
あなたの開発環境はほぼ確実に[デバッガを持っています](https://en.wikipedia.org/wiki/Debugger)。あなたがすぐにそれを使いこなすほど、より生産的なプログラマーになるでしょう。 – user4581301
私はデバッガを使用していますが、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を返します。 –