检查二维字符阵列中的重叠问题

时间:2016-11-05 16:40:17

标签: c++ arrays

我遇到一个程序的一部分有问题,该程序采用一个名为userRect的动态分配对象,并检查它是否以矩形形状排列的字符数组重叠。其他矩形rect [0]和rect [1]随机放置在控制台窗口的虚构网格上。

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('#');
        }

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题。问题出在我的for循环中。如果userRect位于rect [0]的边界内但不在rect [1]的范围内,userRect->draw('#');将覆盖之前刚执行的userRect->draw('+');操作。谢谢大家的帮助。