Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
1

Симулятор бомжа. При повторном сне отнимается здоровье, досуге, сытости

03.06.2015, 22:29. Просмотров 2008. Ответов 26
Метки нет (Все метки)


Когда например выбираешь поспать прибавляется здоровье, но отнимается досуг и еда. Так вот, когда выбираешь поспать опять, то отнимается и здоровье, и все остальное. А также, это происходить и с досугом, и с едой. Почему? Что у меня в коде не так?
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include <random>
#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;
using std::cout;
using std::endl;
using std::cin;
int jizni = 100;    
int dosug = 100;
int eda = 100;
char razdel;
char zdorovie;
char razvlechenie;
char sitost;
int level = 1;
int opit = 0;
int skolkonado = 20000;
void Osnova(){
    cout << "Ваши жизни: " << jizni << "   " << "Ваш досуг: " << dosug << "    " << "Ваша еда: " << eda;
    cout << "   " << "Ваш уровень: " << level << "   " << opit << "/" << skolkonado << endl; 
}
int main()
{
    setlocale(LC_ALL, "Russian");
    int sdoh = 0;
    int vichitanie;
    do
    {
    srand(time(NULL));
    int randombomj = rand()%5 + 1;
    int randomopit1 = rand()%20 + 1;
    int randomopit2 = rand()%50 + 1;
    int randomopit3 = rand()%90 + 1;
    int randomopit4 = rand()%200 + 1;
    if(jizni < 0 || eda < 0 || dosug < 0){
        if(jizni < 0)
            jizni = 0;
         if(eda < 0)
             eda = 0;
         if(dosug < 0)
             dosug = 0;
    }
    if(dosug > 100 || eda > 100 || jizni > 100){
        if(jizni > 100)
            jizni = 100;
         if(eda > 100)
             eda = 100;
         if(dosug > 100)
             dosug = 100;
    }
    if(opit >= skolkonado)
    {
        level++;
        vichitanie = opit - skolkonado;
        opit = 0;
        skolkonado += 200;
        opit += vichitanie; 
        jizni = 100;
        eda = 100;
        dosug = 100;
        system("cls");
        cout << "Поздравляем, ваш уровень повысился!" << endl;
        system("pause");
        system("cls");
    }
    Osnova();
 
    cout << "1: Здоровье" << endl;
    cout << "2: Развелечение" << endl;
    cout << "3: Сытость" << endl;
 
    cin >> razdel;
 
    switch(razdel)
    {
    case '1':{ 
        system("cls"); 
        Osnova();
        cout << "1: Поспать" << endl; cout << "2: Сходить в аптеку" << endl; 
        cout << "3: Народная медицина" << endl;
        cin >> zdorovie; 
        break;
             }
    case '2':{ 
        system("cls");
        Osnova();
        cout << "1: Поболтать с бомжами" << endl; 
        cout << "2: Сходить в туалет" << endl; 
        cout << "3: Поссать на тратуар" << endl;
        cin >> razvlechenie;
        break;
             }
    case '3':{ 
        system("cls");
        Osnova();
        cout << "1: Забирать еду у голубей" << endl;
        cout << "2: Просить бабулек дать семечек" << endl;
        cout << "3: Шариться в помойке" << endl;
        cin >> sitost;
        break;
             }
    }
 
    switch(zdorovie)
    {
        case '1':
            {
                jizni += rand()%17 + 1;
                dosug -= rand()%15 + 1;
                eda -= rand()%15 + 1; 
                opit += randomopit1;
                break;
            }
        case '2':
            {
                jizni += rand()%17 + 1;
                dosug -= rand()%15 + 1;
                eda -= rand()%15 + 1; 
                opit += randomopit1;
                break;
            }
        case '3':
            {
                jizni += rand()%17 + 1;
                dosug -= rand()%15 + 1;
                eda -= rand()%15 + 1; 
                opit += randomopit2;
                break;
            }
        default: system("cls"); return main();
    }
    switch(razvlechenie)
    {
        case '1':{
            dosug += rand()%20 + 1;
            jizni -= rand()%25 + 1;
            eda -= rand()%15 + 1;
    if(randombomj == 3){
        jizni -= 40;
        system("cls");
        cout << "Говорила мама, не общайся с незнакомцами.Тебя избили твои собратья - бомжи" << endl;
        system("pause");
    } 
    opit += randomopit1;
    break;
                 }
        case '2':{ 
            dosug += rand()%20 + 1;
            jizni -= rand()%25 + 1;
            eda -= rand()%15 + 1;
            opit += randomopit1;
            break;
                 }
        case '3':{
            dosug += rand()%20 + 1;
            jizni -= rand()%25 + 1;
            eda -= rand()%15 + 1;
            opit += randomopit2;
            break;
                 }
        default: system("cls"); return main();
    }
 
    switch(sitost)
    {
        case '1':{ 
            eda += rand()%17 + 1;
            dosug -= rand()%15 + 1;
            jizni -= rand()%15 + 1;
            opit += randomopit1 ;
            break;
                 }
        case '2':{
            eda += rand()%17 + 1;
            dosug -= rand()%15 + 1;
            jizni -= rand()%15 + 1;
            opit += randomopit1 ;
            break;
                 }
        case '3':{
            eda += rand()%17 + 1;
            dosug -= rand()%15 + 1;
            jizni -= rand()%15 + 1;
            opit += randomopit1 ;
            break;
                 }
        default: system("cls"); return main();
    }
    system("cls");
 
    }while(sdoh != 1);
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2015, 22:29
Ответы с готовыми решениями:

У врага не отнимается здоровье от пули
Здравствуйте, я двумя скриптами сделал урон для врага от пули Это скрипт жизней врага using...

Странное поведение ПК при сне и гибернации
На моем железе, будто на икспи и семерке, некорректно работали системы энергосбережения, и сейчас я...

Asus k53sv перезагружается при выключении и сне
Ни с того ни с сего начал перезагружаться при выключении и сне, теперь чтоб выключить надо долго...

Мигает индикатор питания при сне в windows 8.1 на ноуте
Доброго времени суток! Наконец-то разобрался с установкой hdd и ssd дисков на свой ноут и windows...

26
5987 / 2112 / 739
Регистрация: 10.12.2010
Сообщений: 5,932
Записей в блоге: 3
04.06.2015, 14:46 2
Цитата Сообщение от Greatest_Duke Посмотреть сообщение
Что у меня в коде не так?
Очень много чего. Второй свитч по zdorovie: у вас эта переменная вообще не получает значение с клавиатуры до этого свича если выбрать раздел 1. Соответственно идет по ветке по-умолчанию. А там то, за что руки отрывают:
C++
1
return main();
Неопределенное поведение. Дальше не смотрел. Перерабатывайте.
0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
04.06.2015, 15:25  [ТС] 3
PureBasic
1
Вы бы не могли показать, что конкретно надо исправить?
0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
06.06.2015, 17:07  [ТС] 4
Когда например выбираешь поспать прибавляется здоровье, но отнимается досуг и еда. Так вот, когда выбираешь поспать опять, то отнимается и здоровье, и все остальное. А также, это происходить и с досугом, и с едой. Почему? Что у меня в коде не так?
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include <random>
#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;
using std::cout;
using std::endl;
using std::cin;
int jizni = 100;    
int dosug = 100;
int eda = 100;
char razdel;
char zdorovie;
char razvlechenie;
char sitost;
int level = 1;
int opit = 0;
int skolkonado = 20000;
void Osnova(){
    cout << "Ваши жизни: " << jizni << "   " << "Ваш досуг: " << dosug << "    " << "Ваша еда: " << eda;
    cout << "   " << "Ваш уровень: " << level << "   " << opit << "/" << skolkonado << endl; 
}
int main()
{
    setlocale(LC_ALL, "Russian");
    int sdoh = 0;
    int vichitanie;
    do
    {
    srand(time(NULL));
    int randombomj = rand()%5 + 1;
    int randomopit1 = rand()%20 + 1;
    int randomopit2 = rand()%50 + 1;
    int randomopit3 = rand()%90 + 1;
    int randomopit4 = rand()%200 + 1;
    if(jizni < 0 || eda < 0 || dosug < 0){
        if(jizni < 0)
            jizni = 0;
         if(eda < 0)
             eda = 0;
         if(dosug < 0)
             dosug = 0;
    }
    if(dosug > 100 || eda > 100 || jizni > 100){
        if(jizni > 100)
            jizni = 100;
         if(eda > 100)
             eda = 100;
         if(dosug > 100)
             dosug = 100;
    }
    if(opit >= skolkonado)
    {
        level++;
        vichitanie = opit - skolkonado;
        opit = 0;
        skolkonado += 200;
        opit += vichitanie; 
        jizni = 100;
        eda = 100;
        dosug = 100;
        system("cls");
        cout << "Поздравляем, ваш уровень повысился!" << endl;
        system("pause");
        system("cls");
    }
    Osnova();
 
    cout << "1: Здоровье" << endl;
    cout << "2: Развелечение" << endl;
    cout << "3: Сытость" << endl;
 
    cin >> razdel;
 
    switch(razdel)
    {
    case '1':{ 
        system("cls"); 
        Osnova();
        cout << "1: Поспать" << endl; cout << "2: Сходить в аптеку" << endl; 
        cout << "3: Народная медицина" << endl;
        cin >> zdorovie; 
        break;
             }
    case '2':{ 
        system("cls");
        Osnova();
        cout << "1: Поболтать с бомжами" << endl; 
        cout << "2: Сходить в туалет" << endl; 
        cout << "3: Поссать на тратуар" << endl;
        cin >> razvlechenie;
        break;
             }
    case '3':{ 
        system("cls");
        Osnova();
        cout << "1: Забирать еду у голубей" << endl;
        cout << "2: Просить бабулек дать семечек" << endl;
        cout << "3: Шариться в помойке" << endl;
        cin >> sitost;
        break;
             }
    }
 
    switch(zdorovie)
    {
        case '1':
            {
                jizni += rand()%17 + 1;
                dosug -= rand()%15 + 1;
                eda -= rand()%15 + 1; 
                opit += randomopit1;
                break;
            }
        case '2':
            {
                jizni += rand()%17 + 1;
                dosug -= rand()%15 + 1;
                eda -= rand()%15 + 1; 
                opit += randomopit1;
                break;
            }
        case '3':
            {
                jizni += rand()%17 + 1;
                dosug -= rand()%15 + 1;
                eda -= rand()%15 + 1; 
                opit += randomopit2;
                break;
            }
        default: system("cls"); return main();
    }
    switch(razvlechenie)
    {
        case '1':{
            dosug += rand()%20 + 1;
            jizni -= rand()%25 + 1;
            eda -= rand()%15 + 1;
    if(randombomj == 3){
        jizni -= 40;
        system("cls");
        cout << "Говорила мама, не общайся с незнакомцами.Тебя избили твои собратья - бомжи" << endl;
        system("pause");
    } 
    opit += randomopit1;
    break;
                 }
        case '2':{ 
            dosug += rand()%20 + 1;
            jizni -= rand()%25 + 1;
            eda -= rand()%15 + 1;
            opit += randomopit1;
            break;
                 }
        case '3':{
            dosug += rand()%20 + 1;
            jizni -= rand()%25 + 1;
            eda -= rand()%15 + 1;
            opit += randomopit2;
            break;
                 }
        default: system("cls"); return main();
    }
 
    switch(sitost)
    {
        case '1':{ 
            eda += rand()%17 + 1;
            dosug -= rand()%15 + 1;
            jizni -= rand()%15 + 1;
            opit += randomopit1 ;
            break;
                 }
        case '2':{
            eda += rand()%17 + 1;
            dosug -= rand()%15 + 1;
            jizni -= rand()%15 + 1;
            opit += randomopit1 ;
            break;
                 }
        case '3':{
            eda += rand()%17 + 1;
            dosug -= rand()%15 + 1;
            jizni -= rand()%15 + 1;
            opit += randomopit1 ;
            break;
                 }
        default: system("cls"); return main();
    }
    system("cls");
 
    }while(sdoh != 1);
}
0
Просто Лис
Эксперт Python
4246 / 2656 / 911
Регистрация: 17.05.2012
Сообщений: 7,916
Записей в блоге: 9
06.06.2015, 17:35 5
С return main(); исправьте сначала
https://www.cyberforum.ru/cpp-... ost7717427
0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
06.06.2015, 17:47  [ТС] 6
До меня что-то не доходит, вы бы не могли сказать, что именно надо сделать с return main()
И еще, я подумал,может свитч раздел заменить тремя условиями.как думаете, срботает?
0
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281
06.06.2015, 17:58 7
Относительно проблемы со Здоровьем - её нет. Всё работает и спустя 30 попыток поспать.
Если вы оставите return main() то записать её в каждый case, т.к. после switch zdorovie оно сразу выполняет switch(razvlechenie) что не есть гуд.
По хорошему запихнуть это в функции
bool CheckParametrs(); //Если больше 100 то 100, если меньше то 0.Если у товарища 0 health, gameover
Deistvie(int key); Свитч здоровье, развлечение, сытость

Оформление 36-51 строки "потрясающее":
C++
1
2
3
4
5
6
 if(jizni < 0) {jizni = 0; sdoh = 1;  cout<<"Вы померли :(";return; }
 if(eda<0) eda = 0;
 if(dosug<0) dosug = 0;
    if(dosug > 100) dosug = 100;
    if(eda > 100) eda = 100;
    if(jizni>100) jizni = 100;
Переменную вычитание уберите... opit+=(opit - skolkonado);
0
ArtFeather
06.06.2015, 18:00
  #8

Не по теме:

Что с вами случилось, что вы переменные транслитом называете? :(

0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
06.06.2015, 18:33  [ТС] 9
Так,проблемы со здоровьем больше нету, но появилась проблема с досугом и с едой. Когда например выбираешь пункт который пополняет здоровье и отнимает досуг и еду все работает, но когда выбираешь действия которое прибавляют либо досуг,либо сытость то, и сытость , и досуг убавляются.Что не так? (return main() в каждом кейсе - поставил)
0
Модератор
1618 / 1075 / 483
Регистрация: 17.07.2012
Сообщений: 5,303
06.06.2015, 18:36 10
Цитата Сообщение от Greatest_Duke Посмотреть сообщение
(return main() в каждом кейсе - поставил)
Сколько раз можно говорить одно и тоже?!
Цитата Сообщение от HighPredator Посмотреть сообщение
Неопределенное поведение. Дальше не смотрел. Перерабатывайте.
Нельзя так делать!Нельзя!!
0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
06.06.2015, 19:27  [ТС] 11
Переменные называю транслитом,только потому,что мне так удобнее.Я программы для себч пишу, может быть иногда и для друзей пишу, но я точно уверен, что друзья код программы залезать не будут.

Добавлено через 48 минут
И еще жизни не убавляются.
0
IrineK
06.06.2015, 20:46
  #12

Не по теме:

Цитата Сообщение от Greatest_Duke Посмотреть сообщение
Переменные называю транслитом,только потому,что мне так удобнее.
Вы это, аккуратней с этими симуляторами. А то вдруг оно заразно.
Вот транслит, например.

0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
07.06.2015, 23:30  [ТС] 13
Так,проблемы со здоровьем больше нету, но появилась проблема с досугом и с едой. Когда например выбираешь пункт который пополняет здоровье и отнимает досуг и еду все работает, но когда выбираешь действия которое прибавляют либо досуг,либо сытость то, и сытость , и досуг убавляются.Что не так? (return main() в каждом кейсе - поставил)
И еще жизни не убавляются.
0
Просто Лис
Эксперт Python
4246 / 2656 / 911
Регистрация: 17.05.2012
Сообщений: 7,916
Записей в блоге: 9
08.06.2015, 09:13 14
return main() убрать вообще везде! Для этого нужно переписать всю функцию main(). Желательно вынести весь код из тела цикла внутри main() в отдельную функцию.
0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
10.06.2015, 11:38  [ТС] 15
Всем спасибо! Все сделал, надо было просто поставить условия перед кейсами zdorovie, razvlechenie и sitost
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(razdel == '1'){
switch(zdorovie)
{
// код
}
}
if(razdel == '2'){
switch(razvlechenie)
{
//Код
}
}
if(razdel == '3'){
switch(sitost)
{
//Код
}
}
0
25 / 25 / 11
Регистрация: 07.12.2012
Сообщений: 169
10.06.2015, 13:34 16
C++
1
if(razdel == '1')
Не проще для этого использовать switch по перечислению (enum | enum class)?
И где ваш класс?)
Смысл использовать выборочный использование элементов std, если вы перед этим используете всё пространственное имя std?
C++
1
2
3
4
using namespace std;
using std::cout;
using std::endl;
using std::cin;
Помимо if и else можно использовать if else.
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
10.06.2015, 13:45 17
Цитата Сообщение от xEmpire Посмотреть сообщение
Помимо if и else можно использовать if else.
Чего?
0
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281
10.06.2015, 16:47 18
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Чего?
else if... вероятно)
0
1 / 1 / 0
Регистрация: 03.06.2015
Сообщений: 19
10.06.2015, 17:23  [ТС] 19
Цитата Сообщение от xEmpire Посмотреть сообщение
C++
1
if(razdel == '1')
Не проще для этого использовать switch по перечислению (enum | enum class)?
И где ваш класс?)
Смысл использовать выборочный использование элементов std, если вы перед этим используете всё пространственное имя std?
C++
1
2
3
4
using namespace std;
using std::cout;
using std::endl;
using std::cin;
Помимо if и else можно использовать if else.
Для меня это не открытие, просто так безопаснее

