0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 21
1

Функция rand в цикле выводит одно и то же значение

27.05.2016, 01:10. Показов 2442. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! В общем, прилагаю условие задачи и мой написанный код Проблема, как я считаю, незначительная, однако я никак не могу понять что мне конкретно стоит поменять в моем коде. Проблема с rand(), а конкретно - rand() в цикле выводит мне одни и те же значения, из-за чего нельзя реализовать бросок двух кубиков одновременно. Пытаясь что-то исправить, заметил, что если прописать system("pause") между двумя вызовами функции rollDice() - кубики, в большинстве случаев, попадаются различные. Но это явно будет глупо, потому как на экране два кубика должны появляться мгновенно, без каких-либо пауз. Заранее спасибо

Задача:
Написать игру в которой имитируется бросание кубиков компьютером и пользователем. В игре 2 кубика и на каждом из них может выпасть от 1 до 6 очков. Реализовать определение программой первого ходящего. Каждый делает по четыре броска. После бросков показать, нарисованные символами кубики и количество очков, выпавших на них. После пары бросков (бросок компьютера + бросок пользователя) выводить на экран промежуточный результат — количество набранных очков игроком и компьютером. В конце сообщить о том, кто выиграл по итогам всех бросков.

Кусок кода, ответственный за все:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
int rollDice() {
    srand(time(NULL));
    int roll = 1 + rand() % 6;
    switch (roll) {
    case 1: 
        cout << "@@@@@@@@@@" << endl <<
                "@@@@@@@@@@" << endl <<
                "@@@@  @@@@" << endl <<
                "@@@@@@@@@@" << endl <<
                "@@@@@@@@@@";   
        cout << endl;
        return 1;
        break;
    case 2:
        cout << "@@@@@@@@@@" << endl <<
                "@  @@@@@@@" << endl <<
                "@@@@@@@@@@" << endl <<
                "@@@@@@@  @" << endl <<
                "@@@@@@@@@@";
        cout << endl;
        return 2;
        break;
    case 3:
        cout << "@@@@@@@@@@" << endl <<
                "@  @@@@@@@" << endl <<
                "@@@@  @@@@" << endl <<
                "@@@@@@@  @" << endl <<
                "@@@@@@@@@@";
        cout << endl;
        return 3;
        break;
    case 4:
        cout << "@@@@@@@@@@" << endl <<
                "@  @@@@  @" << endl <<
                "@@@@@@@@@@" << endl <<
                "@  @@@@  @" << endl <<
                "@@@@@@@@@@";
        cout << endl;
        return 4;
        break;
    case 5:
        cout << "@@@@@@@@@@" << endl <<
                "@  @@@@  @" << endl <<
                "@@@@  @@@@" << endl <<
                "@  @@@@  @" << endl <<
                "@@@@@@@@@@";
        cout << endl;
        return 5;
        break;
    case 6:
        cout << "@@@@@@@@@@" << endl <<
                "@  @  @  @" << endl <<
                "@@@@@@@@@@" << endl <<
                "@  @  @  @" << endl <<
                "@@@@@@@@@@";
        cout << endl;
        return 6;
        break;
    }            
    
}
 
int game() {
    
    for (int i = 0; i < 2; i++) {
        int res1 = rollDice();
        cout << endl;
    }
    
    return 0;
    
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2016, 01:10
Ответы с готовыми решениями:

Rand() выдаёт одно и тоже значение в Code::Blocks
Доброго всем здоровья ! Во время выполнения одного из упражнений возникла трудность: функция...

Программа выводит только одно значение
Здравствуйте. Есть код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; using...

При хешировании разных слов функция md5() выводит одно и то же значение
Сталкивался кто-нибудь с проблемой, что при хешировании разных слов, функция md5() выводит одно и...

Функция rand() выдает одно и то же число
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; void main() { int i=rand()%10; printf(&quot;%d&quot;,i); } при...

2
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
27.05.2016, 01:24 2
C++
1
srand(time(NULL));
Это дело надо вызывать один раз перед последующими вызовами rand(); Попробуйте вынести это куда нибудь в начало программы.
1
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 21
27.05.2016, 01:31  [ТС] 3
Спасибо большое! Все работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2016, 01:31
Помогаю со студенческими работами здесь

Rand не выводит рандомное значение
Почему команда rand() srand() не выводит рандомное значение на Win 7 64...

Random в цикле дает одно значение
Random RandomNum = new Random(); while (i &lt; 50) { X =...

Вывести в цикле только одно значение
Здравствуйте. Переделываю дизайн и застрял на выводе языковых иконок. Вот что имею $lang_go //...

Как цикле первым N одно значение, следующим увеличивать
Здравствуйте. Подскажите пожалуйста, нужно в цикле первым трем поставить 1, вторым трём 2, третьим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru