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

Непонятный баг с "игрой" - C++

Восстановить пароль Регистрация
 
meJevin
 Аватар для meJevin
154 / 146 / 57
Регистрация: 18.11.2015
Сообщений: 608
Завершенные тесты: 1
28.12.2015, 16:37     Непонятный баг с "игрой" #1
Привет, я - новичок в С++. И я решил сделать небольшое РПГ, вроде все норм, но вот незадача - я сделал магазин на координатах 6;4 (все есть в коде, если вам что-то непонятно), там вылезает меню магазина, я нажимаю на 3 (чтобы выйти из него), но когда я вышел и на этих координатах хочу вызвать функцию, которая показывает статистику персонажа, вылетает меню магазина. Пожалуйста, те, кому не трудно и не лень, прочитайте код и скажите, как устранить этот баг (там есть еще какие-то баги с этим проклятым магазином, их тоже, если не трудно, прошу пофиксить, потому что я вообще все перепробовал и ничего не работает). Заранее спасибо.
Вот код игры:
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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
//Function prototypes
void fightOrc();
void fightMage();
void intro();
void dirCheck();
void shopEnter();
void playerHealSelf();
 
//Coordinates
int x=0; 
int y=0; 
char input = 'a';
 
//Player's properties
float playerGold = 220;
float playerHP = 400;  
float playerDamage = 60; 
int playerAlive = 1;
string playerName;
int playerPotionAmount = 0;
int playerFireballAmount = 0;
int playerFireballDamage = 250;
int inShop = 0;
 
//Player's choises
char choise = 'a';
char choiseShop = 'a';
char choiseBattle = 'a';
 
//Enemies 
float orcHP = 220; float orcDamage = 30; float orcGold = 50; int orcAlive = 1;
float mageHP = 80; float mageDamage = 70; float mageGold = 110; int mageAlive = 1;
 
 
int main()
{
 
    //Introduction
    intro();
    do{
        input = getch();
 
        //Direction check
        dirCheck();
 
        //Stats, coordinates and exit
        if(input == 'l' || input == 'L'){
            cout << "Your current coordinates are: " << x <<","<< y << endl;
        }else if(input == 'h' || input == 'H'){
            cout << "Health: " << playerHP << endl;
            cout << "Damage: " << playerDamage << endl;
            cout << "Gold: " << playerGold << endl;
            cout << "HP potions: " << playerPotionAmount << endl;
            cout << "Spells: " << playerFireballAmount << " fireballs." << endl;
        }
        else if(input == 'x' || input == 'X'){
            cout << "\n==================\n";
            cout << "See you later...\n";
            cout << "==================\n\n";
            break;
        }
 
        //Player healing himself
        if((input == 'p'||input == 'P')&& playerPotionAmount > 0){
            playerHealSelf();
        }else if((input == 'p' || input == 'P') && playerPotionAmount <= 0){
            cout << "You don't have healing potions!\n";
        }
 
        //Coordinates for enemies and stuff
        if(x==4 && y==1 && orcAlive==1){
            fightOrc();
        }
        if(x==-2 && y==5 && mageAlive==1){
            fightMage();
        }
        if(x==6 && y==4 && inShop == 0){
            inShop = 1;
            shopEnter();
            inShop = 0;
        }
    }while(playerHP > 0);
}
 
//Functions
void fightOrc(){
    int turn = 1; // 1 - Player; 0 - Enemy;
 
    cout << "\nYou see an orc ahead.\n";
    cout << "1. Fight\n";
    cout << "2. Do nothing\n";
    choise = getch();
    if(choise == '1'){
        cout << "\n====================================\n";
        cout << playerName << " is starting to fight an orc" << endl;
        cout << "====================================\n";
        cout << "\n1. Attack with a weapon.\n";
        cout << "2. Use a fireball spell.\n";
        cout << "3. Use a healing potion.\n\n";
        do{
            do{
                choiseBattle = getch();
                if(choiseBattle == '1'){
                    orcHP -= playerDamage;
                    cout << playerName << " attacks orc for " << playerDamage << " HP!\n";
                    if(orcHP <= 0){
                        break;
                    }
                    cout << "Orc has " << orcHP << " HP left!\n";
                    turn = 0;
                }
                if(choiseBattle == '2' && playerFireballAmount > 0){
                    orcHP -= playerFireballDamage;
                    cout << playerName << " uses a fireball spell and does " << playerFireballDamage << " damage!\n";
                    if(orcHP <= 0){
                        break;
                    }
                    cout << "Orc has " << orcHP << " HP left!\n";
                    turn = 0;
                }else if(choiseBattle == '2' && playerFireballAmount <= 0){
                    cout << "You don't have any fireball spells!\n";
                    turn = 1;
                }
                if(choiseBattle == '3' && playerPotionAmount > 0){
                    cout << "You used a health potion.\n";
                    playerHP += 100;
                    cout << "Now you have " << playerHP << " HP!\n";
                    playerPotionAmount--;
                    if(playerHP > 400){
                        playerHP = 400;
                    }
                    turn = 0;
                }else if(choiseBattle == '3' && playerPotionAmount <= 0){
                    cout << "You don't have any potions!\n";
                    turn = 1;
                }
            }while(turn != 0);
            if(orcHP <= 0){
                break;
            }
            playerHP -= orcDamage;
            cout << "Orc attacks " << playerName << " for " << orcDamage << " HP!\n";
            if(playerHP <= 0){
                break;
            }
            cout << playerName << " has " << playerHP << " HP left!\n";
        }while(orcHP > 0 && playerHP > 0);
        if(orcHP<=0){
            cout << "\n------------------------------------" << endl;
            cout << playerName <<" killed an orc!\nAnd got " << orcGold << " gold from him!\n";
            cout << "------------------------------------\n\n";
            playerGold += orcGold;
            orcAlive = 0;
        }else if(playerHP<=0){
            cout << "\n------------------------------------" << endl;
            cout << "Orc killed " << playerName <<" !\n";
            cout << "------------------------------------\n\n";
            playerAlive = 0;
        }
    }else if(choise == '2'){
        cout << "You decided to do nothing.\n\n";
    }
}
 
void fightMage(){
    int turn = 1; // 1 - Player; 0 - Enemy;
 
    cout << "\nYou see a mage ahead.\n";
    cout << "1. Fight\n";
    cout << "2. Do nothing\n";
    choise = getch();
    if(choise == '1'){
        cout << "\n====================================\n";
        cout << playerName << " is starting to fight a mage" << endl;
        cout << "====================================\n";
        cout << "\n1. Attack with a weapon.\n";
        cout << "2. Use a fireball spell.\n";
        cout << "3. Use a healing potion.\n\n";
        do{
            do{
                choiseBattle = getch();
                if(choiseBattle == '1'){
                    mageHP -= playerDamage;
                    cout << playerName << " attacks mage for " << playerDamage << " HP!\n";
                    if(mageHP <= 0){
                        break;
                    }
                    cout << "Mage has " << mageHP << " HP left!\n";
                    turn = 0;
                }
                if(choiseBattle == '2' && playerFireballAmount > 0){
                    mageHP -= playerFireballDamage;
                    cout << playerName << " uses a fireball spell and does " << playerFireballDamage << " damage!\n";
                    if(mageHP <= 0){
                        break;
                    }
                    cout << "Mage has " << mageHP << " HP left!\n";
                    turn = 0;
                }else if(choiseBattle == '2' && playerFireballAmount <= 0){
                    cout << "You don't have any fireball spells!\n";
                    turn = 1;
                }
                if(choiseBattle == '3' && playerPotionAmount > 0){
                    cout << "You used a health potion.\n";
                    playerHP += 100;
                    cout << "Now you have " << playerHP << " HP!\n";
                    playerPotionAmount--;
                    if(playerHP > 400){
                        playerHP = 400;
                    }
                    turn = 0;
                }else if(choiseBattle == '3' && playerPotionAmount <= 0){
                    cout << "You don't have any potions!\n";
                    turn = 1;
                }
            }while(turn != 0);
            if(mageHP <= 0){
                break;
            }
            playerHP -= mageDamage;
            cout << "Mage attacks " << playerName << " for " << mageDamage << " HP!\n";
            if(playerHP <= 0){
                break;
            }
            cout << playerName << " has " << playerHP << " HP left!\n";
        }while(mageHP > 0 && playerHP > 0);
        if(mageHP<=0){
            cout << "\n------------------------------------" << endl;
            cout << playerName <<" killed a mage!\nAnd got " << mageGold << " gold from him!\n";
            cout << "------------------------------------\n\n";
            playerGold += mageGold;
            mageAlive = 0;
        }else if(playerHP<=0){
            cout << "\n------------------------------------" << endl;
            cout << "Mage killed " << playerName <<" !\n";
            cout << "------------------------------------\n\n";
            playerAlive = 0;
        }
    }else if(choise == '2'){
        cout << "You decided to do nothing.\n\n";
    }
}
void intro(){
    cout << "*** Best RPG 2016 ***\n\n";
    cout << "Enter your name: "; cin >> playerName;
    cout << "_________________________________________________________\n";
    cout << "\nW - go up. D - go right. S - go down. A - go left.\n";
    cout << "\n";
    cout << "Press 'L' to show your current coordinates." << endl;
    cout << "\n";
    cout << "Press 'H' to show your stats.\n";
    cout << "\n";
    cout << "Press 'P' to use a healing potion.\n\nPress 'X' to exit.\n";
    cout << "_________________________________________________________\n\n";
}
 
