Премини към съдържанието

Препоръчан отговор

публикувано (редактирано)

Сетих се (с елементарните ми знания) да си направя елементарна игра.

#include <iostream>
#include <string>
#include <random>
#include <ctime>


using namespace std;
int main()
{
	string PlayerOneName;
	string PlayerTwoName;
	cout << "Name Player 1:";
		cin >> PlayerOneName;
		cout << "Name Player 2: ";
		cin >> PlayerTwoName;
		int PlayerOneHP = 100;
		int PlayerTwoHP = 100;
	default_random_engine randomDamage(time(0));
	uniform_int_distribution<int> Damage(1, 10);
	cout << PlayerOneName << " has 100 HP " << PlayerTwoName << " has 100 HP " << endl;
	cout << PlayerOneName << " did " << Damage(randomDamage) << " damage to " << PlayerTwoName << endl;
	playerTwoHP = playerTwoHP - Damage(randomDamage);
	cout << playerTwoHP << endl;
	system("pause");
	return 0;

}

Обаче като заредя програмата ми изписва, че играч 1  е направил 3 дмг,а играч 2 има 99 живот след това(например).  Ясно ми е къде е проблемът

cout << PlayerOneName << " did " << Damage(randomDamage) << " damage to " << PlayerTwoName << endl;
	playerTwoHP = playerTwoHP - Damage(randomDamage);

Как да направя ,така че, когато Damage(randomDamage) избере дадено число от 1 до 10 (в cout), той да се извади от живота на играч 2 ?

