有没有更好的方法从可变大小的数组中选择一个随机元素?

时间:2013-01-25 20:02:58

标签: c++ arduino

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

谢谢,

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

你可以帮个忙,并使用它:

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

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

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