2 个数字之间的随机数字选择器

tuy*_*gun 2 c++ algorithm tic-tac-toe

我正在使用 C++ 开发井字游戏,我想知道是否可以随机化一个数字,但它只能选择 2 或 5。

我在用户和计算机之间进行了随机启动,以便对这些代码块有一个公平的开始:

 srand(time(NULL));
 cout << "The First Person to go is randomly chosen!" << endl;
 FirsttoGo = (rand()%2) + 1;
 cout << "The first move goes to Player: " << FirsttoGo << endl;
 turn = FirsttoGo;
Run Code Online (Sandbox Code Playgroud)

我想添加的功能是,无论谁开始游戏都可以选择 X 或 O,但如果计算机先启动,计算机应该能够在 X 或 O 之间选择。我还为 X 和 O 创建了常数值

static const int O = 5;
static const int X = 2;
Run Code Online (Sandbox Code Playgroud)

有办法做到这一点吗?

101*_*010 5

在 C++11 中,对于生成某个范围内的随机数有非常好的和更安全的添加(请参见下面的代码):

#include <random>
#include <iostream>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 2);
    for (int n=0; n<10; ++n) std::cout << dis(gen) << ' ';
    std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)

此外,在这篇精彩的演讲中,Stephan T. Lavavej 阐述了为什么使用被认为有害的原因rand()

根据上面的示例,您可以针对您的问题进行调整,如下所示:

int getRandomIDX(int const a = 5, int const b = 2) {
  std::random_device rd;
  std::mt19937 gen(rd());
  std::uniform_int_distribution<> dis(1, 2);
  return (dis(gen) == 1)? a : b;
}
Run Code Online (Sandbox Code Playgroud)