Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 28.10.2020
Сообщений: 20

Игра в кости с++

18.07.2022, 16:23. Показов 2106. Ответов 10

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

В общем, все6 написала - вроде, работает, но все результаты записываются в одну переменную - либо в ComputerScore, либо PlayerScore
Почему?



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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
bool TheFirst() {//1-пользователь, 0-компьютер
    return rand() % 2;
}
void Cubes(int score) {
    switch (score)
    {
    case 1:
        cout << "-----------" << endl;
        cout << "|         |" << endl;
        cout << "|         |" << endl;
        cout << "|    *    |" << endl;
        cout << "|         |" << endl;
        cout << "|         |" << endl;
        cout << "-----------" << endl;
        break;
    case 2:
        cout << "-----------" << endl;
        cout << "|         |" << endl;
        cout << "|    *    |" << endl;
        cout << "|         |" << endl;
        cout << "|    *    |" << endl;
        cout << "|         |" << endl;
        cout << "-----------" << endl;
        break;
    case 3:
        cout << "-----------" << endl;
        cout << "|         |" << endl;
        cout << "|    *    |" << endl;
        cout << "|    *    |" << endl;
        cout << "|    *    |" << endl;
        cout << "|         |" << endl;
        cout << "-----------" << endl;
        break;
    case 4:
        cout << "-----------" << endl;
        cout << "|         |" << endl;
        cout << "|  *   *  |" << endl;
        cout << "|         |" << endl;
        cout << "|  *   *  |" << endl;
        cout << "|         |" << endl;
        cout << "-----------" << endl;
        break;
    case 5:
        cout << "-----------" << endl;
        cout << "|         |" << endl;
        cout << "|  *   *  |" << endl;
        cout << "|    *    |" << endl;
        cout << "|  *   *  |" << endl;
        cout << "|         |" << endl;
        cout << "-----------" << endl;
        break;
    case 6:
        cout << "-----------" << endl;
        cout << "|         |" << endl;
        cout << "|  *   *  |" << endl;
        cout << "|  *   *  |" << endl;
        cout << "|  *   *  |" << endl;
        cout << "|         |" << endl;
        cout << "-----------" << endl;
        break;
    }
}
void IntermediateResult(int computerScore, int playerScore, int numberThrow) {
    cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
    cout<< "Комп: "<< computerScore<< " ||| Ты:"<< playerScore<< endl;
    cout<< "После "<< numberThrow + 1<< "-го броска ";
    if (computerScore > playerScore)
        cout<< " выигрывает компьютер!!!\n";
    else if (computerScore < playerScore)
        cout<< " выигрываете Вы!!!\n";
    else cout<< " ничья!!!\n";
    cout<< "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n";
}
int Throw() {
    int Result = 0;
    char b = 0;
    cout << "Нажми 'B', чтобы бросить кубики: ";
    do
    {
        cin.sync(); // очистка буфера
        cin >> b;
    } while (b != 'b' && b != 'B');
 
    int temp = 0;//для накопления очков
    for (int i = 0; i < 2; ++i) {
        temp = 1 + rand() % 6;
        Cubes(temp);
        Result += temp;
        cout << "++++++++++++++++++++++++" << endl;
    }
    cout << "Всего очков:" << Result << endl;
    return Result;
}
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    int PlayerScore = 0;
    int ComputerScore = 0;
    int Move = 0;
    Move = TheFirst();
    int i;
    for (i = 0; i < 4; ++i) {
        for (int j = 0; j < 2; ++j) {
            if (Move) {
                cout << "Ты первый!" << endl;
                PlayerScore += Throw();
            }
            else
                cout << "Первым ходит компьютер!" << endl;
            ComputerScore += Throw();
        }
        Move != Move;
    }
    IntermediateResult(ComputerScore, PlayerScore, i);
    if (ComputerScore > PlayerScore) {
        cout << "Компьтер победил!" << endl;
    }
    else if (ComputerScore < PlayerScore) {
        cout << "Ура!Ты победил" << endl;
    }
    else
        cout << "Победила дружба!" << endl;
 
        return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2022, 16:23
Ответы с готовыми решениями:

Игра Кости, игра с компьютером
Всем привет! Делаю консольную игру Кости. Условия такие: 1) Перед игрой все игроки бросают кость, первым начинает тот, у кого выпало...

Игра в кости
НУжно написать на C++ игру в кости,консольную,с использованием генератора случайных чисел. т.е есть два игрока один бросает генерируеца...

Игра в кости
Написать программу, которая имитирует игру в кости. Игроки (2 человека) кидают по 2 кубика (генерировать значения генератором случайных...

10
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.07.2022, 18:28
Цитата Сообщение от Kikiiiii132 Посмотреть сообщение
Move != Move;
это ничего не изменит, вообще ничего, просто сравнение Move из самим собой
C++
1
Move = Move ? 0 : 1;
Добавлено через 3 минуты
Еще вариант
C++
1
Move = !bool(Move);
1
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,268
19.07.2022, 15:30
C
1
2
3
4
5
    else
    {                
        cout << "Первым ходит компьютер!" << endl;             
        ComputerScore += Throw();
    }
Фигурные скобки после else забыл поставить. При этом в результате if-else выполнится только первая строчка, а вторая будет выполняться безусловно, всегда. Что у тебя и происходит.
2
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
19.07.2022, 15:46
Move = !Move; Тоже работает
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
19.07.2022, 18:02
Цитата Сообщение от ram876 Посмотреть сообщение
Move = !Move; Тоже работает
ну ты прям Колумб ...

Добавлено через 1 час 48 минут
В итоге просто выбираем читабельную запись.
C++
1
2
3
    i = i ? 0 : 1;
    i = !i;
    i = !bool(i);
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
        cmp     DWORD PTR [rbp-4], 0
        sete    al
        movzx   eax, al
        mov     DWORD PTR [rbp-4], eax
        cmp     DWORD PTR [rbp-4], 0
        sete    al
        movzx   eax, al
        mov     DWORD PTR [rbp-4], eax
        cmp     DWORD PTR [rbp-4], 0
        sete    al
        movzx   eax, al
        mov     DWORD PTR [rbp-4], eax
Понемногу приучаю себя явно приводить типы. Для более читабельного кода.
1
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
19.07.2022, 19:05
Цитата Сообщение от SmallEvil Посмотреть сообщение
Понемногу приучаю себя явно приводить типы. Для более читабельного кода.
тогда уж так
C++
1
i = static_cast<int>(!static_cast<bool>(i));
Ну и i = !i более читабельно. Вопрос в том, почему тип Move изначально не bool, т.к. использование этой переменной исключительно "логическое", а код не сишный.

И в контексте задачи логичнее было бы использовать Move = (Move + 1) % NUM_PLAYERS
2
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
19.07.2022, 19:13
Цитата Сообщение от zayats80888 Посмотреть сообщение
i = static_cast<int>(!static_cast<bool>(i));
Оно то так, и так бы и было бы, в случае разных пользовательских типов с возможным неявным приведением.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ну и i = !i более читабельно.
В конкретном этом случае, да.
Но в выражении , нет.
Видел выражение, в реальном чьем то коде, там в одном таком, было 3-5 неявных преобразований, к булеву типу, к указателям, и это было жесть просто ...
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,215
19.07.2022, 19:38
Цитата Сообщение от SmallEvil Посмотреть сообщение
Понемногу приучаю себя явно приводить типы. Для более читабельного кода.
??? "Понемногу приучаю себя ходить с костылями. Для большей усточивости".

Типы в коде дожны упоминаться только в объявлениях и больше нигде. Сам код должен быть максимально type agnostic. Это и есть более читабелный код. То есть в клде не должно быть никаких явных приведений типов и вообще никаких упоминаний типов за пределами объявлений, настолько, насколько это вообще возможно. Практически вся эволюция языков С и С++ уже давно направлена именно на это.
1
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
19.07.2022, 19:39
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Типы в коде дожны упоминатиься только в объявлениях и больше нигде. Сам код должен быть максимально type agnostic. Это и есть более читабелный код.
А зачем тогда придумали все эти _cast?
В каких случаях оправдано использование _cast?
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,215
19.07.2022, 19:47
Цитата Сообщение от SmallEvil Посмотреть сообщение
В итоге просто выбираем читабельную запись.
C++
1
2
3
    i = i ? 0 : 1;
    i = !i;
    i = !bool(i);
Совершенно неприемлемо и нечитабельно для переменной типа int, к тому же не обладающей выраженно булевской семантикой. Натягивание совы булевской семантики на арифметически по своей сути глобус - не более чем "кулхацкерство", сильный удар по удобочитаемости.

Нет, читабельно будет либо явное i = i == 0 ? 1 : 0, либо классическое i = 1 - i.

Добавлено через 4 минуты
Цитата Сообщение от Nishen Посмотреть сообщение
В каких случаях оправдано использование _cast?
Во-первых, в исключительных, то есть когда без них - никак. ..._cast должен быть виден за версту. Для того и придумали ..._cast.

Во-вторых, есть особая категория кастов - арифметические касты, которые бывают нужны в довольно обширном наборе повседневных ситуаций. Арифметические касты не являются "исключительными". (В том числе по этой причине я лично выступаю против использования ..._cast для выполнения арифметических кастов).
2
19.07.2022, 20:19

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Типы в коде дожны упоминаться только в объявлениях и больше нигде.
Любитель поразводить круги по воде, опять ... Новое хобби ?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.07.2022, 20:19
Помогаю со студенческими работами здесь

Игра в кости C++
Написать программу, которая имитирует игру в кости. Игроки (2 человека) кидают по 2 кубика(генератор случайных чисел). У кого сумма на...

Игра в кости
Здравствуйте, не могли бы вы написать простенькую программу? Просто в C++ не шарю, а к зачету нужно сделать эту прогу. Вот собственно...

Игра в кости
всем привет. я недели 3 учусь писать на с++. в моей программе почему то переменная int дает отрицательное число. именно в этой...

Игра в кости
3. Составить программу для игры в “кости”. Играющий называет любое число в диапазоне от 2 до 12 и ставку, которую он делает в этот ход....

Игра в кости. Исправьте код
Вот мой код : // Игра в кубики #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main() { ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru