检查对象是否在矩阵的范围内

时间:2019-11-23 18:37:51

标签: algorithm 2d 2d-games

我想检查一个对象是否在矩阵范围内。
1个范围是玩家(橙色)的9个方块。
但是两个范围是25个方块(蓝色)玩家就是红十字会。

我尝试了以下代码:
`

int size = ((range * 2) +1) * ((range * 2) + 1);
    int sq = (range * 2) + 1;
    int startX = x - range; if (startX < 0) startX = 0;
    int startY = y - range; if (startY < 0) startY = 0;
    int endX = x + range; if (endX > arrayWitdth) endX = arrayWitdth;
    int endY = y + range; if (endY > arrayLenght) endY = arrayLenght;
    //printf("Range: %d\n", range);
    for (size_t i = startX; i < endX; i++)
    {
        for (size_t j = startY; j < endY; j++)
        {
            //printf("Looking at (%d,%d)\n", i, j);
            if (map[i][j] == charTocheck) return 1;
        }
    }

` Matrix

1 个答案:

答案 0 :(得分:1)

您不检查最后一个块,因此正确的实现应为:

int size = ((range * 2) +1) * ((range * 2) + 1);
int sq = (range * 2) + 1;
int startX = x - range; if (startX < 0) startX = 0;
int startY = y - range; if (startY < 0) startY = 0;
int endX = x + range + 1; if (endX > arrayWitdth) endX = arrayWitdth;
int endY = y + range + 1; if (endY > arrayLenght) endY = arrayLenght;
//printf("Range: %d\n", range);
for (size_t i = startX; i < endX; i++)
{
    for (size_t j = startY; j < endY; j++)
    {
        //printf("Looking at (%d,%d)\n", i, j);
        if (map[i][j] == charTocheck) return 1;
    }
}

请注意,endX和endY略有变化。

相关问题