Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sacaldur

Community-Fossil

  • »Sacaldur« ist der Autor dieses Themas

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

11

18.06.2012, 15:26

Ah ok. Gut, dann würde ich mir als erstes die Frage stellen, ob die zweidimensionale Anordnung der Felder für die Logik in irgendeiner Form wichtig ist, oder ob sich alles nur über die Nachbarschaftsbeziehungen abspielt.

es ist wichtig zu wissen, welches Feld rechts/links/über/unter einem Feld ist und an welcher Position sich ein Feld befindet
die Speicherung in einem 2-dimensionalem Array ist ein möglicher Ansatz dafür
mit dem Vorschlag von Chromanoid ließen sich die Felder mit einem einfachen Array (oder einer anderen, vergleichbaren Struktur) speichern
(es muss nicht zwingend ein 2D-Array sein, sofern sich die genannten Voraussetzungen erfüllen lassen)

je nach verwendeter Struktur gibt es auch (unabhängig von der Logik, die dies verhinden muss) verschiedene mögliche, aber eigentlich falsche Zustände
bei einer einfachen Auflistung aller Felder, welche dann selbst ihre Position speichern kann es beispielsweise dazu kommen, dass 2 Felder die gleiche Koordinate belegen
allerdings bin ich mir nicht sicher, wie sinnvoll es ist, darauf Rücksicht zu nehmen


@Burningwave:
ich denke, ich hatte erst nicht richtig verstanden, dass nur der Index des anderen Felds und nicht das andere Feld selbst gespeichert wird


ich denke, dass ich statt der einen (mehr oder weniger unpräzisen) Frage am Anfang folgende Fragen stellen kann:
wo sollten die Koordinaten der Felder gespeichert werden? (und damit einhergehend, ob ein 2D-Array verwendet wird oder nicht)
sollte eine Liste an Feldern für jedes Feld gespeichert werden oder für jede mögliche Verbindung ein Wahrheitswert?
sollte dies innerhalb der Felder oder außerhalb gespeichert werden?
wie schon geschrieben: ich bin mir nicht sicher, ob ich zu Gunsten der Konsistenz oder zu Gunsten der einfacheren Implementierung entscheiden sollte (Performance dürfte in dem Zusammenhang keine größere Bedeutung haben, denke ich...)
da darauf aufbauender Code (wie die Ermittlung, mit welchen Feldern Feld X benachbart ist oder ob dies von den Feldern oder dem übergeordnetem Objekt durchgeführt wird) noch nicht implementiert ist, muss bei der Entscheidungsfindung darauf keine Rücksicht genommen werden

derzeit tendiere ich eher dazu, die Datenstruktur bereits so anzulegen, dass Inkonsistenzen und Redundanzen bestmöglich vermieden werden
dies würde beispielsweise gehen, indem die Felder in einem 2D-Array gespeichert werden (die Koordinate ist gleichzeitig der Index des Felds) und die Verbindungen außerhalb durch 2 2D-Arrays (für jede Stelle, an der eine Verbindung sein könnte, wird also "true" oder "false" gespeichert - 2 Arrays, da so einfacher von den Feldkoordinaten auf die Verbindungskoordinaten umgerechnet werden kann)
was würde dagegen sprechen (und für einen der anderen Vorschläge?)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

18.06.2012, 16:05

Jo, es hängt eben davon ab. Wenn du z.B. mehr Felder hast, als auf den Bildschirm passen, dann wäre eine 2D Anordnung evtl. sinnvoll, um effizient nur die sichtbaren Felder zeichnen zu können. Wenn immer alle Felder sichtbar sind, würde ich wohl alle Felder in ein normales 1D Array packen und die Verbindungen über Pointer modellieren...

RmbRT

Treue Seele

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

13

18.06.2012, 17:46

Wenn du schon 2D-Arrays benutzt, dann brauchst du doch kein zweites für die verbindung. Du kannst ja anhand der Indices (z.b. [x+1][y]) gucken ob das benachbarte Feld für eine Verbindung geeignet ist (s. mein Post).
MfG, RmbRT
"Dumm ist, wer dummes tut."

Sacaldur

Community-Fossil

  • »Sacaldur« ist der Autor dieses Themas

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

14

18.06.2012, 18:10

@RmbRT:
nein, das geht eben nicht, da benachbarte Felder miteinander verbunden sein können, aber nicht zwingend miteinander verbunden sind
wenn Felder automatisch mit benachbarten Feldern verbunden wären, dann wäre eine Speicherung, welche Felder miteinander verbunden sind tatsächlich unnötig, aber dann hätte ich dieses Thema auch nicht eröffnet
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

15

18.06.2012, 18:57

Das habe ich eben schon gedacht;) Es geht ja nicht darum welche Felder nebeneinander liegen, sondern welche auch wirklich verbunden sind und deswegen ist dein Ansatz über deinen Manager an sich quatsch;) Wie wäre es mit einer 2D Matrix welche bestimmt ob eine Verbindung da ist oder nicht. Als Index dienen dann die Knoten. Halt ein normaler Graph.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

16

18.06.2012, 22:19

Wozu eine Matrix, wenn die Verbindung direkt im Feld steht? Bzw. der 2D Array ist doch bereits eine Art Matrix...
Ich finde sowohl den 2D Array mit Feldern gut als auch einen 1D-Array. Erstellt man einen Editor für Level hat man es mit dem 2D Array sicher wesentlich leichter. Wahrscheinlich wirst du mit dem 2D Array und Verbindungsflags am besten fahren. Einzige Ausnahme wäre vielleicht, wenn du später das ganze in 3D realisieren willst...

Werbeanzeige