Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
pavlenko2k16
1 / 1 / 2
Регистрация: 24.09.2016
Сообщений: 143
Завершенные тесты: 1
#1

оценка написания простой игры - C++

09.01.2017, 13:17. Просмотров 116. Ответов 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
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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#include <iostream>
#include <cstring>
#include <cmath>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
class stats_of_enemy {
public: 
    double health_of_enemy = 150.0;
    int armor_of_enemy = 3;
    int damage_of_enemy = 20;   
};
 
class player {
public:
    int health_of_player;
    int armor_of_player;
    int damage_of_player;
};
 
void type_of_user (player& name) {
    int type_of_player;
    for (;;) {
    cout << "Choose your type:" << endl << "1 - warrior" << endl << "2 - healer" << endl <<  "3 - mage" << endl;
    cin >> type_of_player;
    if(type_of_player <= 3 && type_of_player >= 1)
    break;
    else {
        system("cls");
        cout << "Your answer is wrong. Try again";
        getch();
        system("cls");
    }
    }
    switch (type_of_player) {
        case 1: {
            name.armor_of_player = 25;
            name.damage_of_player = 50;
            name.health_of_player = 1000;
            break; }
        case 2: {
            name.armor_of_player = 15;
            name.damage_of_player = 25;
            name.health_of_player = 2500;
            break;
            }
        case 3: {
            name.armor_of_player = 18;
            name.damage_of_player = 40;
            name.health_of_player = 1500;
            break;          
    }
}
}
 
void power_of_enemy (stats_of_enemy& enemy_unit, int lvl_of_difficulty, int num_of_lvl) {
    switch (lvl_of_difficulty) {
        case 1: {
    enemy_unit.armor_of_enemy *= pow(1.2, num_of_lvl);
    enemy_unit.damage_of_enemy *= pow(1.2, num_of_lvl);
    enemy_unit.health_of_enemy *= pow(1.2, num_of_lvl);
    break;
    }
        case 2: {
    enemy_unit.armor_of_enemy *= pow(1.4, num_of_lvl);
    enemy_unit.damage_of_enemy *= pow(1.5, num_of_lvl);
    enemy_unit.health_of_enemy *= pow(1.5, num_of_lvl);
    break;
    }
        case 3: {
    enemy_unit.armor_of_enemy *= pow(1.7, num_of_lvl);
    enemy_unit.damage_of_enemy *= pow(1.7, num_of_lvl);
    enemy_unit.health_of_enemy *= pow(1.7, num_of_lvl);
    break;
    }
        case 4: {
    enemy_unit.armor_of_enemy *= pow(1.9, num_of_lvl);
    enemy_unit.damage_of_enemy *= pow(1.9, num_of_lvl);
    enemy_unit.health_of_enemy *= pow(1.9, num_of_lvl);
    break;
    }
}
}
 
void show_stats_of_enemy (stats_of_enemy& enemy_unit, double max_health) {
    cout << "Your opponent have: " << endl << enemy_unit.health_of_enemy << " of " << max_health << " health" << endl << enemy_unit.damage_of_enemy << " damage" << endl << enemy_unit.armor_of_enemy << " armor" << endl << endl;
}
 
void show_stats (player& name, int lvl) {
    cout << "LEVEL " << lvl << endl << endl;
    cout << "Your armor = " << name.armor_of_player << endl << "Your damage = " << name.damage_of_player << endl << "Your health = " << name.health_of_player << endl << endl;  
 
}
 
void atack_or_heal (player& username, stats_of_enemy& enemy_unit) {
    int answer;
    for (;;) {
    cout<< endl << "What do you want?" << endl << "1 - Atack!" << endl << "2 - small healing" << endl;
    cin >> answer;
    if(answer == 1 || answer == 2)
    break;
    else {
        system("cls");
        cout << "Your answer is wrong. Try again";
        getch();
        system("cls");
    } 
    }
    switch (answer) {
        case 1: {
        enemy_unit.health_of_enemy -= username.damage_of_player - 0.11 * enemy_unit.armor_of_enemy;
        username.health_of_player -= enemy_unit.damage_of_enemy - 0.11 * username.armor_of_player;          
            break;
        }
        case 2: {
        username.health_of_player -= enemy_unit.damage_of_enemy - 0.11 * username.armor_of_player;   
        username.health_of_player += 35;    
            break;
        }
    }
}
 
void battle (stats_of_enemy &enemy_unit, player &username, int lvl) {
    double max_enemy_health = enemy_unit.health_of_enemy;
    do {
        system ("cls");
        show_stats(username, lvl);
        show_stats_of_enemy(enemy_unit, max_enemy_health);
        atack_or_heal(username, enemy_unit);
        if (username.health_of_player <= 0)
        break;
    }
    while (enemy_unit.health_of_enemy > 0);
}
 
void boost_player (player &username, int choice) {
    switch (choice) {
        case 1: {
            username.health_of_player += rand()%30 + 150;
            cout << "You received some hp";
            getch();
            break;
        }
        
        case 2: {
            username.damage_of_player += rand()%10 + 10;
            cout << "You received some damage";
            getch();
            break;
        }
        
        case 3: {
            username.armor_of_player += rand()%3 + 4;
            cout << "You received some armor";
            getch();
            break;
        }
    }
}
 
choose_difficult (int& lvl_of_difficulty) {
    for (;;) {
    cout << "Choose your level of difficulty: " << endl << "1 - EZ" << endl << "2 - Normal" << endl << "3 - Hard" << endl << "4 - Godlike" << endl;
    cin >> lvl_of_difficulty;
    if(lvl_of_difficulty <= 4 && lvl_of_difficulty >= 1)
    break;
    else {
        system("cls");
        cout << "Your answer is wrong. Try again";
        getch();
        system("cls");
    }
    }   
}
 
choose_boost (player& name, int &boost_choose) {
        for (;;) {
    cout << "You won! What you'll choose?" << endl << "1 - some health" << endl << "2 - some damage" << endl << "3 - some armor" << endl;
    cin >> boost_choose;
    if(boost_choose >= 1 && boost_choose <= 3)
    break;
    else {
        system("cls");
        cout << "Your answer is wrong. Try again";
        getch();
        system("cls");
    }
    }
}
 
int main () {
    string name_of_user;
    cout << "                                                      Foreword" << endl;
    cout << "It's my first console video-game. And I named it 'Catacomb'. You are the brave soldier, who must kill a lot of enemies and be better, then other. On each level you will fight with one of them, but every time they get stronger. And that's why you should make yout personal record." << endl;
    cout << "You can choose boost after each level, but choose them wisely, because they are really important" << endl;
    cout << "                                                      Good Luck" << endl << endl;
    cout << "Press any button to start";
    getch();
    system("cls");
    cout << "Enter your name: ";
    getline (cin, name_of_user);
    system ("cls");
 
    player name;
    type_of_user(name);
    system ("cls"); 
 
    cout << "Your armor = " << name.armor_of_player << endl << "Your damage = " << name.damage_of_player << endl << "Your health = " << name.health_of_player;
    getch();
    system ("cls");    
 
    int lvl_of_difficulty;
    choose_difficult(lvl_of_difficulty);
    system ("cls");    
    int lvl = 1;
 
    do {
    stats_of_enemy enemy_unit;  
    power_of_enemy(enemy_unit, lvl_of_difficulty, lvl);
    battle (enemy_unit, name, lvl);
    system ("cls"); 
    if (name.health_of_player <= 0) {
        cout << "You lose!" << endl << "Try again later." << endl << "Your record is " << lvl << " level";  
        exit(0);
    }
 
    show_stats(name, lvl);
    int boost_choose;
    choose_boost(name, boost_choose);
    system ("cls"); 
 
    show_stats(name, lvl);
    boost_player(name, boost_choose);
    system ("cls");     
    lvl++;
    }
    while (name.health_of_player > 0);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2017, 13:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос оценка написания простой игры (C++):

План действий для написания игры
Хочу написать игру на c++ Я начал изучать с++ не очень давно,но опыт небольшой...

Что нужно знать для написания игры типа Gravity defied
Хочу создать игру на подобии gravity defied на компьютер, пожалуйста...

Cоздание простой игры
я знаю как создать движок игре а как реализовать графику без DirectX opengl qt...

Код какой то простой игры в язике С++
Кто может скиньте пожалуйста код какой то простой игры в язике С++. Пожалуйста.

Оценка стиля написания кода
Здравствуйте! Я к вам пожаловал не с очередной проблемой. Код у меня рабочий....

Что необходимо для написания читов для игры?
По мере изучения СИ++ все больше и больше наталкиваюсь на мысль &quot;А не написать...

1
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
09.01.2017, 13:25 #2
Сделайте выравнивание нормальное (особенно в логических конструкциях типа циклы и условия). Внутренняя часть должна иметь на один отступ больше.
Уменьшите длину кода по горизонтали (хотя бы до 120 символов), чтобы не нужно было пользоваться кареткой для прокрутки.
Классы, имеющие лишь секцию public, переименуйте в структуры.
Функции должны выполнять лишь одну определенную работу, у вас сейчас в них мешанина. Ввод-вывод, сильное ветвление (что сильно повышает их асимптотическую сложность со всеми вытекающими).

И вы даже не описали правил игры.

Добавлено через 1 минуту
Для switch-case я бы создал перечисления (enum) с вариантами выбора, чтобы понятней было. Сейчас 1, 2 ни о чём не говорят.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2017, 13:25
Привет! Вот еще темы с решениями:

Список учеников имеет следующую структуру: фамилия – класс - оценка по алгебре - оценка по физике - средний балл
Задание такое Список учеников имеет следующую структуру: фамилия – класс -...

Создание простой игры, каким образом распределить "обязанности"
В общем идея такая, на данный момент есть более-менее работающий прототип...

Самый простой аналог игры "BlackJack"
Всем привет! Ребята такая проблема нужно написать самый простой аналог игры...

Для каждой игры определить словесный результат игры (выигрыш, проигрыш или ничья)
Помогите пожалуйста с задачей!!! В одном массиве записано количество мячей,...


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

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

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