【问题标题】:Check if object is in range in a matrix检查对象是否在矩阵的范围内
【发布时间】:2020-03-19 12:16:47
【问题描述】:

我想检查一个对象是否在矩阵的范围内。
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;
        }
    }

`

【问题讨论】:

    标签: algorithm 2d 2d-games


    【解决方案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 略有变化。

    【讨论】:

    • 谢谢。我觉得我很亲近。
    猜你喜欢
    • 2021-03-30
    • 2011-09-17
    • 2018-05-16
    • 2023-04-03
    • 2017-07-13
    • 1970-01-01
    • 2016-05-03
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多