Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Class}Non modification de mes attributs.

21 février 2020 à 23:45:41

Bonjour,

j'ai une classe Entity, avec des attributs comme m_hp, et une méthode attack() et décire().

Le probème c'est que la méthode decrire() ne prend pas en compte l'attaque.

Resultat:

Gandalf a 10000/10000 pv et 5000/5000 de mana.
Il a une maîtrise de la magie de niveau 5
Il tient un Epée de l'End dans sa main.


Gollum a 500/500 pv et 100/100 de mana.
Il a une maîtrise de la magie de niveau 2
Il tient un Brindille dans sa main.


Bilbon Saquet a 2000/2000 pv et 200/200 de mana.
Il a une maîtrise de la magie de niveau 3

------------------
Gandalf attaque Gollum avec Epée de l'End
400

Gollum attaque Bilbon Saquet avec Brindille
1999

Bilbon Saquet frappe de toutes ses forces Gandalf.
9990 -> pv de Gandalf.

------------------
Gandalf a 10000/10000 pv et 5000/5000 de mana. -> mais là ça ne change pas !
Il a une maîtrise de la magie de niveau 5
Il tient un Epée de l'End dans sa main.


Gollum a 500/500 pv et 100/100 de mana.
Il a une maîtrise de la magie de niveau 2
Il tient un Brindille dans sa main.


Bilbon Saquet a 2000/2000 pv et 200/200 de mana.
Il a une maîtrise de la magie de niveau 3

Code :

Entity.cpp

void Entity::attack(Entity &target)
{
	int damage;
	if (m_weapon == nullptr)
	{
		std::cout << m_name << " frappe de toutes ses forces " << target.m_name << "." << std::endl;
		damage = m_strength;
	}
	else
	{
		std::cout << m_name << " attaque " << target.m_name << " avec " << m_weapon->get_name() << std::endl;
		damage = m_weapon->get_damage();
	}
	target.m_hp -= damage;
	std::cout << target.m_hp << std::endl;
}

void Entity::describe()
{
	
	std::cout << m_name << " a " << m_hp << "/" << m_hp_max << " pv et " << m_mana  << "/" << m_mana_max << " de mana." << std::endl;
	std::cout <<"Il a une maîtrise de la magie de niveau " << m_mastery << std::endl;
	if (m_weapon != nullptr)
		std::cout << "Il tient un " << m_weapon->get_name() << " dans sa main." << std::endl << std::endl;
}

main.cpp

int main(int argc, char *argv[])
{
	srand(time(0));
	Weapon end_sword(500, 5, "Epée de l'End", 100), twig(0, 1, "Brindille", 1);
	Entity gandalf(10000, 5000, 5, "Gandalf", &end_sword), gollum(500, 100, 2, "Gollum", &twig), bilbon(2000, 200, 3, "Bilbon Saquet") ;
	std::vector<Entity> list { gandalf, gollum, bilbon };
	auto taille { std::size(list) };
	for(auto e : list)
	{
		e.describe();
		std::cout << std::endl;
	}
	std::cout << "------------------" << std::endl;
	for(auto e : list)
	{
		Entity target {e} ;
		do
		{
			target = list[rand() % taille];
		}while(target == e);
		e.attack(target);
		std::cout << std::endl;
	}
	std::cout << "------------------" << std::endl;
	for(auto e : list)
	{
		e.describe();
		std::cout << std::endl;
	} 





  • Partager sur Facebook
  • Partager sur Twitter
21 février 2020 à 23:53:12

Avec ceci for(auto e : list), e est une copie de l'élément dans la boucle. Il faut ajouter une référence pour appliquer les modifs sur l'élément dans la liste -> auto& e.

  • Partager sur Facebook
  • Partager sur Twitter
22 février 2020 à 9:03:09

Merci, mais ça ne marche toujours pas...

Quelqu'un sait comment faire ?

-
Edité par EnderRayquaza 22 février 2020 à 18:01:45

  • Partager sur Facebook
  • Partager sur Twitter