Fragen eines Anfängers

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Ragfast
Beiträge: 5
Registriert: 20.07.2009, 18:32

Fragen eines Anfängers

Beitrag von Ragfast »

Ich hab den Thread hier mal aufgemacht unter dem Namen weil sicherlich noch mehr Fragen folgen werden da ich
erst seit kurzem das Programmieren (C++) angefangen habe. Ich hoffe es ist ok das ich alle meine "Anfängerfragen" dann hier
reinposte wenn nicht mach ich extra Threads.

Der ist Stand:
Ich bin zwar nich weit entfernt wirklich ein spiel programmieren zu können aber ich hab mir trotzdem mal 3 Klassen
erstellt. Warrior, Archer und Horseman, mit dein Variablen Hp, attack, defense.
Hab mir ein kleines programm geschrieben in dem ich 2 der 3 klassen auswählen und gegeneinander "kämpfen" lassen kann.
Also so lange bis die Hp des einen Kämpfers 0 ist.

Die Frage:
Das funktioniert allerdings nur wenn solange die Variablen im public bereich der Klasse sind. In dem Buch durch das ich gerade lese
sollte man aber am besten die Variablen unter private stellen. Gibts da eine möglichkeit das die Variablen im private Bereich stehen
können und das trotzdem funktioniert? Oder über den Destruktor?

Ach ja momentan gebe ich noch alles unter System32\cmd aus das sollte ich vielleicht noch dazusagen.
Über Antworten oder Tipps würd ich mich sehr freuen.
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: Fragen eines Anfängers

Beitrag von Dirk Schulz »

Hi,

hm ... wollen wir mal versuchen deinen etwas wirren (tschuldigung :) ) text zu entwirren.

Du versuchst dich also an objektorientierter Programmierung? Welches Buch liest du denn das Thema betreffend? Eigentlich sollte dir dieses nämlich sagen, wie du von ausserhalb die Variablen ändern kannst.

Aber mal von Anfang an: Du hast erstmal einen Denkfehler (oder eine falsche benennung) in deinem Programm.

Da der Warrior, Archer und Horseman dieselben Attribute (Variablen) haben, sind sie prädestiniert dafür, derselben Klasse anzugehören! Diese könnte zum Beispiel so aussehen:

Code: Alles auswählen

class Character
{
private:
     int hp;
     unsigned int attack;
     unsigned int defense;
public:
     Character(): hp(100), attack(10), defense(20) {};
     int getHP() { return hp; };
     void takeDamage(int damagetaken) { hp -= (damagetaken-defense); };
     unsigned int getAttack() { return attack; };
};
Wie du vielleicht siehst, ist dort auch die Lösung für den Zugriff auf die privaten Variablen zu sehen, du musst Funktionen deklarieren, die die Werte ändern. Das ist eigentlich eines der fundamentalen Dinge an objektorientierter Programmierung, dass sollte dein Buch eigentlich beschrieben haben! Es geht darum, die Änderung der Variablen der Klasse zu überlassen, da so bei Änderungen an der Klasse (intern) keine Änderung woanders im Code nötig sind.

Jetzt hast du eine Klasse Character und kannst davon Instanzen erzeugen, wie z.b. deinen Warrior, Archer etc., wenn diese nur einmal vorkommen.

Du kannst allerdings auch eine Klasse Warrior erstellen, die von Character erbt und damit verschiedene Instanzen von Warrior erstellen.

Ich hoffe das war nicht zuviel Text und du hast die Konzepte z.T. verstanden

Dirk Schulz
Ragfast
Beiträge: 5
Registriert: 20.07.2009, 18:32

Re: Fragen eines Anfängers

Beitrag von Ragfast »

Also erstmal vielen dank für deine Antwort und sorry falls der Text ein bisschen wirr ist/war^^
Ich werd mal mit deinem Vorschlag ein bisschen experementieren weil meine "Einheiten" ja
verschiedene Werte attack und defense Werte haben also der Warrior z.b. andere als der
Archer aber das werd ich schon hinkriegen vielleicht will ich auch zu viel auf einmal.^^
Hab vor nicht ganz 3 Wochen angefangen.
Ach ja das Buch nach dem ich momentan vor allem gehe ist:
C++ für Spieleprogrammierer von Heiko Kalista.
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 577
Registriert: 05.07.2003, 11:17

Re: Fragen eines Anfängers

Beitrag von Lord Delvin »

Naja aber du kannst ja folgendes machen:
Einheiten werden in Gebäuden wie z.B. einer Kaserne erzeugt.
Also gibst du nem Gebäude ne Methode machEinheit(EinheitenTyp typ), wobei EinheitenTyp ein enum ist, in dem du mit einem switch dann die ausprägungen einer Einheit festlegst.

Also sowas wie

Code: Alles auswählen

class Einheit{
  const int hp;
  const int attack;
  ...

  Einheit(int hp, int attack)
   hp(hp), attack(attack){ };

...
};

bzw.
enum EinheitenTyp{
  Warrior,
  Spearman,
};

class Gebaeude{
   Einheit baueEinheit(EinheitenTyp typ){
   switch(typ)
   {
      default:
         printf("%s %d: unknown type %d\n", __FILE__, __LINE__, typ);
      case Warrior:
        return Einheit(100, 5);
     case Spearman:
        return Einheit(80, 10);
   }
}

};
Naja is jetzt etwas pseudo C++, is aber auch echt n kramp mit diesem "Editor" code zu schreiben.
Gruß

Edit: Programmieren ist wie Skat, man muss sich am anfang durchverlieren, aber wenn mans ne zeit gemacht hat, dann fängts an richtig spaß zu machen:)
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Ragfast
Beiträge: 5
Registriert: 20.07.2009, 18:32

Re: Fragen eines Anfängers

Beitrag von Ragfast »

Dir auch mal vielen dank ja der anfang ist meist nicht so leicht ist halt wie bei ner
"normalen" Sprache, man muss halt nicht nur die Wörter können, sondern vor allem die
Gramatik und den Satzbau^^. Ist hier ja auch nicht viel anders. :D
Antworten