在第二次调用中生成不同的随机数

时间:2014-12-04 13:47:39

标签: c++ random

我正在尝试用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!";
}

1 个答案:

答案 0 :(得分:3)

srand(time(0));

这会将随机数生成器的种子重置为当前时间。程序启动时只执行一次。如果你在同一秒内完成两次(以便time返回相同的值),那么每次都会得到相同的随机数序列。