Baalzamon
2009-05-15, 11:31:32
Irgendwie stehe ich gerade auf dem Schlauch. ;(
Angenommen ich habe eine Creature Klasse, welche eine attack() Methode hat. Diese soll aber austauschabr sein, d.h. zB Nah und Fernkampfangriffe sollen sollen zur Laufzeit austauschbar sein.
Imho würde sich ein Strategy Pattern anbieten.
Jetzt habe ich aber das Problem, das ich innerhalb des konkreten Ausprägung auf die Elemente der übergeordneten Klasse (in diesem Falle also Creature) zugreifen muss, um zB die Blickichtung usw. zu erfahren.
Imho müsste ich doch um an die Referenz der Kreatur zu kommen, diese der attack Methode übergeben. Das geht aber nicht da ich dan ein in-include Fehler bekomme (Creature includiert Attacktype und Attacktype includiert Creature)
Class Attacktype
{
virtual void attack(Creature* c)
}
Class MeleeAttack : public Attacktype
{
virtual void attack(Creature* c)
{ Melee attack code }
}
Class RangeAttack : public Attacktype
{
virtual void attack(Creature* c)
{ Range attack code }
}
Class Creature
{
Attacktype* at;
Quaternion orientation;
}
Creature::setAttacktype(Attacktype type)
{
at = type;
}
Creature::attack()
{
at->attack(this);
}
Irgendwie scheint mir das nicht möglich. Ist das einfach nur schlechtes Design, und wenn ja, wie würde man es sonst machen?
Ich könnte mir im Notfall damit helfen, eine evtl. ewig lange Parameterliste an die Methode zu übergeben und nicht das Objekt selber. Ist aber doch irgendwie unschön?
Class Attacktype
{
virtual void attack(Quaternion orientation, [more Parameters])
}
Creature::attack()
{
at->attack(orientation);
}
Eigentlich sollte ich sowas wissen, aber im Moment habe ich da irgendwie eine Denkblockade. :redface:
Angenommen ich habe eine Creature Klasse, welche eine attack() Methode hat. Diese soll aber austauschabr sein, d.h. zB Nah und Fernkampfangriffe sollen sollen zur Laufzeit austauschbar sein.
Imho würde sich ein Strategy Pattern anbieten.
Jetzt habe ich aber das Problem, das ich innerhalb des konkreten Ausprägung auf die Elemente der übergeordneten Klasse (in diesem Falle also Creature) zugreifen muss, um zB die Blickichtung usw. zu erfahren.
Imho müsste ich doch um an die Referenz der Kreatur zu kommen, diese der attack Methode übergeben. Das geht aber nicht da ich dan ein in-include Fehler bekomme (Creature includiert Attacktype und Attacktype includiert Creature)
Class Attacktype
{
virtual void attack(Creature* c)
}
Class MeleeAttack : public Attacktype
{
virtual void attack(Creature* c)
{ Melee attack code }
}
Class RangeAttack : public Attacktype
{
virtual void attack(Creature* c)
{ Range attack code }
}
Class Creature
{
Attacktype* at;
Quaternion orientation;
}
Creature::setAttacktype(Attacktype type)
{
at = type;
}
Creature::attack()
{
at->attack(this);
}
Irgendwie scheint mir das nicht möglich. Ist das einfach nur schlechtes Design, und wenn ja, wie würde man es sonst machen?
Ich könnte mir im Notfall damit helfen, eine evtl. ewig lange Parameterliste an die Methode zu übergeben und nicht das Objekt selber. Ist aber doch irgendwie unschön?
Class Attacktype
{
virtual void attack(Quaternion orientation, [more Parameters])
}
Creature::attack()
{
at->attack(orientation);
}
Eigentlich sollte ich sowas wissen, aber im Moment habe ich da irgendwie eine Denkblockade. :redface: