Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2020, 18:10   #1
SoraNoZer0
 
Регистрация: 02.11.2019
Сообщений: 9
По умолчанию Игра игнорит код

Код:
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
									int hp,hpm,d,dn,hb,db,xp,xpl,lvl,g,hpe,hpe1,hpe2,edmg,edmg1,edmg2,ev,tn,fl,gl;
void luck(){
	int gl;gl+=rand()%15+1;
	g+=gl;
	cout<<"You found "<<gl<<" gold!";}
void dungeon(){
	cout<<"Congratulations!You found a dungeon,but it doesn't exist yet.Chance is 5% though.U r,likr,really lucky'";}
int main(){
	hp=100;hpm=100;dn=rand()%11+20,d=dn,xpl=20,lvl=1;g=0;xp=0;
	ev=rand()%100+1;
		if(ev<50){hpe=rand()%21+40;
			edmg=rand()%5+10;
			while((hp<=0)or(hpe<=0)){cout<<"hp - "<<hp<<"\nEnemy hp - "<<hpe;
			cout<<"1.Fight\n2.Item\n3.Flee\n ";
			int tn;
			cin>>tn;
			switch(tn){
				case 1:{hpe-=d;hp-=edmg;break;};
				case 2:{cout<<"1.Heal\n2.Damage boost\n ";
							int pot;
							cin>>pot;
							switch(pot){
										case 1:{hp=hpm;break;}
										case 2:{d*=2;break;}
									    };break;
				    	}	
				case 3:{int fl=rand()%2+1;
							if(fl==1){}
								else if (fl==2){hp-=edmg;}
						break;}}}}		
		else if ((ev>50)and(ev<75)){int hpe1=rand()%21+40;int hpe2=rand()%21+40;
									int edmg1=rand()%5+10;int edmg2=rand()%5+10;
									while((hp<=0)or((hpe1<=0) and (hpe2<=0))){cout<<"hp - "<<hp<<"\n1 Enemy hp - "<<hpe1<<"2 Enemy hp - "<<hpe2;
										cout<<"1.Fight\n2.Item\n3.Flee\n ";
										cin>>tn;
										switch(tn){
											case 1:{if(hpe1>=1){hpe1-=d;} else {hpe2-=d;};hp-=edmg1+edmg2;break;}
											case 2:{cout<<"1.Heal\n2.Damage boost\n ";
														int pot;
														switch(pot){
															case 1:{hp=hpm;break;}
															case 2:{d*=2;break;}
															};hp-=edmg1+edmg2;break;}
															case 3:{fl=rand()%2+1;
														if(fl==1){}
														else if (fl==2){hp-=edmg1+edmg2;};break;}
													}
																			}
									}
		else if ((ev>75)and(ev<992)){luck();}
		else if (ev>99){dungeon();};
				}
Начнём думаю с того что я школьник,которому взбрело в голову написать текстовую игру
Тем более,почти впервые залез на С++
Ещё остались?Хорошо,едем дальше.

Задумка такая - Генерируется число от 1 до 100,при значении от 1 до 50 - битва с одним противником,если от 50 до 75 - с двумя,остальные 2 варианта работают.
Так вот,при запуске программы в большинстве случаев,а это как раз те от 1 до 75, программа просто вылетает.
P.s. В код вынес не всю игру,а фрагмент,выписанный отдельно

Последний раз редактировалось SoraNoZer0; 14.01.2020 в 14:59.
SoraNoZer0 вне форума Ответить с цитированием
Старый 13.01.2020, 20:14   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Я плохо разбираюсь в этом языке (как и во многих других), но вот фрагмент вашего кода:
Код:
int tn;
switch(tn){
case 1:{hpe-=d;hp-=edmg;};
case 2:{cout<<"1.Heal\n2.Damage boost\n ";
int pot;
switch(pot){
	case 1:{hp=hpm;}
	case 2:{d*=2;}
}
Что вы ожидаете от переменных tn и pot?
Они примут нужные значения 1 или 2? Но вы их не инициализируете.
Или, насколько мне помнится, из case следует выскакивать через break, с тем, что бы другие case не сработали. Но справедливо ли это для С++?
PS: Код не форматирован и плохо читается. Дальше и не смотрел.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 14.01.2020, 11:38   #3
SoraNoZer0
 
Регистрация: 02.11.2019
Сообщений: 9
По умолчанию

SoraNoZer0,
Цитата:
Сообщение от ViktorR Посмотреть сообщение
Я плохо разбираюсь в этом языке (как и во многих других), но вот фрагмент вашего кода:
Код:
int tn;
switch(tn){
case 1:{hpe-=d;hp-=edmg;};
case 2:{cout<<"1.Heal\n2.Damage boost\n ";
int pot;
switch(pot){
	case 1:{hp=hpm;}
	case 2:{d*=2;}
}
Что вы ожидаете от переменных tn и pot?
Они примут нужные значения 1 или 2? Но вы их не инициализируете.
Или, насколько мне помнится, из case следует выскакивать через break, с тем, что бы другие case не сработали. Но справедливо ли это для С++?
PS: Код не форматирован и плохо читается. Дальше и не смотрел.
А точно,спасибо,забыл про ввод.
А с брейк надо будет проверить.Попозже попробую,отпишусь
SoraNoZer0 вне форума Ответить с цитированием
Старый 14.01.2020, 14:53   #4
SoraNoZer0
 
Регистрация: 02.11.2019
Сообщений: 9
По умолчанию

UPD: форматнул код
SoraNoZer0 вне форума Ответить с цитированием
Старый 14.01.2020, 15:30   #5
SoraNoZer0
 
Регистрация: 02.11.2019
Сообщений: 9
По умолчанию

UPD2:Проблема походу или в самом генераторе,или в условии
SoraNoZer0 вне форума Ответить с цитированием
Старый 14.01.2020, 21:27   #6
SoraNoZer0
 
Регистрация: 02.11.2019
Сообщений: 9
По умолчанию

UPD 3:ОГРОМНОЕ спасибо форуму,я без вас сам всё починил.
SoraNoZer0 вне форума Ответить с цитированием
Старый 15.01.2020, 14:56   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Главное умно поставить вопрос.
И тогда всё самому становится ясным

А где это можно сделать?
Только тут, на этом форуме
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Игра Пятнашки. Помогите пожалуйста добавить окно "Вы выиграли", когда комбинация будет собрана правильно, и добавить кнопку "Новая игра" Аня20 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2017 08:12
Игра tunyash Gamedev - cоздание игр: Unity, OpenGL, DirectX 18 05.07.2010 11:42