Ergebnis 1 bis 2 von 2
  1. #1
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard Project schwierigkeiten (Fehler)

    Hallo, ich arbeite an einem Prokjekt... Läuft auch schon ganz gut, jedoch gibt es einen ganz großen Fehler im Projekt. Ich vermute es liegt an dem Konstruktor oder an dem aufruf des Konstruktors, in der main.cpp Hier erstmal der Code:
    Code:
    //Common_Header.h
    
    #ifndef COMMON_HEADER_H
    #define COMMON_HEADER_H
    
    #include <iostream>
    #include <cstdlib>
    #include <conio.h>
    #include <ctime>
    #include <windows.h>
    #include <mmsystem.h>
    
    
    typedef unsigned int uint;
    using namespace std;
    #endif
    Code:
    //Monster.h
    
    #include "common_header.h"
    
    #ifndef _MONSTER_H
    #define _MONSTER_H
    
    
    
    class Monster {
          
          private:
                  
          //Deklaration der Eigenschaften
                  
           uint  Health;
           uint  Strenght;
           uint  Mana;
           
          
          public:
                 
          //Deklaration der Konstruktoren
          Monster(uint h, uint s, uint m);
          Monster(uint h, uint s);
          Monster(uint h);
          Monster( );    //Standardkonstruktor
          
          //Deklaration des Destruktors
          ~Monster( );   //Wird aufgerufen sobald eine Instanz zerstört wird
          
          //Deklaration der Funktionen
          
          //Deklarationen der Zugriffsmethoden (get)
          uint  get_Health(void) const;
          uint  get_Strenght(void) const;
          uint  get_Mana(void) const;
          
          //Deklarationen der Zugrissmethoden (set)
          void set_Health(uint h);
          void set_Strenght(uint s);
          void set_Mana(uint m);
          
          //Deklaration der Adventure-Funktionen
          void Monster_get_Health ();      //Monster bekommt Leben
          void Monster_get_Mana ();        //Monster bekommt Mana
      
          void Monster_get_hit();         //Monster wird getroffen   
          void Monster_Attack();          //Monster greift an
    };
    
    #endif
    Code:
    
    //Soldat.h
    
    #include "common_header.h"
    
    #ifndef SOLDAT_H
    #define SOLDAT_H
    
    class Soldat{
          
          //Deklaration der Eigenschaften
          
          private:
                  
          uint  Soldat_Health;
          uint  Soldat_Strenght;
          uint  Soldat_Mana;
          
          public:
                 
          //Deklaration der Konstruktoren
          Soldat(uint h, uint s, uint m);
          Soldat(uint h, uint s);
          Soldat(uint h);
          Soldat( );    //Standardkonstruktor
          
          //Deklaration des Destruktors
          ~Soldat( );   //Wird aufgerufen sobald eine Instanz zerstört wird
          
          //Deklaration der Funktionen
          
          //Deklarationen der Zugriffsmethoden (get)
          uint  get_Soldat_Health(void) const;
          uint  get_Soldat_Strenght(void) const;
          uint  get_Soldat_Mana(void) const;
          
          //Deklarationen der Zugrissmethoden (set)
          void set_Soldat_Health(uint h);
          void set_Soldat_Strenght(uint s);
          void set_Soldat_Mana(uint m);
          
          //Deklaration der Adventure-Funktionen
          void Soldat_get_Health ();      //Soldat bekommt Leben
          void Soldat_get_Mana ();        //Soldat bekommt Mana
      
          void Soldat_get_hit();         //Soldat wird getroffen   
          void Soldat_Attack();          //Soldat greift an
    };
    
    #endif
    Code:
    //Monster.cpp
    
    #include "monster.h"
    #include "soldat.h"
    
         //Definitionen der Konstruktoren
         
         Monster::Monster(uint h, uint s, uint m){
         uint Health   = h;
         uint Strenght = s;
         uint Mana     = m;
         }
         Monster::Monster(uint h, uint s){
         uint Health   = h;
         uint Strenght = s;
         //Sobald Mana nicht angegeben wird, Mana = 100
         uint Mana     = 100;
         }
         Monster::Monster(uint h){
         uint Health   = h;
         //Sobald Stärke nicht angegeben wird, Stärke = 100
         uint Strenght = 100;
         //Sobald Mana nicht angegeben wird, Mana = 100
         uint Mana     = 100;
         }
         Monster::Monster( ){    //Definition Standardkonstruktor
         //Sobald keine Parameter übergeben werden, Perfektes Mosnter
         
         uint Health   = 100;
         uint Strenght = 100;
         uint Mana     = 100;
         }
         
         //Definition des Destruktors
         Monster::~Monster( ){   //Desktruktor darf niemals Parameter haben
         PlaySound(TEXT("Monster_die.wav"), NULL, SND_FILENAME);
         int live = 20;
         cout<<"Du hast das Monster getötet..."<<endl;
         Sleep(5000);
         cout<<"Du erhälst 20 Leben..."<<endl;
         //Soldat::set_Soldat_Health(live);
         //#error "Bitte bei dem Soldat leben auffüllen lassen(Monster.cpp)- Destruktor"
         }
         
         //Definition der Zugriffsmethoden (get)
          uint Monster::get_Health(void) const{
                return Health;
                }
          uint Monster::get_Strenght(void) const{
               return Strenght;
               }
          uint Monster::get_Mana(void) const{
               return Mana;
               }
               
          //Definition der Zugriffsmethoden (set)
          void Monster::set_Health(uint h){
               Health += h;
               }
          void Monster::set_Strenght(uint s){
                Strenght += s;
                }
          void Monster::set_Mana(uint m){
               Mana += m;
               }
               
          //Definition der Advanture-Funktionen
          void Monster::Monster_get_Health (){
               uint Random;                                        
               srand((uint)time(0));            
               Random = (rand()%100)+1;         
               Monster::set_Health(Random);
               if(Health > 100) Health = 100;
               cout<<"Das Monster hat Leben bekommen:"<<endl;
               cout<<"Monster: "<<this->Health<<endl;
               }
          
          void Monster::Monster_get_Mana (){
               uint Random;
               srand((uint)time(0));
               Random = (rand()%100)+1;
               Monster::set_Mana(Random);
               if(Mana > 100) Mana = 100;
               cout<<"Das Monster hat Mana bekommen:"<<endl;
               cout<<"Monster: "<<this->Mana<<endl;
               }
               
          void Monster::Monster_get_hit(){
               PlaySound(TEXT("Monster_get_hit.wav"), NULL, SND_FILENAME);
              cout<<"Leben des Monster: "<<this->Health<<endl;
              //#error "Bitte nochmal überarbeiten in Verbindung mit Soldat"
              }
              
          void Monster::Monster_Attack(){
              PlaySound(TEXT("Monster_attack.wav"), NULL, SND_FILENAME);
              cout<<"Das Monster greift mit "<<this->Strenght<<" Stärke an..."<<endl;
              //#error "Bitte nochmal überarbeiten in Verbindung mit Soldat"     
              }
    Code:
    //Soldat.cpp
    
    #include "soldat.h"
    #include "monster.h"
    
         //Definitionen der Konstruktoren
         
         Soldat::Soldat(uint h, uint s, uint m){
         uint Soldat_Health   = h;
         uint Soldat_Strenght = s;
         uint Soldat_Mana     = m;
         }
         Soldat::Soldat(uint h, uint s){
         uint Soldat_Health   = h;
         uint Soldat_Strenght = s;
         //Sobald Mana nicht angegeben wird, Mana = 100
         uint Soldat_Mana     = 100;
         }
         Soldat::Soldat(uint h){
         uint Soldat_Health   = h;
         //Sobald Stärke nicht angegeben wird, Stärke = 100
         uint Soldat_Strenght = 100;
         //Sobald Mana nicht angegeben wird, Mana = 100
         uint Soldat_Mana     = 100;
         }
         Soldat::Soldat( ){    //Definition Standardkonstruktor
         //Sobald keine Parameter übergeben werden, Perfekter Soldat
         
         uint Soldat_Health   = 100;
         uint Soldat_Strenght = 100;
         uint Soldat_Mana     = 100;
         }
         
         //Definition des Destruktors
         Soldat::~Soldat( ){   //Desktruktor darf niemals Parameter haben
         system("CLS");
         cout<<"~~~~~~~~~~Game Over~~~~~~~~~~"<<endl;
         getch();
         }
         
         //Definition der Zugriffsmethoden (get)
          uint Soldat::get_Soldat_Health(void) const{
                return Soldat_Health;
                }
          uint Soldat::get_Soldat_Strenght(void) const{
               return Soldat_Strenght;
               }
          uint Soldat::get_Soldat_Mana(void) const{
               return Soldat_Mana;
               }
               
          //Definition der Zugriffsmethoden (set)
          void Soldat::set_Soldat_Health(uint h){
               Soldat_Health += h;
               if(Soldat_Health > 100) Soldat_Health = 100;
               }
          void Soldat::set_Soldat_Strenght(uint s){
                Soldat_Strenght += s;
                if(Soldat_Strenght > 100) Soldat_Strenght = 100;
                }
          void Soldat::set_Soldat_Mana(uint m){
               Soldat_Mana += m;
               if(Soldat_Mana > 100) Soldat_Mana = 100;
               }
               
          //Definition der Advanture-Funktionen
          void Soldat::Soldat_get_Health (){
               uint Random;                                        
               srand((uint)time(0));            
               Random = (rand()%100)+1;         
               Soldat::set_Soldat_Health(Random);
               cout<<"Du bekommst Leben:"<<endl;
               cout<<"Soldat: "<<this->Soldat_Health<<endl;
               }
          
          void Soldat::Soldat_get_Mana (){
               uint Random;
               srand((uint)time(0));
               Random = (rand()%100)+1;
               Soldat::set_Soldat_Mana(Random);
               cout<<"Du ahst Mana bekommen:"<<endl;
               cout<<"Soldat: "<<this->Soldat_Mana<<endl;
               }
               
          void Soldat::Soldat_get_hit(){
              //cout<<"Du wurdest von einem Monster mit "<<Monster::get_Strenght()<<endl;
              //#error "Bitte nochmal überarbeiten in Verbindung mit Soldat"
              }
              
          void Soldat::Soldat_Attack(){
              cout<<"Du greifst ein Monster mit "<<this->Soldat_Strenght<<" Stärke an..."<<endl;
              //#error "Bitte nochmal überarbeiten in Verbindung mit Soldat"     
              }
    Code:
    #include "common_header.h"
    #include "monster.h"
    #include "soldat.h"
    using namespace std;
    
    DWORD WINAPI PlaySoundThread(void *file)
    {
        PlaySound((const char *) file, NULL, SND_FILENAME);
        return 0;
    }
    
    
    
    int main(){
        
        int AgentenWahl = 0;
    
        
        
        Monster Org(100, 100, 100);
        
        Sleep(3000);
        
    
    
        CreateThread(0, 0, PlaySoundThread, (void *) "music.wav", 0, NULL);
    
        do{
        system("CLS");
        cout<<"\t\t     -------------The Game-------------"<<endl<<endl;
        
        cout<<"\t\t     Wähle deinen Agenten aus:"<<endl<<endl;
        
        cout<<"\t\t     1.     \t\tJohn"<<endl; 
        cout<<"\t\t     2.     \t\tTommy"<<endl; 
        cout<<"\t\t     3.     \t\tJason"<<endl; 
        cout<<"\t\t     4.     \t\tJack"<<endl; 
        cout<<"\t\t     5.     \t\tSpiel Ende"<<endl;
        cin>>AgentenWahl;
        if(AgentenWahl > 4 && AgentenWahl != 5 || AgentenWahl <= 0){
                        cout<<"Fehler bei der Eingabe...Bitte versuche es erneut...";
                        getch();
                        }
        
        if(AgentenWahl == 5){
                        exit (1);
                        }
        system("CLS");
        
        switch(AgentenWahl){
        case 1:                     
              Soldat John();                     
              cout<<"Du hast John gewählt"<<endl;
        break;
        case 2:
              Soldat Tommy();                     
              cout<<"Du hast Tommy gewählt"<<endl;
        break; 
        case 3:
              Soldat Jason();                     
              cout<<"Du hast Jason gewählt"<<endl;
        break;  
        case 4:
              Soldat Jack();
              cout<<"Du hast Jack gewählt"<<endl;
        break;
        }//Ende von switch
        
        
        
        getch();
        
        cout<<"Monsters Leben:"<<Org.get_Health()<<endl;
        cout<<"Monsters Mana :"<<Org.get_Mana()<<endl;
        cout<<"Monsters Särke:"<<Org.get_Strenght()<<endl;
        
        Org.Monster_Attack();
        Org.Monster_get_hit();
        
        }while(AgentenWahl = 0);
        
        
        
        
        return 0;
    }
    Ausgabe:

    -------------The Game-------------

    Wõhle deinen Agenten aus:

    1. John
    2. Tommy
    3. Jason
    4. Jack
    5. Spiel Ende

    1
    Du hast John gewählt
    Monsters Leben:2009095316
    Monsters Mana :4294967295
    Monsters Sõrke:2008948848

    Ich glaube jeder kann erkennen das das Leben der Monster und die Stärke sowie auch Mana nicht sooo hoch sein sollten.
    Ich hoffe ihr könnt mir helfen.
    Geändert von jookerxxx (01.05.2009 um 13:18 Uhr) Grund: Automerged Doublepost

  2. #2
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Im Konstruktor tust du folgendes:
    Code:
         Monster::Monster(uint h, uint s, uint m){
         uint Health   = h;
         uint Strenght = s;
         uint Mana     = m;
         }
    Was du hier machen wolltest ist die Attribute Health, Strenght (heißt korrekterweise eigentlich "Strength") und Mana deines Objekts mit den Werten h, s und m belegen.

    Da diesen aber ein "uint" davorgestellt hast werden diese als lokale Variablen interpretiert. (siehe Namenskollision -> this-Zeiger benutzen)
    Deine richtigen Attribute werden somit nie belegt und deren Wert bleibt undefiniert.

    Um das zu ändern musst du einfach das "uint" entfernen.
    (das hast du bei der Soldat-Klasse auch so gemacht, also auch diese editieren!)


    mfG. BlackBerry

    PS: dein Programmierstil ist grauenhaft ^^

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •