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

Игра "Кости". Упростить код - C++

Восстановить пароль Регистрация
 
Nikolay_1
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 24
15.01.2014, 23:25     Игра "Кости". Упростить код #1
Дело в том , что нужно написать игру "Кости" на С++

Вот код:

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
[#include <ctime>
#include <locale>
#include <cstdlib>
#include <iostream>
using namespace std;
 
void roll(int &s) {
    static const char *ds[] = {
        " -----\n|     |\n|  .  |\n|     |\n -----\n",
        " -----\n|.    |\n|     |\n|    .|\n -----\n",
        " -----\n|.    |\n|  .  |\n|    .|\n -----\n",
        " -----\n|.   .|\n|     |\n|.   .|\n -----\n",
        " -----\n|.   .|\n|  .  |\n|.   .|\n -----\n",
        " -----\n|.   .|\n|.   .|\n|.   .|\n -----\n"
    };
    int d1 = rand() % 6 + 1, d2 = rand() % 6 + 1;
    cout << ds[d1 - 1] << ds[d2 - 1] << "выброшено: " << d1 + d2 << "; всего: " << (s += d1 + d2);
}
 
int main() {
    srand(static_cast<unsigned>(time(0)));
    locale::global(locale(""));
    bool run = true;
    int us = 0, gus = 0, cs = 0, gcs = 0;
    while (run) {
        cout << "\nваш бросок (нажмите Enter)";
        char c = cin.get();
        roll(us);
        cout << "\nбросок компа:\n";
        roll(cs);
        if (cs >= 36 || us >= 36) {
            if (cs == us) continue;
            cout << (cs > us ? "\nкомп выиграл этот раунд" : "\nвы выиграли этот раунд")
                << "; общий счет: вы - " << (gus += us > cs) << "; комп - " << (gcs += cs > us)
                << "\nпродолжить игру (введите 1 для продолжения или 0 для окончания) ";
            if (cin.get() != '1') run = false;
            cin.sync();
            cs = us = 0;
        }
    }
    cout << (gus == gcs ? "ничья\n" : gus > gcs ? "вы выиграли\n" : "вы проиграли\n")
        << "нажмите Enter для выхода";
    cin.get();
}
А нужно что-то типо этого :

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
#include <conio.h>
using namespace std;
 
void main() {
    SetConsoleOutputCP(1251);
    srand(GetTickCount());
 
    int playerCounter = 0;
    int computerCounter = 0;
 
    int playerThrow = 0;
    int computerThrow = 0;
 
    int choice = 0;
 
    while (1) {
        cout<<"\tИгра \"Кости\""<<endl;
        cout<<"Нажмите Esc, чтобы выйти или любую другую клавишу, чтобы сделать бросок"<<endl;
        cout<<"Ваш счёт: "<<playerCounter<<"\tСчёт соперника: "<<computerCounter<<endl;
        choice = getch();
        if (choice == 27) {
            break;
        } else {
            playerThrow = rand() % 6 + 1;
            computerThrow = rand() % 6 +1;
            cout<<"Ваш бросок: "<<playerThrow<<"\tБросок соперника: "<<computerThrow<<endl;
            if (playerThrow >computerThrow) {
                cout<<"Вы выиграли"<<endl;
                playerCounter++;
            } else if (computerThrow > playerThrow) {
                cout<<"Соперник выиграл"<<endl;
                computerCounter++;
            } else cout<<"Ничья"<<endl;
        }
        system("pause");
        system("cls");
    }
}
P.S. Нужно оставить принцип тот-же , но как-нибудь по другому (с помощью циклов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
16.01.2014, 02:05     Игра "Кости". Упростить код #2
Цитата Сообщение от Nikolay_1 Посмотреть сообщение
Нужно оставить принцип тот-же , но как-нибудь по другому (с помощью циклов)
тут итак с помощью циклов. Что вас конкретно не устраивает в этом коде?
Nikolay_1
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 24
16.01.2014, 02:53  [ТС]     Игра "Кости". Упростить код #3
Мне дали задание изменить данный код так , чтобы он не был похож на предыдущий , (т.е. два варианта решения с помощью циклов) я нашел только одно ... Имеется ввиду , возможно ли вообще его как-нибудь переписать , чтобы смысл (код программы) остался тот же но немного по-другому чтобы они не были одинаковы.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
16.01.2014, 06:08     Игра "Кости". Упростить код #4
Цитата Сообщение от Nikolay_1 Посмотреть сообщение
данный код так , чтобы он не был похож на предыдущий
второй - данный, первый - предыдущий?
Цитата Сообщение от Nikolay_1 Посмотреть сообщение
чтобы смысл (код программы) остался тот же но немного по-другому чтобы они не были одинаковы.
ничего не понятно. Код тот же, но программы разные? Нет - это нереально. Код разный, но программы при выполнении ведут себя одинаково - перепишите все под С++11 с <random> и через std::bind. Вас тяжело понять.
Nikolay_1
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 24
16.01.2014, 06:22  [ТС]     Игра "Кости". Упростить код #5
Цитата Сообщение от MrGluck Посмотреть сообщение
второй - данный, первый - предыдущий?

ничего не понятно. Код тот же, но программы разные? Нет - это нереально. Код разный, но программы при выполнении ведут себя одинаково - перепишите все под С++11 с <random> и через std::bind. Вас тяжело понять.
да первый это "сложный" для меня код. Я еще этого не изучал а вот второй это как раз то что нужно..

Дело в том что мне дали домашнее задание , сделать игру "Кости" несколькими вариантами (используя операторы и циклы) , я смог написать только через while , if / else , еще можно как-то через switch и нужно что-бы игра вела счёт до бесконечного числа. Как это написать через swich , первый пост код в этой теме возможно переделать на подобии второго? Этот вопрос меня и беспокоит как это сделать используя другие операторы и\или возможно использовать цикл for , я заранее прошу прошения если где-то не корректно выражаюсь , изучаю С++ всего лишь месяц , очень интересно , но в книгах ничего не понятно ... Вот разобрался только в этом и то с горем пополам. Если можно покажите пример кода написанный через оператор switch.
Очень надо.Заранее благодарю.

Добавлено через 4 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
второй - данный, первый - предыдущий?

ничего не понятно. Код тот же, но программы разные? Нет - это нереально. Код разный, но программы при выполнении ведут себя одинаково - перепишите все под С++11 с <random> и через std::bind. Вас тяжело понять.
Нет , Программы одни и те же , коды написаны разными людьми первый человеком мне не знакомым (помог) написал по-своему (с какими-то мне пока еще не известным способом + он использовал "псевдографику" (сам так сказал) , а второй написал я , но мне преподаватель дал задание написать игру двумя способами через if/else и через switch , что касается последнего я затрудняюсь , так как элементарно нет опыта. Вот в принципе и всё что мне нужно.
Yandex
Объявления
16.01.2014, 06:22     Игра "Кости". Упростить код
Ответ Создать тему
Опции темы

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