0

我对 C++ 很陌生,想知道是否有更好的方法来做到这一点。它将在 Arduino 上运行,所以我不能使用 ArrayLists 或任何东西。

byte GetFreeCell(short x, short y)
{
    byte possibleMoves[4] = {0,0,0,0};
    if (y - 2 >= 0 && _grid[y - 2][x] == 0)
        possibleMoves[0] = 1;
    if (x + 2 < WIDTH && _grid[y][x + 2] == 0)
        possibleMoves[1] = 2;
    if (y + 2 < HEIGHT && _grid[y + 2][x] == 0)
        possibleMoves[2] = 3;
    if (x - 2 >= 0 && _grid[y][x - 2] == 0)
        possibleMoves[3] = 4;

    if (possibleMoves[0] == 0 && possibleMoves[1] == 0 && possibleMoves[2] == 0 && possibleMoves[3] == 0) {
        return 0;
    }

    byte move = 0;
    while(move == 0){
        move = possibleMoves[random(4)];
    }
    return move;
}

谢谢,

4

2 回答 2

4
byte GetFreeCell(short x, short y)
{
    byte possibleMoves[4];
    byte index = 0;
    if (y - 2 >= 0 && _grid[y - 2][x] == 0)
        possibleMoves[index++] = 1;
    if (x + 2 < WIDTH && _grid[y][x + 2] == 0)
        possibleMoves[index++] = 2;
    if (y + 2 < HEIGHT && _grid[y + 2][x] == 0)
        possibleMoves[index++] = 3;
    if (x - 2 >= 0 && _grid[y][x - 2] == 0)
        possibleMoves[index++] = 4;

    return index ? possibleMoves[random(index)] : 0;
}
于 2013-01-25T20:09:49.647 回答
0

您可以帮自己一个忙并使用它:

https://github.com/maniacbug/StandardCplusplus/#readme

然后,您可以使用标准容器清理您的代码。

此外,C++ 中没有 ArrayList。那是Java。使用上面的库,您可以使用 std::vector 代替。

于 2013-01-25T20:09:21.113 回答