Так что в основном я должен написать программу, которая похожа на игру RPG, где есть разные типы существ. Каждое существо является объектом класса Существо и имеет переменные-члены для hitpoints, strength и т. Д.Нужна помощь Получение классов для взаимодействия друг с другом
У меня возникают проблемы с написанием функции, которая обрабатывает и наносит урон между классами.
#include <iostream>
#include <string>
#include <stdlib.h>
using std::cout;
using std::cin;
using std::endl;
using std::string;
//Creature Base Class (Type 0)
class Creature
{
public:
Creature(int, int, int);
int gettype() {return type;}
int getstrength(){return strength;}
int gethitpoints() {return hitpoints;}
void sethitpoints(int);
string getspecies();
void printstats();
void dealdamage(Creature, Creature);
void takedamage(int);
private:
int type;
int strength;
int hitpoints;
};
Creature::Creature(int t, int s, int hp)
{
type = t;
strength = s;
hitpoints = hp;
}
void Creature::printstats()
{
cout << "This creature has: " << endl;
cout << strength << " strength" << endl;
cout << hitpoints << " hitpoints" << endl;
cout << "and is of type " << type << "(" << getspecies() << ")" << endl;
}
void Creature::sethitpoints(int a)
{
hitpoints = a;
}
string Creature::getspecies()
{
switch(type)
{
case 0: return "Creature";
case 1: return "Human";
case 2: return "Elf";
case 3: return "Demon";
case 4: return "Balrog";
case 5: return "Cyberdemon";
}
}
void Creature::dealdamage(Creature dealer, Creature target)
{
srand(5);
int damage;
damage = rand() % strength+1;
cout << dealer.getspecies() << " inflicts " << damage;
cout << " damage to " << target.getspecies() << "!" << endl;
target.takedamage(damage);
}
void Creature::takedamage(int damage)
{
sethitpoints((gethitpoints()-damage));
}
int main()
{
Creature monster1(0, 10, 100);
Creature monster2(1, 7, 90);
monster1.printstats();
monster2.printstats();
monster1.dealdamage(monster1, monster2);
monster2.printstats();
return 0;
}
Прямо сейчас, на выходе программа дает мне это:
This creature has:
10 strength
100 hitpoints
and is of type 0(Creature)
This creature has:
7 strength
90 hitpoints
and is of type 1(Human)
Creature inflicts 5 damage to human!
This creature has:
7 strength
90 hitpoints
and is of type 1(Human)
Так функция dealdamage(), кажется, работает, но функция takedamage() не правильно изменения хитпоинтов из существо, которое получает урон.
Любая помощь будет оценена по достоинству.
Функция 'dealdamage' принимает' Существо 'по значению - вы изменяете хитпоинты локальной копии. Вместо этого попробуйте перейти по ссылке. – tmpearce
Nevermind, я понял, что мне нужно передать целевой класс по ссылке. –
Вы заметите отчетливое отсутствие случайности в номерах повреждений от 'Существо :: dealdamage'. Ваш вызов 'srand (5)' в начале функции в основном говорит генератору случайных чисел, чтобы начать сначала в одной и той же точке последовательности случайных чисел каждый раз, когда вы вызываете 'dealdamage'. Вы должны называть 'srand' ровно один раз, вероятно, в' main', чтобы засеять RNG. – Casey