Hilfe bei der Problemfindung [Anfänger]
-
Ja, siehe mein Edit. Ist mir eh schon peinlich :p.
Kommt davon wenn man so im vorbeigehen antwortet..

-
Les auch mal das hier:
http://www.c-plusplus.net/forum/39326
-
Danke, jetzt geht er nicht mehr in den minus bereich.
Doch erscheint die Nachricht das das Ziel besiegt ist immer noch nicht-
Ist es verkehrt das mit else zu machen?
-
Ganz übersehen.
Ja, ist so verkehrt, weil die Bedingung des if-blocks nur am anfang einmal geprüft wird, wenn die Funktion aufgerufen wird. Setz das einfach nach der for-schleife hin.void training1() { int hit = 20; int targetLife; char eingabe; if( targetLife != 0 ) { for( targetLife = 100; targetLife != 0; targetLife - 20 ) { cout << "Um das Ziel anzugreifen, gebe A für Angriff ein: "; cin >> eingabe; if( eingabe == 'A' ) { targetLife = targetLife - hit; cout << "Treffer! Das Ziel verliert 20LP" << endl; cout << "Das Ziel hat noch " << targetLife << " Lebenspunkte!" << endl; } else { while( eingabe != 'A' ) { cout << "Diesen Befehl gibt es nicht!" << endl; cout << "Um das Ziel anzugreifen, gebe A für Angriff ein: " << endl; cin >> eingabe; if( eingabe == 'A' ) { targetLife = targetLife - hit; cout << "Treffer! Das Ziel verliert 20LP" << endl; cout << "Das Ziel hat noch " << targetLife << " Lebenspunkte!" << endl; } } } } cout << "Super, du hast das Ziel besiegt!" << endl; } }
-
Wieso angreifen? Der Gegner verläuft sich eh im Klammerwald...
-
Scorcher24 schrieb:
if-schleife

-
Scorcher24 schrieb:
Ganz übersehen.
Ja, ist so verkehrt, weil die Bedingung der if-Abfrage nur am anfang einmal geprüft wird, wenn die Funktion aufgerufen wird. Setz das einfach nach der for-schleife hin.void training1() { int hit = 20; int targetLife; char eingabe; if( targetLife != 0 ) { for( targetLife = 100; targetLife != 0; targetLife - 20 ) { cout << "Um das Ziel anzugreifen, gebe A für Angriff ein: "; cin >> eingabe; if( eingabe == 'A' ) { targetLife = targetLife - hit; cout << "Treffer! Das Ziel verliert 20LP" << endl; cout << "Das Ziel hat noch " << targetLife << " Lebenspunkte!" << endl; } else { while( eingabe != 'A' ) { cout << "Diesen Befehl gibt es nicht!" << endl; cout << "Um das Ziel anzugreifen, gebe A für Angriff ein: " << endl; cin >> eingabe; if( eingabe == 'A' ) { targetLife = targetLife - hit; cout << "Treffer! Das Ziel verliert 20LP" << endl; cout << "Das Ziel hat noch " << targetLife << " Lebenspunkte!" << endl; } } } } cout << "Super, du hast das Ziel besiegt!" << endl; } }Danke jetzt klappts

-
Hab dir hier das ganze mal ein wenig aufgepeppt :D.
Ja, mir war grade langweilig. Geht bestimmt noch besser, aber vllt hilfts ja irgendwie beim lernen...#include <iostream> #include <string> using namespace std; class WeaponBase { public: WeaponBase( unsigned int attk, const string& name ) : m_attack(attk), m_name(name) {} unsigned int getAttack() const { return m_attack; } const string& getName() const { return m_name; } protected: string m_name; unsigned int m_attack; }; class Enemy { public: Enemy( unsigned int health, const string& name, WeaponBase w ) : m_health(health), m_name(name), m_weapon(w) {} unsigned int getHealth() const { return m_health; } const string& getName() const { return m_name; } const WeaponBase& getWeapon() const { return m_weapon; } void takeDamage( Enemy& e ) { m_health -= e.getWeapon().getAttack(); } void changeWeapon(WeaponBase w ) { m_weapon = w; } void changeName( const string& name ) { m_name = name; } protected: WeaponBase m_weapon; unsigned int m_health; string m_name; }; class Player : public Enemy { public: Player(const string& name) : Enemy(100, name, WeaponBase(20, "Holzschwert") ) {} }; bool combat(Player& p, Enemy& e) { char input = 0; cout << "----------------------------------------" << endl; cout << "\tEin Kampf!" << endl; cout << "\t" << p.getName() << " vs. " << e.getName() << endl; cout << "----------------------------------------" << endl; while ( e.getHealth() != 0 && p.getHealth() != 0 ) { cout << "a) Angreifen" << endl; cout << "f) Fliehen" << endl; cin >> input; if ( input == 'a' ) { e.takeDamage( p ); if ( e.getHealth() != 0 ){ cout << "Treffer! " << e.getName() << " hat noch " << e.getHealth() << " Leben" << endl; } p.takeDamage( e ); if ( p.getHealth() != 0 ){ cout << "Treffer! " << p.getName() << ", sie haben noch " << p.getHealth() << " Leben" << endl; } } if ( input == 'f' ) { cout << p.getName() << ", sie konnten entkommen." << endl; p.changeName( p.getName() + string( " der Angsthase" ) ); break; } } if ( e.getHealth() == 0 ){ cout << e.getName() << " wurde besiegt!" << endl; return true; } if ( p.getHealth() == 0 ){ cout << "Sie wurden besiegt!" << endl; return false; } } int main() { char input = 0; string name; cout << "Ihr Name: "; cin >> name; Player player(name); while ( input != 'q' ) { cout << player.getName() << ", bitte w\x84 \bhlen sie eine Aktion: " << endl; cout << "t) Training" << endl; cout << "q) Beenden" << endl; cin >> input; switch( input ) { case 't': { Enemy e( 100, "Trainingspuppe", WeaponBase(1, "Faust") ); combat(player, e); break; } default: break; } } }
-
OOP habe ich mir noch nicht angeschaut, das kommt erst noch

Sobald ich mich auch damit beschäftige werde ich deinen Code mal genauer angucken, hilft mir bestimmt
Danke
-
Ok, dann will ich euch meinen Murks auch ned vorenthalten:
#include <string> #include <iostream> class character_t { friend std::ostream & operator<<(std::ostream&, const character_t&); private: const std::string name; const unsigned int initial_power; unsigned int current_power; public: character_t( const std::string &name, unsigned int power ) : name(name), initial_power(power), current_power(power) { } operator bool( ) const { return current_power > 0; } std::string get_name() { return name; } void attack( character_t &victim ) { victim.current_power -= 2; } }; std::ostream & operator<<(std::ostream &os, const character_t &character) { os << character.name << " " << character.current_power << " / " << character.initial_power; return os; } int main() { character_t player( "Spieler", 10 ); character_t enemy( "Monsti", 10 ); char choice = 0; do { std::cin >> choice; if( std::tolower( choice ) == 'a') { player.attack( enemy ); } std::cout << player << " - vs - " << enemy << "\n" << std::endl; } while( player && enemy ); std::cout << ( player ? player.get_name() : enemy.get_name() ) << " hat gewonnen!\n\n" << std::endl; }Wer g'winnt is zumindest klar
