JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=a1b1d171b73c96c1af54e4c521e75e5cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Scriptsprache ?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
boeserZwilling
Mini JLI'ler


Alter: 36
Anmeldedatum: 26.08.2007
Beiträge: 11

Medaillen: Keine

BeitragVerfasst am: 27.12.2007, 14:54    Titel: Scriptsprache ? Antworten mit Zitat

Liebe Forumsmitglieder,

ich schreib grad an einem Prog das Fördertechnik simuliert. Also Rollenförderer, Lifte, "Drehtische"....... Alle diese Elemente kann man durch Zusammensetzungen von gewissen Grudelementen beschreiben.
z.B.: Arrow Rollenförderer = Rahmen + Rollen + Antrieb
Arrow Lift = Rollenförderer + weiterer Rahmen(durch Antrieb auf und ab bewegbar) + Antrieb
Arrow Drehtisch = Rollenförderer + drehbares Lager + Rahmen + Antrieb

Die meißten Grundelemente existieren schon als Klassen im C++ Code vorhanden. Nun suche ich nach einer Möglichkeit die Klassen von außen anzulegen.
Etwa, dass in einer Datei steht wie ein Element aus Grundelementen zusammengesetzt ist. In einer anderen Datei, dass dieses Element 10 mal hintereinander gesetzt werden soll.
Oder auch eine Konsole in der man zur Laufzeit eintippen kann welches Objekt erstellt werden soll.

Ist es mit einer Scripsprache wie Python möglich auf C++ Klassen-Instanzen anzulegen?
Hat jemand schon Erfahrung mit solchen Problemen und kann mir da eventuell helfen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 27.12.2007, 22:07    Titel: Antworten mit Zitat

ja das ist möglich. Ein gutes Muster dafür ist Vererbung (ggf. mit dem factory pattern). Du musst dafür alle deine Grundelemente (Klassen) von einem (abstrakten) Interface erben lassen. Dann entwirfst du ein Container (z.B. std::list) in dem du diese durch ihren Basisklassenanteil speicherst. Kleines Pseudo-Beispiel:

CPP:
// dein interface
class Grundelement
{
public:     
     Grundelement();
     virtual ~Grundelement(); // virtual wichtig!, ggf. = 0 wenn du keine andere abstrakte Methode hast
protected:
     // ggf. standard-Variablen die jedes Gr.el. hat
};

// mehrere spezielle Grundelemente
class Rahmen : public Grundelement {...};
class Rolle : public Grundelement {...};
// etc...

// dein Container, z.B. list
std::list<Grundelement*> mylist;

// dann könntest du durch eingabe, datei etc. (iwas was zur Laufzeit bestimmt) die neuen Objekte einfügen; z.B.
switch( eingabe )
{
     case ID_RAHMEN:
          mylist.push_back( new Rahmen() );
          break;

     // etc.
}
Du darfst hierbei aber nicht vergessen, alle Elemente mit delete am Ende wieder freizugeben!

Dies ist nur die Grundidee, es gibt noch zahlreiche Verbesserungen / Verschönerungen; z.B:
  • Einfügen der ID in Grundelement, für sicheres Casten (vllt. mit dynamic_cast), sodass du mit element->ID das Element auch ohne casts einordnen kannst
  • factory-Pattern: du lässt dir mit einer Methode o.ä. anhand einer ID automatisch das passende Objekt in die Liste einfügen
  • Verwenden von smart pointer in der Liste anstatt native pointern Arrow du musst die elemente nicht mehr mit delete freigeben (std::auto_ptr funktioniert hier nicht!)
  • ...
Das mit der Scriptsprache könntest du dann so implementieren dass du im Endeffekt in dieser switch oben landest und so ein Element zur Laufzeit einfügst.

btw: wenn du boost benutzt könntest du auch auf einen dieser Komponenten zurückgreifen, z.B. boost::any; aber das nur so nebenbei.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
boeserZwilling
Mini JLI'ler


Alter: 36
Anmeldedatum: 26.08.2007
Beiträge: 11

Medaillen: Keine

BeitragVerfasst am: 28.12.2007, 10:27    Titel: Antworten mit Zitat

Danke,

Feine Sache, ich hab das dank dem JLI Buch schon so gemach. (thing als Basisklasse und dann weitervererbt) Smile

Boost ist mir neu, neben einigen anderen Dingen.
Dann werd ich mal weiterwerkeln und eine Konsole einbauen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 30.12.2007, 17:01    Titel: Antworten mit Zitat

Mit boost:python kannst du super-easy Python Bindings für deine Klassen schreiben und die dann auch von Python und vice versa aufrufen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum