生成线性随机整数C ++

时间:2018-09-11 00:51:03

标签: c++

因此,我正在尝试寻找一种非常有效的方法来从范围生成数字。基本上,我正在为计算机与计算机之间的井字游戏编写代码。我要确保计算机在2D数组中随机标记X / O。随机点将是array [random] [random]。

例如,我要移动3x3的TicTacToe

我使用:

int range = 3;
int random = rand() % range + 1; 

几百次之后,我得到的随机数只有3个,这导致游戏中无效的移动。

我想知道您是否可以给我一个思路,如何在一个很小的范围之间生成一个非常线性的随机整数。非常感谢!

1 个答案:

答案 0 :(得分:1)

不能完全确定“非常线性随机”是什么意思,但是如果您的数组是3x3,我相信您想使用

const int range = 3;
int random = rand( ) % range; // Get random index [0 - 2]

为您的3x3阵列生成有效的索引。

或者,如果您的棋盘限制为3x3,则可以只创建一个预定义的std :: pair对的std :: vector-然后在每局游戏开始时对向量使用std::(random_)shuffle。这将避免为已经播放的空间生成随机坐标。但是,这种方法在较大的电路板上无法很好地扩展。

示例矢量:

std::vector<std::pair<size_t, size_t>> coords
{
    std::pair<size_t, size_t>(0, 0),
    std::pair<size_t, size_t>(0, 1),
    std::pair<size_t, size_t>(0, 2),
    std::pair<size_t, size_t>(1, 0),
    // ...
    std::pair<size_t, size_t>(2, 2)
};

请参见How to shuffle a std::vector,以获取有关如何对向量进行随机播放的快速示例。