Search code examples
algorithm2d2d-games

Check if object is in range in a matrix


I would like to check if an object is in range in a matrix.
A 1 range would be 9 blocks around the player (orange).
But a two range would be 25 blocks (blue). The player is the red cross.

I tried the following code:
`

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


Solution

  • You don't check the last block, so the correct implementation would be:

    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;
        }
    }
    

    notice that endX and endY have slightly changed.