Редактирано от radgx (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

публикувано (редактирано)
     int dm=Damage(randomDamage);
     cout << PlayerOneName << " did " << dm << " damage to " << PlayerTwoName << endl;
     playerTwoHP -= dm;
Редактирано от ined (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
публикувано (редактирано)

Заработи, обаче като го вкарах във while, нещо се обърка:

#include <iostream>
#include <string>
#include <random>
#include <ctime>


using namespace std;
int main()
{
	string PlayerOneName;
	string PlayerTwoName;
	cout << "Name Player 1:";
		cin >> PlayerOneName;
		cout << "Name Player 2: ";
		cin >> PlayerTwoName;
		int PlayerOneHP = 100;
		int PlayerTwoHP = 100;
	default_random_engine randomDamage(time(0));
	uniform_int_distribution<int> Damage(1, 10);
	while (PlayerOneHP <= 0 || PlayerTwoHP <= 0)
	{
		int dm1 = Damage(randomDamage);
		cout << PlayerOneName << " did " << dm1 << " damage to " << PlayerTwoName << endl;
		PlayerTwoHP = PlayerTwoHP - dm1;
		cout << PlayerTwoHP;
		int dm2 = Damage(randomDamage);
		cout << PlayerTwoName << " did " << dm2 << " damage to " << PlayerOneName << endl;
		PlayerOneHP = PlayerOneHP - dm2;
		cout << PlayerOneHP;
	}
	
	system("pause");
	return 0;

}

И много ми се иска, примерно, играч 1 да натиска "Q" (например), а играч 2 - "P" (за да атакуват , разбира се) 

Редактирано от radgx (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
публикувано (редактирано)

Махнал съм  <random> щото при мене го няма като библиотека

#include <iostream>
#include <ctime>
#include <conio.h>

using namespace std;
int main()
{
     string PlayerOneName;
     string PlayerTwoName;
     cout << "Name Player 1:";
     cin >> PlayerOneName;
     cout << "Name Player 2:";
     cin >> PlayerTwoName;
     int PlayerOneHP = 100;
     int PlayerTwoHP = 100;
     srand(time(NULL));
     while ((PlayerOneHP > 0)&&(PlayerTwoHP > 0))
     {   
          char ch=getch();
	  int dm = rand()%10+1;
	  if (ch=='q') 
          {	
              cout << PlayerOneName << " did " << dm << " damage to " << PlayerTwoName << " ";
              PlayerTwoHP -= dm;
              cout << PlayerTwoHP<<endl;
          } 
          else if (ch=='p') 
          {
              cout << PlayerTwoName << " did " << dm << " damage to " << PlayerOneName << " ";
	      PlayerOneHP -= dm;
	      cout << PlayerOneHP<<endl;
          }
     }
     system("pause");
     return 0;
}
Редактирано от ined (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
публикувано (редактирано)

До колкото разбирам:

srand(time(NULL)); = default_random_engine randomDamage(time(0));

int dm = rand()%10+1; = uniform_int_distribution<int> Damage(1, 10); ?

Не разбрах и защо не получаваш грешка, когато използваш само една променлива dm, а не две, както аз съм го написал ? 

Да ни би, когато са в едни къдрави скоби да разбира един и същ дмг, а когато са разделени да разбира друг ?

#include <iostream>
#include <string>
#include <random>
#include <ctime>
#include <conio.h>


using namespace std;
int main()
{
	string PlayerOneName;
	string PlayerTwoName;
	cout << "Name Player 1:";
		cin >> PlayerOneName;
		cout << "Name Player 2:";
		cin >> PlayerTwoName;
		int PlayerOneHP = 100;
		int PlayerTwoHP = 100;
	default_random_engine randomDamage(time(0));
	uniform_int_distribution<int> Damage(1, 10);
	while (PlayerOneHP > 0 || PlayerTwoHP > 0)
	{
		char ch = getch();
		int dm = Damage(randomDamage);
		if (ch == 'q')
		{
			cout << PlayerOneName << " did " << dm << " damage to " << PlayerTwoName << endl;
			PlayerTwoHP = PlayerTwoHP - dm;
			cout << PlayerTwoHP;
		}
		else if (ch == 'p')
		{
			cout << PlayerTwoName << " did " << dm << " damage to " << PlayerOneName << endl;
			PlayerOneHP = PlayerOneHP - dm;
			cout << PlayerOneHP;
		}
	}
	
	system("pause");
	return 0;

}

написах го и ми казва, че имам грешка при getch :(

Получи се, но, когато сложих _getch вместо getch. Можеш ли да обясниш защо стана така ? 

Ако можеш да ми кажеш как мога да сложа % шанс за удар изобщо,как да забраня да удрям по 2 пъти последователно( просто да не ми изпише нищо, а програмата да не се затвори изцяло) и ако има възможност да не се явява на всеки ред живота колко е останал, а да е написан най-отгоре и само цифрите да се променят ще съм ти благодарен :). Ако можеш да го направиш, не мисля, че ще го разбера ако ми напишеш програмата, ами примерно да напишеш 3 отделни малки програмки и аз да си го вкарам :)

Редактирано от radgx (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

<conio.h> не е стандарна библиотека и може да я нямаш - обаче без нея няма и getch()

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Сигурен съм, че я имам. Със VS2013 съм, но просто ми искаше да напиша _getch, а с getch не стана.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
публикувано (редактирано)
#include <iostream>
#include <string>
#include <random>
#include <ctime>
#include <stdio.h>



int main()
{
using namespace std;
    bool P=true;
    int dm, PlayerOneHP, PlayerTwoHP;
    int ch;
	string PlayerOneName,PlayerTwoName;
        cout << "Name Player 1:";
		cin >> PlayerOneName;
		cout << "Name Player 2:";
		cin >> PlayerTwoName;
		PlayerOneHP = 100;
		PlayerTwoHP = 100;
	default_random_engine randomDamage(time(0));
	uniform_int_distribution<int> Damage(1, 10);
	while (P)
	{

        cout <<PlayerOneName <<" "<<PlayerOneHP<<"  "<<PlayerTwoName<<" "<<PlayerTwoHP<<"\n";
		ch=getchar();
		system("clear"); // "cls"
		dm = Damage(randomDamage);
		switch(ch)
		{
			case 'q':
                {

                    PlayerTwoHP = PlayerTwoHP - dm;
                    if (PlayerTwoHP<=0)

                            P=false;

                    cout <<PlayerOneName << " did " << dm << " damage to " << PlayerTwoName <<"\n";
                    getchar();

                }break;
            case 'p' :
                {
                    cout << PlayerTwoName << " did " << dm << " damage to " << PlayerOneName <<"\n";
                    PlayerOneHP = PlayerOneHP - dm;
                    if (PlayerOneHP<=0)

                            P=false;
                    getchar();

                }

        }

    }
	system("pause");
	return 0;

}

Нещо такова ?

Редактирано от Jonnie_ (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.