Anzeige:
Ergebnis 1 bis 9 von 9

Thema: vector klasse für spielfeld

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.07.2001
    Ort
    Böblingen
    Beiträge
    69

    vector klasse für spielfeld

    Hallo Leute,

    ich verwende die vector klasse für das Spielfeld meines Spiels.
    Es ist so definiert:

    vector < vector<int> > labyrinth_level(200, vector<int>(200));

    Damit kann ich also nur Integer speichern.
    Ich möchte aber gerne beliebig viele Objekte pro Feld ablegen können.
    Dazu müsste ich also einen Zeiger auf einen dynamischen array pro feld haben. Und jedes Feld dieses arrays muss seinerseits wieder auf eine Instanz zeigen.

    Ich bin noch neu in C++ und damit überfordert!
    Könnte mir hier jemand einen Tip geben wie man sowas realisiert?
    Geändert von Brujah (11-10-2006 um 10:15 Uhr)
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Also du meinst einen dreidimensionalen Vektor quasi? Da musst du eigentlich nur weiterfahren wie du angefangen hast.

    Falls es nicht all zu viele Objekte gibt insgesamt wärs aber eventuell effiziennter und einfacher einfach alle Objekte in einer Liste (seis ein Vektor oder eine Map oder so) zu speichern, mit den jeweiligen Koordinaten.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Ich denke mein Problem ist das ich die Syntax dieses vectors schon nicht verstehe. Ist das abgefahrenste was ich bisher gesehen habe (verglichen mit anderen Programmiersprachen die ich kenne).
    Die ganzen Pfeile in unterschiedliche Richtungen verwirren mich...

    Wenn ich jetzt erstmal 150 Level des oben definierten feldes haben möchte, wie definiere ich dieses in C++?
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Wenn du in einem Feld mehrere Sachen ablegen willst, ist es in erster Näherung schon mal eine gute Idee, eine Klasse für so ein Feld zu implementieren.

    Wenn du dann ein Spielfeld mit einer zweidimensionalen Anordnung solcher Felder hast, kannst du in jedem Feld unabhängig von der Anordnung arbeiten.

    Wenn die Sache mit den Containertemplates anfangs noch ein bischen ungewohnt ist, kann es helfen, sich mit typedef daraus eigene Typen zu definieren und diese dann zu verwenden, zB:
    Code:
    typedef vector<int> IntArray;
    typedef vector<IntArray> IntMatrix;
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    22.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Ich glaube ich bin zu blöd.
    Ich weiss nicht was ich mit den Typedef's machen soll.

    Vielleicht nehme ich doch lieber ein
    int labyrinth[200][200];

    Das verstehe ich wenigstens...

    Mein momentaner Sourcecode liegt hier:
    http://www.lostlabyrinth.com/new_lostlabyrinth.tar.gz

    Ist noch winzig, weil ich einfach mit ALLEM Probleme habe.
    Geändert von Brujah (11-10-2006 um 11:24 Uhr)
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Bei "vector<int> L" ist L eine Liste von Integern. z.B. [1,2,3,4,5,6]
    Bei "vector<vector<int> > L" ist L eine Liste von Listen von Integern [ [1,2,3,4,5,6] , [7,8,9] , [1,5,4] , [1,6] ]
    Wie du siehst, muss nicht jede Liste gleich viele Elemente enthalten, da der "äußere" Vector nur beliebige Listen von Integern zusammenfasst.

    Wenn du nun (im obigen Beispiel) L[2] schreibst, bekommst du [1,5,4] zurück, das ist ja das dritte Element. Da dies auch eine Liste ist, kannst du ebenfalls indizieren, z.B. käme bei L[2][1] eine 5 heraus.

    Nichts anderes machst du bei "int L[200][200]". L ist eine Liste von 200 Listen von 200 Integern. Der einzige Unterschied ist, dass jede Liste wirklich genau 200 Elemente enthält. L[60][20] sucht sich nun die 61. Liste und davon das 21. Element raus.

    vector<vector<vector<int> > > is nun eine Liste von Listen von Listen. etc pp.

    Für deine Anwendung macht ein normales Array aber wahrscheinlich mehr Sinn, da du ja wirklich jedes Feld beschrieben willst. Vectoren nutzt man, wenn man eine Liste von irgendwas haben will, von dem man nicht weiss oder wissen will, wieviele Elemente da nun reinkommen.
    Geändert von Joghurt (11-10-2006 um 11:35 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    22.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Okay, werde das Spielfeld wieder zu einem Array machen. Und dann den Gegenständen und Monstern x,y Koordinaten und Level als Attribute geben.
    Sollte das Problem genauso erschlagen.
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  8. #8
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Mir stieß die Sache mit den Pfeilen auf.

    < und > sind in diesem Fall keine Pfeile, wie sie zum Beispiel beim Zugriff auf Member einer Instanz über einen Zeiger verwendet werden (->), sondern einfach nur ein fester Bestandteil der Deklaration einer Instanz einer Template-Klasse.

    Bevor du dich an ein Spiel wagst, solltest du dich allgemein mehr mit solch grundlegenden C++ Eigenheiten vertraut machen.
    Geändert von 7.e.Q (16-10-2006 um 14:52 Uhr) Grund: Schlechtschreibfehler
    Anwendungsentwickler; ehem. Siemens, jetzt Nokia Siemens Networks GmbH. & CO KG
    C/C++;C#;VB;ASP.NET;Ajax;MSSQL
    Webentwicklung/Design; privat
    PHP;MySQL;HTML;XML;Typo3;Photoshop;ASP.NET;Ajax;MS SQL

  9. #9
    Registrierter Benutzer
    Registriert seit
    22.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Wir kommen ganz gut voran. Haben das Spielfeld jetzt zu einem dreidimenionalen Array gemacht. Templates werden wir einfach nicht benutzen.
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •