2016-11-05 3 views
-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('#'); 
     } 
+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이고 반대 값을 반환합니다. 내 질문에 버그가 원인이되지 않을까요? 그 중 하나가 true를 반환하고 다른 하나가 false (char 중 하나가 중복된다는 의미)가 반환되면 bool isOverlapping이 항상 false를 반환하는 결과가 여전히 잘못된 bool을 반환하기 때문입니다. –

답변

0

: 여기

내 코드의 샘플입니다. 문제는 for 루프에서 발생했습니다. userRect가 rect [0]의 경계 내에 있지만 rect [1]의 경계 내에 있지 않은 경우 userRect->draw('#');은 방금 전에 실행 된 userRect->draw('+'); 작업을 덮어 씁니다. 모든 도움을 주셔서 감사합니다.