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

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

11

16.04.2013, 20:22

ist es möglich, die struktur nach nach der Position zu durchsuchen, ohne einmal alle Objekte der Map durchzugehen und zu gucken, ob eines davon neben dem gegner ist?
Das haengt von der Struktur ab.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

16.04.2013, 20:27

Das kommt auf deine Implementierung an. Normalerweise kann man in einer Tilemap über die Position eines Tiles auf das Tile selbst zugreifen. Bei einem zweidimensionalem Array sähe das so aus:
tile_an_der_stelle_x_y = tiles[x][y];
Bei einem eindimensionalen Array kann man sich den Index berechnen und bei anderen Darstellungen gibt es sicherlich auch Möglichkeiten. Wenn nicht, dann hat man vermutlich irgendwo was unsinniges gemacht;) Wenn ich jetzt an der Position x=5 und y = 5 bin und meinen linken Nachbarn möchte, dann gucke ich mir das Tile an Position x=4 und y=5 an. Möchte ich jetzt aber keinen Nachbarn haben, sondern das Tile an der Position mit x=7 und y=0, dann berechne ich mir über die Koordinaten mein gewünschtes Tile, bzw hole es mir aus meiner Datenstruktur. Das geht bei einem Array in konstanter Laufzeit. Je nach Datenstruktur kann das aber natürlich auch anders aussehen. Genau so kannst du berechnen, auf welchem Tile sich dein Gegner aktuell befindet, wenn das nicht sowieso irgendwo gespeichert werden sollte.
Ansonsten solltest du dir vielleicht noch ein wenig zu Tiloemaps durchlesen. Dazu gibts ja nun wirklich genug Informationen bei Google.
„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.“

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

13

16.04.2013, 20:32

ok ich habe eine eindeminsinales Array.
Das mit dem berechnen hört sich da interessant an.

Ich denke mit der Angabe, wieviele x Koordinaten es gibt, lässt sich dann errechnen, welcher nun an der benötigten stelle ist.
Ich glaub ich schreib mir mal ein kleines Programm um das zu testen ;)

EDIT:

habe folgende Formel gefunden:

Ausgangspunkt liegt in diesem falle bei 0/0
YPosition*AnzahlXKoordinaten+XPosition

nun jenachdem welches Feld man haben möchte, muss man die Formel erweitern.
Wenn ich nun z.B. das Feld darüber haben möchte, lautet die Formel:

(YPosition*AnzahlXKoordinaten+XPosition) - NumX
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »xXSlayerXx« (16.04.2013, 20:56)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

14

16.04.2013, 20:57

Mit einem eindimensionalen Array geht es auch. Guck mal hier:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Stell dir mal vor das sind die Werte in einem Array. Die Werte werden Zeile für Zeile eingetragen, sodass dein Array die Zahlen von 1 bis 15 in geordneter Reihenfolge beinhaltet. Die 1 ist also an Position 0, die 2 an der 1 und so weiter (zugegebenermaßen hätte ich hier die Zahlen von 0 bis 15 nehmen können. Dann wäre es noch etwas ersichtlicher gewesen). Jetzt versuchst du einen Zusammenhang zwischen x und y zu finden. Du guckst dir einfach eine Zahl an.
Beispiel:
Zahl: 5
Index im Array: 4
X: 0
Y: 1

Jetzt machst du das selbe mit ein paar anderen Zahlen. Grübel mal ein wenig und dann kommst du sicher schnell auf den Zusammenhang.

edit: Deine Formel stimmt. Wenn du das Feld darüber haben willst geht das allerdings noch einfacher.
Beispiel:
Feld: x= 5, y=5
Welche Koordinaten hat dann das Feld darüber? Oder das Feld darunter? Und diese Werte für X und Y kannst du dann ja wieder in deine Formel einsetzen. Wenn du mal drüber nachdenkst, was ein Array eigentlich ist und wie die Werte im Speicher angelegt sind, und wenn du dann überlegst was wohl bei einem 2 dimensionalen Array los ist. Kannst du ja auch einfach mal testen. Lass dir die Speicheradressen von einem Array und einem zweidimensionalen Array ausgeben. Wenn du jetzt mit deiner Sache vergleichst gibts vielleicht einen kleinen Aha Effekt;)
„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.“

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

15

16.04.2013, 21:08

Ok werde mir heute abend nochmal das Kapitel mit den Arrays durchlesen, um das alles nochmal aufzufrischen.
Mal sehen, ob ich diesen Aha Effekt bekomme ;)

danke für deine Hilfe
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Werbeanzeige