Форум программистов, компьютерный форум CyberForum.ru

Игра в кубики - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
HelloWorld56
5 / 5 / 1
Регистрация: 29.03.2012
Сообщений: 62
02.05.2012, 18:27     Игра в кубики #1
Игра «кубики». Условие: имеется два игральных кубика со значениями от 1 до 6. Игра происходит с компьютером, кубики бросаются поочередно. Побеждает тот, у кого сумма выпавших очков по итогам пяти бросков больше.

C++ (Qt)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <ctime>
 
using namespace std;
 
int brosok (); // Прототип функции, которая генерирует случайное чило от 1 до 6
 
int main ()
 
{
    setlocale (LC_CTYPE, "Russian");
 
    int summ_1 = 0; // Накопление очков копмьютера
    int summ_2 = 0; // Накопление очков пользователя
    int number;     // Суда будет вводиться переименная, чтобы игрок бросил кубик
    int k_1 = 0;    // Суда присваивается сгенерированное число для компьютера
    int k_2 = 0;    // Суда присваивается сгенерированное число для пользователя
 
 
    //Первый бросок
    cout<<"\t\t\tПервый бросок\n";
    cout<<"Первый бросает компьютер."<<"\n"; 
    k_1 = brosok (); // Суда присваивается сгенерированное число для компьютера
    cout<<"Компьютеру выпало "<<k_1<<"\n\n"; //Вывод сгенерированного  числа для компьютера
    summ_1 = summ_1 + k_1; // Накопление очков копмьютера
    k_1 = 0; // Обнуление перемменной
     
    
    cout<<"Теперь ваш бросок, чтобы бросить нажмите 1: "<<"\n";
    cin>>number; // Ввод перемменной, чтобы бросить
    k_2 = brosok (); //Суда присваивается сгенерированное число для пользователя
    cout<<"Вам выпало "<<k_2<<"\n\n"; //Вывод сгенерированного  числа для пользователя
    summ_2 = summ_2 + k_2; //Накопление очков пользователя
    k_2 = 0; //Обнуление перемменной
 
    cout<<"\t\t\tВторой бросок\n\n";
    
 
 
    
    //Второй бросок
    cout<<"Бросок компьютера."<<"\n";
    k_1 = brosok ();
    cout<<"Компьютеру выпало "<<k_1<<"\n\n";
    summ_1 = summ_1 + k_1;
    k_1 = 0;
    
 
    cout<<"Теперь ваш бросок, чтобы бросить нажмите 1: "<<"\n";
    cin>>number;
    k_2 = brosok ();
    cout<<"Вам выпало "<<k_2<<"\n\n";
    summ_2 = summ_2 + k_2;
    k_2 = 0;
 
    cout<<"\t\t\tТретий бросок\n";
    //Третий бросок
    cout<<"Бросок компьютера."<<"\n";
    k_1 = brosok ();
    cout<<"Компьютеру выпало "<<k_1<<"\n\n";
    summ_1 = summ_1 + k_1;
    k_1 = 0;
    
    
    cout<<"Теперь ваш бросок, чтобы бросить нажмите 1: "<<"\n";
    cin>>number;
    k_2 = brosok ();
    cout<<"Вам выпало "<<k_2<<"\n\n";
    summ_2 = summ_2 + k_2;
    k_2 = 0;
    
    //Проверка результата
    if (summ_1 > summ_2)
    {
        cout<<"\t\t\tВыиграл компьютер"<<"\n";
    }
    if (summ_2 > summ_1)
    {
        cout<<"\t\t\tВы победили!"<<"\n";
    }
    else if (summ_1 == summ_2)
    {
        cout<<"\t\t\tНичья"<<"\n";
    }
 
    return 0;
}
 
int brosok ()
{
    srand( time( 0 ) );
    int a;
    a = 1 + rand() % 6;
    return a;
    
}
На скриншотах ниже видно, что количество брошенных очков компьютером и игроком постоянно совпадают, хотя и задействована функция rand ()
http://***********/F/s019.***********/...3d886.png.html
http://***********/F/s59.***********/i...468c3.png.html
http://***********/F/s019.***********/...43250.png.html
Что не так, объясните пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JokerNN
132 / 128 / 36
Регистрация: 29.12.2011
Сообщений: 359
02.05.2012, 19:01     Игра в кубики #2
C++
1
srand(time(NULL));
Вынесите в начало main() а из функции бросок уберите. Также рекоммендую в цикле каждую пару бросков организоват для пущей гибкости (если я например 10 раз захочу кинуть кости, 10 раз нужно будет одни и те же строчки писать?)

Забыл добавить: такое происходит потому, что вы каждый раз вызывали srand() перед функцией получения случайного значения. Происходило это всё с разницей менее 1 секунды, а для одинаковых значений, скармливаемых srand(), будут одинаковые значения rand().
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
02.05.2012, 19:13     Игра в кубики #3
JokerNN, да не, для одного и того же srand ф-я rand() будет выдавать одно и тоже значение вроде
upd: это я к тому, что по логике, в main не нужно выносить srand
JokerNN
132 / 128 / 36
Регистрация: 29.12.2011
Сообщений: 359
02.05.2012, 19:24     Игра в кубики #4
Ну я это и написал) А если не убрать srand() из функции - он будет вызываться каждый раз, а вызов функции который вызывает srand() происходит 2 раза подряд без пауз. То есть время в секундах выдаётся одно и то же, соответственно и рандом одинаковый, то есть решение проблемы сабжа - либо вызывать srand() один раз в программе, либо ставить паузу между вызовами, либо искать медленную машину
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
02.05.2012, 19:26     Игра в кубики #5
аа, при rand() srand() тоже меняется.
GAGAn
3 / 3 / 0
Регистрация: 20.09.2012
Сообщений: 37
02.10.2012, 19:01     Игра в кубики #6
Раскоментируйте пожалуйста вот эту часть кода
C++
1
2
3
4
5
6
7
8
int brosok ()
{
    srand( time( 0 ) );
    int a;
    a = 1 + rand() % 6;
    return a;
    
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2012, 19:11     Игра в кубики
Еще ссылки по теме:

C++ Игра "Кубики"
C++ Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон
Ваня и кубики. Олимпиадная задача C++

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
02.10.2012, 19:11     Игра в кубики #7
Цитата Сообщение от GAGAn Посмотреть сообщение
Раскоментируйте пожалуйста вот эту часть кода
Может быть закомментируйте?

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
int brosok ()// функция бросок
{
    srand( time( 0 ) ); // задаёт начальное значение (зерно)
    int a;
    a = 1 + rand() % 6; // а присваивает случайные значения от 1 до 6
    return a; // возвращает а
    
}
Yandex
Объявления
02.10.2012, 19:11     Игра в кубики
Ответ Создать тему
Опции темы

Текущее время: 13:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru