Templates
-
Wer stellt denn solche Aufgaben? Wenn du etwas mit Templates machen willst, dann setz dich an ein Template-typisches Problem. Ansonsten solltest du mal deinen Dozenten fragen, wie er das mit den Templates gemeint hat.
-
Hi,
gefragt habe ich schon. Die Antwort war dieselbe wie die Aufgabenstellung:
Bei Start des Programms geben Sie dem Spieler eine Auswahlmöglichkeit,
mit welchen Objekten er spielen möchte (mindestens 2), dieentsprechende
Klasse für die Objektverwaltung ist als template ausgeprägt und wird
mit der ausgewählten Kombination aus Spieler und Fangobjekt initialisiert.Ich glaube, man muss aus den Spielobjekten, mit denen der Spieler spielt,
Klassen machen und die dann an Template übergeben. Was dadrin passieren soll
ist mir aber nicht ganz klar.Gruß
-
Also die Objektverwaltung als Template könnte ich mir schon vorstellen:
template<typename Player, typename Follower> class Game_Control { //hier drin gehen wir von einer notwendigen Schnittstelle der möglichen Spieler- und Objekt-Typen aus und verwenden sie };Das Problem dabei ist allerdings, daß du von diesem Template bereits zur Compilezeit entscheiden mußt, für welche Kombination an Typen es instanziiert werden soll - das beißt sich etwas mit der Anforderung "Bei Start des Programms geben Sie dem Spieler eine Auswahlmöglichkeit, ...".
Und ich würde so etwas nicht über ein C++ Template umsetzen, sondern mit dem Entwurfsmuster "Template-Methode" bzw. auf Basis der MFC CRuntimeClass.
-
hi,
interessant leute mit der gleichen aufgabe zu treffen... ; )
ich häng auch grad an der stelle...auswählen klappt, allerdings ohne diese verdammten templates...falls ich noch drauf komme meld ich mich...mfg
mimi
-
Hi,
hast du auch die Operationsüberladung hinbekommen?
Gruß
-
lauerst du hier vor lauter verzweiflung ; )
ne das muß ich noch machen...bin froh das ich schonma das auswählen und die steuerung hinbekommen hab...
haste icq oda so, das is einfacher
-
statt dem timer hab ich auch threads benutzt...da wusste ich wenigstens wies funzt...hoffe das is nich so schlimm
-
ich denke die operatorüberladung braucht man um die koordinaten von den objekten zu vergleichen...man vergleicht ja nicht rein die koordinaten sondern man prüft das mit hilfe des skalarproduktes...man is das blöd zu erklären...
-
CStoll schrieb:
Und ich würde so etwas nicht über ein C++ Template umsetzen, sondern mit dem Entwurfsmuster "Template-Methode" bzw. auf Basis der MFC CRuntimeClass.
Ich würde sowas einfach über "interfaces" (abstrakte Klassen) realisieren.
Template Methoden und/oder CRuntimeClass braucht man dafür nicht.
-
Da braucht man nichtmal Interfaces, da die Figuren und die Gegner vom selben Typ (CBitmap) sind. Es geht also alles ganz bequem mit einer einfachen Klasse, genannt Sprite. (Ich weiß es, weil ich das Programm gesehen habe.)
Ich hab ihm auch schon gesagt, daß sein Professor ein Dummkopf ist, aber naja, was will man machen? Jetzt braucht er irgendeine Pseudo-Funktionalität in der Klasse, die Templates benötigt. Daß Templates überhaupt nichts mit Auswahl zur Laufzeit zu tun haben und dann ja auch normalerweise Typen (CBitmap) und nicht Werte (IDB_SPIELFIGUR) definieren, scheint der Typ, der die Aufgabe gestellt hat, nicht zu checken.
-
Und wie soll man in einer einzigen Klasse (reden wir hier echt von den MFC CBitmap's?) das unterschiedliche Verhalten von Spieler und Gegner(n) unterbringen? Da hat jemand - vermutlich der Aufgabensteller - das Konzept der Objektorientierung gar nicht verstanden.
@hustbaer: Inwieweit widerspricht sich "Template Methode" und "Interface"? Die Template-Methode (nein, die hat nur bedingt mit C++ Templates zu tun) nutzt ein Interface, um spezielle Teilaufgaben auszulagern - und wenn du auf Basis eines Interface deine Funktionen aufbaust, erhältst du auch eine Art Template-Methode (auch wenn du es vermutlich nicht so nennen würdest).
(über CRuntimeClass könnte man streiten - natürlich liese sich sowas dessen Funktionalität auch von Hand schreiben, aber "DECLARE_DYNCREATE(...)" halte ich für eleganter)
-
wofür so umständlich, wenn wir ohne die templates den punkt für diesen teil sowieso nicht bekommen...
ich hab einfach zwei klassen geschrieben...jeweils eine für spieler und gegner und man kann sich am anfang des spieles für objekte einsammeln oder objekten ausweichen entscheiden, indem man die rechte oder die linke maustaste drückt...ich halt mich doch jetzt nich tagelang an diesen dämlichen templates auf...
-
CStoll schrieb:
Und wie soll man in einer einzigen Klasse (reden wir hier echt von den MFC CBitmap's?) das unterschiedliche Verhalten von Spieler und Gegner(n) unterbringen? Da hat jemand - vermutlich der Aufgabensteller - das Konzept der Objektorientierung gar nicht verstanden.
Daß man hier nur eine Klasse verwenden brauch, war meine Idee, das steht nicht in der Aufgabenstellung.
Ich hab die Sprite-Klasse einfach für die Darstellung der Figuren benutzt. Die Bewegung der Gegner (die sich nur nach rechts oder links bewegen) wird über die OnTimer-Funktion geregelt und die Bewegung des Spielers über OnKeyDown und dem Timer. Klar, man könnte eine abstrakte Sprite-Klasse schreiben und dann Spieler und Gegner ableiten und die Bewegungsfunktion je nach Spieler oder Gegner anders realisieren, aber da es dem Prof hier offensichtlich gar nicht um Vererbung geht, sondern um irgendwelche dubiosen Templates, hab ich es einfach gehalten, um Spielr (den Threadersteller) nicht unnötig zu verwirren.
Ach ja: Und es handelt sich tatsächlich um CBitmaps bzw. die Attribute der Klasse Sprite sind: Dynamisches CBitmap-Feld für die Animationsphasen, x, y, transparente Farbe (die also nicht mitgezeichnet wird). Das ganze basiert ursprünglich auf meinem Tutorial auf Erhard Henkes' Seite: www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel9.htm
-
@hustbaer: Inwieweit widerspricht sich "Template Methode" und "Interface"? Die Template-Methode (nein, die hat nur bedingt mit C++ Templates zu tun) nutzt ein Interface, um spezielle Teilaufgaben auszulagern - und wenn du auf Basis eines Interface deine Funktionen aufbaust, erhältst du auch eine Art Template-Methode (auch wenn du es vermutlich nicht so nennen würdest).
(über CRuntimeClass könnte man streiten - natürlich liese sich sowas dessen Funktionalität auch von Hand schreiben, aber "DECLARE_DYNCREATE(...)" halte ich für eleganter)Ich habe das Template Method Pattern bis jetzt immer so verstanden dass man eine oder mehrere Methoden z.B. in einer Basisklasse mit Verwendung von virtuellen Funktionen implementiert die erst in abgeleiteten Klassen implementiert werden.
Sogesehen ist das ein sehr spezieller Einsatz von Interfaces (zumindest wenn man den Begriff Interface etwas frei interpretiert).z.T. CRuntimeClass: ich hatte übersehen dass wir hier im MFC Forum sind. Ich persönlich würde zwar trotzdem nicht CRuntimeClass als Factory verwenden, aber im MFC Forum CRuntimeClass zu empfehlen ist natürlich nicht ganz daneben
