Генерация другого случайного числа во втором вызове

0

Я пытаюсь реализовать игру craps в C++, правила приведены ниже. Поэтому я создал функцию, которая будет генерировать два числа для меня, иногда эту функцию нужно вызывать дважды, но когда ее вызывают во второй раз, она дает мне то же самое случайное число, которое она дала мне в первый раз.

Я хочу рандомизировать числа, которые я получаю во втором вызове функции 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 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
    Вы должны вызывать srand() один раз, а не каждый раз. Вы повторно вводите случайную последовательность с тем же начальным числом, поэтому вы получаете тот же первый номер указанной последовательности. Позвоните Сранду в начале основного. Или, если вы можете использовать c ++ 11, используйте <random> (мне нужен шаблон для этого комментария, я использую этот совет почти каждую неделю ...)
  • 0
    @Borgleader Вы можете задать подробный вопрос с самостоятельным ответом, а затем пометить все остальные как дубликаты.
Теги:
random

1 ответ

3
Лучший ответ
srand(time(0));

Это сбрасывает семя для генератора случайных чисел на текущее время. Делайте это только один раз, когда запускается программа. Если вы делаете это дважды в течение одной секунды (так что time возвращает одно и то же значение), вы будете получать одну и ту же последовательность случайных чисел каждый раз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню