我正在使用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;
我想添加的功能是,无论谁开始游戏,都可以选择X或O,但如果计算机先开始,计算机应该能够在X或O之间选择。我还为X和O创建了恒定值
static const int O = 5;
static const int X = 2;
有办法吗?
在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';
}
此外,在这个精彩的演讲中,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;
}
(rand() > RAND_MAX/2) ? 2 : 5;
由于您只需要在两个值之间进行选择,因此您已经可以使用时间函数
time_t timer;
time(&timer); // it returns an integral value
如果时间timer
是偶数选第一个,如果不是选第二个。是真正的随机,而不是伪随机
…我猜是有人讨厌简单之美。使用随机设备和分布在两个值之间进行选择,然后
这是最快和最简单的选择随机号码的方法。2号之间-
srand(time(0));
int t[2]={1,3}; //let two no. be 1 & 2
int l= rand() % (2); //get 0 or 1
cout<<t[l]<<endl;
就是这样。干杯!