U
naja - da sich niemand anders erbarmt, dir zu sagen, was alles hässlich ist, versuch ich das mal:
/*Krieger.h*/
//include-guards:
#ifndef KRIEGER_H_INCLUDED
#define KRIEGER_H_INCLUDED
#include <string> //std::string
class Krieger
{
public:
typedef unsigned long int Tleben;
typedef unsigned long int Tstaerke; //ein paar typedefs können nicht schaden...
typedef Tstaerke Tdamage;
private:
std::string Name; //ist komfortabler, sicherer und auch schneller, als du es mit char* schaffst :P
Tleben Leben; //variablen-deklarationen sollten immer in eine extra zeile
Tstaerke Staerke;
public:
Krieger (const std::string& name, Tleben leben, Tstaerke staerke);
const std::string& GetName() const {return Name;}
void SetName(const std::string &val) {Name = val;}
TLeben GetLeben() const {return Leben;}
bool IsAlive () const {return static_cast <bool> (Leben);} //0 -> tot, rest ist lebendig
Tdamage GetDamage() const {return Staerke;}
void TakeDamage(const Tdamage& dmg);
/*brauchen wir nicht (mehr), wir haben einen konstruktor:
char * init(char *, long int, long int);
*/
};
namespace fight /*könnte man ggf. noch in einen anderen header verlagern*/
{
void attack (Krieger& lhs, const Krieger& rhs);
}
#endif //#ifndef KRIEGER_H_INCLUDED
/*Krieger.cpp*/
#include "Krieger.h"
Krieger::Krieger(const std::string& name, Krieger::Tleben leben, Krieger::Tstaerke staerke)
: Name(name), Staerke(staerke), Leben(leben)
{}
void Krieger::TakeDamage(const Krieger::Tdamage& dmg)
{
if(Leben < dmg)
{
Leben = 0;
}
else
{
Leben -= dmg;
}
}
void fight::attack(Krieger& lhs, const Krieger& rhs)
{
lhs.TakeDamage ( rhs.GetDamage() );
}
/*main.cpp*/
#include <iostream>
#include <cstdlib>
#include "Krieger.h"
#include <conio.h>
int main () //void schreibt man in C++ nicht mehr in die Parameter-Liste
{
Krieger K1 ("Krieger 1", 10, 3);
Krieger K2 ("Krieger 1", 10, 4);
while (K1.IsAlive() && K2.IsAlive())
{
fight::attack (K1, K2);
fight::attack (K2, K1);
std::cout << K1.GetName() << ": " << K1.GetLeben() << std::endl;
std::cout << K2.Getname() << ": " << K2.GetLeben() << std::endl;
}
getch();
return EXIT_SUCCESS;
}
ich hoffe, es hilft dir ein wenig, du änderst es und vor allem: du verstehst es ^^
bb