-1
userRect라는 동적 할당 객체를 사용하는 프로그램에서 직사각형 모양으로 정렬 된 문자 배열에서 겹치는 부분이 있는지 확인하는 데 문제가 있습니다. . 다른 직사각형 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는 true이고 반대 값을 반환합니다. 내 질문에 버그가 원인이되지 않을까요? 그 중 하나가 true를 반환하고 다른 하나가 false (char 중 하나가 중복된다는 의미)가 반환되면 bool isOverlapping이 항상 false를 반환하는 결과가 여전히 잘못된 bool을 반환하기 때문입니다. –