我正在尝试用C ++实现craps游戏,下面给出了规则。所以我创建了一个函数,它会为我生成两个数字,有时候这个函数需要被调用两次,但是第二次调用时它给我的是第一次给我的相同的随机数。
我想随机化第二次调用rollDice()
函数时得到的数字。我该怎么做?
示例输出1:
玩家滚动3 + 4 = 7
玩家赢了!
示例输出2:
玩家滚动2 + 2 = 4
点是4
玩家滚动2 + 2 = 4
玩家赢了!
示例输出3:
玩家滚动1 + 5 = 6
点是6
玩家滚动1 + 5 = 6
玩家赢了!
游戏规则: 规则:一名玩家投掷两个6个面部骰子,如果他们的总和 7 或 11 ,他们就赢了。 如果总和 2,3或12 ,它们会松动。 如果它 4,5,6,8,9,10,12 它变成"点" 并且玩家必须滚动再次。 然后玩家继续滚动,直到他击中"点"再次,他赢了 如果他遇到 7 ,他就会松散。
代码:
#include<iostream>
#include<ctime>
#include <cstdlib>
using namespace std;
//Generating two rand numbers from 1 to 6
int rollDice()
{
srand(time(0));
int face1 = 1 + rand()%6;
int face2 = 1 + rand()%6;
int sum = face1 + face2;
cout << "Player rolled " << face1 << " + " << face2 << " = " << sum << endl;
return sum;
}
string gameStatus; //Hold status of game; WIN, CONTINUE, LOST
int sumOfDice = rollDice();
int point = 0; //This will hold sum of dice if it's default case defined below in Switch.
int main()
{
switch(sumOfDice)
{
case 7:
case 11:
gameStatus = "WIN";
break;
case 2:
case 3:
case 12:
gameStatus = "LOST";
break;
default:
gameStatus = "CONTINUE";
point = sumOfDice;
cout << "Point is " << point << endl;
}
while (gameStatus == "CONTINUE")
{
int rollAgain = rollDice();
if (rollAgain == point)
gameStatus = "WIN";
else if (rollAgain == 7)
gameStatus = "LOST";
}
if (gameStatus == "WIN")
cout << "Player won!";
if (gameStatus == "LOST")
cout << "Player lost!";
}
答案 0 :(得分:3)
srand(time(0));
这会将随机数生成器的种子重置为当前时间。程序启动时只执行一次。如果你在同一秒内完成两次(以便time
返回相同的值),那么每次都会得到相同的随机数序列。