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.
Fragen eines Anfängers
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
-
- Establishment
- Beiträge: 130
- Registriert: 01.03.2009, 14:21
- Alter Benutzername: frittentuete
Re: Fragen eines Anfängers
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:
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
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; };
};
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
Re: Fragen eines Anfängers
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.
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.
- Lord Delvin
- Establishment
- Beiträge: 577
- Registriert: 05.07.2003, 11:17
Re: Fragen eines Anfängers
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
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:)
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);
}
}
};
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:)
Re: Fragen eines Anfängers
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
"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