void dirCheck(){
    if(input == 'w' || input == 'W'){
            cout << "You moved up\n";
            y++;
        }else if(input == 's' || input == 'S'){
            cout << "You moved down\n";
            y--;
        }else if(input == 'a' || input == 'A'){
            cout << "You moved left\n";
            x--;
        }else if(input == 'd' || input == 'D'){
            cout << "You moved right\n";
            x++;
        }
}
 
void shopEnter(){
    cout << "\n===============================\n";
    cout << "You found a little tavern!" << endl;
    cout << "===============================\n";
    cout << "1. Enter.\n2. Do nothing.\n";
    cout << "===============================\n";
    choise = getch();
    if(choise == '1'){
        cout << "\nYou entered a tavern.\n";
        cout << "\n===============================\n";
        cout << "1. Buy healing potion(100 gold).\n";
        cout << "2. Buy a fireball spell(150 gold).\n";
        cout << "3. Exit.\n";
        cout << "===============================\n";
        do{
        choiseShop = getch();
        if(choiseShop == '1' && playerGold >= 100){
            cout << "You bought a healing potion!\n";
            playerPotionAmount++;
            playerGold -= 100;
        }else if(choiseShop == '1' && playerGold < 100){
            cout << "You don't have enough gold.\n";
        }
        if(choiseShop == '2' && playerGold >= 150){
            cout << "You bought a fireball spell!\n";
            playerFireballAmount++;
            playerGold -= 150;
        }else if(choiseShop == '2' && playerGold < 150){
            cout << "You don't have enough gold.\n";
        }
        if(choiseShop == '3'){
            cout << "You left a tavern.\n";
        }
        }while(choiseShop != '3');
    }else if(choise == '2'){
        cout << "You decided to do nothing\n";
    }
}
 
void playerHealSelf(){
    cout << "You used a health potion.\n";
    playerHP += 100;
    cout << "Now you have " << playerHP << " HP!\n";
    playerPotionAmount--;
    if(playerHP > 400){
        playerHP = 400;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
28.12.2015, 17:30     Непонятный баг с "игрой" #2
там вылезает меню магазина, я нажимаю на 3 (чтобы выйти из него), но когда я вышел и на этих координатах хочу вызвать функцию, которая показывает статистику персонажа, вылетает меню магазина
Вот тут
C++
1
2
3
4
5
6
if(x==6 && y==4 && inShop == 0){
            inShop = 1;
            shopEnter();
            inShop = 0;
            x = 7; // ВОТ ТО САМОЕ МЕСТО
        }
так как после выхода из магазина ты все еще стоишь на координатах 6:4 и при следующей итерации цикла опять попадаешь в магазин.
meJevin
 Аватар для meJevin
154 / 146 / 57
Регистрация: 18.11.2015
Сообщений: 608
Завершенные тесты: 1
28.12.2015, 17:37  [ТС]     Непонятный баг с "игрой" #3
А как это пофиксить, ну, чтобы я, когда стою на координатах магазина, нажимал на что-нибудь (например показать координаты) и взаимодействия с ним не было? Потому что я уже сказал программе, что не хочу в него заходить, нажав на 2.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
29.12.2015, 15:28     Непонятный баг с "игрой" #4
А как это пофиксить
ну сместите координаты что бы отойти с точки магазина
C++
1
 x = 7; // ВОТ ТО САМОЕ МЕСТО
или
придумайте условие для того что бы оно спрашивало перед тем как войти в магазин
C++
1
2
3
4
5
6
7
8
if(x==6 && y==4 ){
  char in = 'n';
   std::cout << " Are you go inner to a shop ?" << std::endl; 
  if((std::cin >> in) == 'y'){
       shopEnter();
       std::cin.get();
   }
}
Yandex
Объявления
29.12.2015, 15:28     Непонятный баг с "игрой"
Ответ Создать тему
Опции темы

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