Добавлено через 26 минут
Сегодня решил поработать, увеличил код в 6 раз!
0
foo();
883 / 585 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
10.06.2015, 18:18 20

Не по теме:

Цитата Сообщение от Greatest_Duke Посмотреть сообщение
Сегодня решил поработать, увеличил код в 6 раз!
это не достижение, лучше наоборот уменьшать размер исходного кода (в разумных пределах)


Цитата Сообщение от Рыжий Лис Посмотреть сообщение
С return main(); исправьте сначала
https://www.cyberforum.ru/cpp-... ost7717427
ссылка не работает, а посмотреть хотелось
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2015, 18:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Компьютер для БОМЖа
Итак, бомжарская сборка. Это на случай, если вдруг разорюсь. Системная плата со встроенным...

Здоровье жесткого диска при частом включении\отключении ПК.
Хочу обратиться за советом. Влияет ли негативно на здоровье ХДД ежедневное отключение и включение...

При первом нажатии кнопки - выполнялся один код,при повторном другой и тд
Имеется код : document.onkeydown = function(z) { if (z.keyCode==&quot;120&quot;) { var h =...

Умер во сне
Отправил систему в спящий режим, больше она из него в рабочем состоянии не выходила. Система не...

К переменным прибавляется/отнимается 0.00001
Всем привет. По каким-то неизвестным причинам к моим двум переменным (banani , bps) прибавляется...

Играем на досуге
Есть такой сайтик - http://www.bored.com/. На нем можно найти массу прикольных и даже полезных игр...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.