Seite 1 von 1

Arrays in Strukturen

Verfasst: 28.08.2007 11:32
von Sebastian
Hallo!

Ich habe gelesen, dass Strukturen nur statische Arrays akzeptieren. Kann man diese auch mehrdimensional verwenden?

Falls nicht -> wie arbeite ich dann mit mehreren Dimensionen?

Verfasst: 28.08.2007 11:54
von mk-soft
No Problem,

Code: Alles auswählen

Structure udtPos
  player.l
  points.l
EndStructure

Dim pos.udtPos(9,9)

For x = 0 To 9
  For y = 0 To 9
    i + 1
    pos(x,y)\player = i
  Next y
Next x

For x = 0 To 9
  For y = 0 To 9
    i + 1
    Debug Str(x) + ":" + Str(y) + " - Player: " + Str(pos(x,y)\player)
  Next y
Next x

FF :wink:

Verfasst: 28.08.2007 12:09
von #NULL
du könntest dimensionen > 1 wrappen, in zusätzlichen strukturen:

Code: Alles auswählen

#xmax=3
#ymax=7

Structure S_yDim
  y.l[#ymax+1]
EndStructure

Structure S_myStuff
  foo0.b
  foo1.b
  x.S_yDim[#xmax+1]
  foo2.b
  foo3.b
EndStructure



var.S_myStuff

For i=0 To #xmax
  For k=0 To #ymax
    var\x[i]\y[k] = Random(9)
    
    temp.s + " " + Str( var\x[i]\y[k] )
  Next
  Debug temp
  temp=""
Next

Verfasst: 28.08.2007 12:16
von Sebastian
@mk-soft:
Wenn ich Deinen Vorschlag ausführe, dann habe ich aber doch für jedes Element die Playerposition (das ist okay), jedoch auch die Playerpunkten. Sagen wir, ich will die x,y Koordinaten für jedes Element, die Punkte brauche ich aber doch nur ein einziges mal und nich 81 mal?

Verfasst: 28.08.2007 12:21
von #NULL
mit einem macro hast du sogar zugriff wie bei gewöhnlichen arrays:

Code: Alles auswählen

#xmax=3
#ymax=7

Structure S_yDim
  y.l[#ymax+1]
EndStructure

Structure S_myStuff
  foo0.b
  foo1.b
  x.S_yDim[#xmax+1]
  foo2.b
  foo3.b
EndStructure


Macro array(_i_, _k_)
  x[_i_]\y[_k_]
EndMacro


var.S_myStuff

For i=0 To #xmax
  For k=0 To #ymax
    var\array(i,k) = Random(9)
    
    temp.s + " " + Str( var\array(i,k) )
  Next
  Debug temp
  temp=""
Next

Verfasst: 28.08.2007 12:38
von mk-soft
@Sebastian,

ich weis noch nicht wo rauf du raus willst.

Die Structure ist ja nur ein beispiel für eine zwei Dimensionale Rasterkarte welcher Player sich auf der Position XY befindet.

Mit einer zweiten Structure kann man ja eine Playerliste erstelle an welcher Position sich der Player aufhält und diese mit der Rasterkarte abgleichen.

Verfasst: 28.08.2007 12:40
von Sebastian
Moment: Das ist ein Anfänger-Forum. Das verstehe ich nicht.
Ich will mehrere Layer darstellen, ich weiß aber vorher nicht, wieviele Layer vorhanden sein werden. Ich dachte, dass ich deshalb eine Linked-List verwende. Jeder Layer soll ein paar Variablen haben:
IstderLayerAktiv = 0 oder 1 (Soll der Layer dargestellt werden)
IstderLayertransparent = 0 oder 1 (Sollen die Sprites mit Transparenz gezeichnet werden?)
und dann natürlich die TileId
layer(x,y) = TileID
Ich dachte, dass ich das alles mit Structure --- EndStructure definieren kann.
Die Dimensionsgröße von layer(x,y) muss sich jedoch auch ändern können, das Level könnte ja im Nachhinein doch größer sein sollen, als erst gedacht.

Verfasst: 28.08.2007 12:41
von Kaeru Gaman
warum immer so umständlich?

Code: Alles auswählen

Macro BiCoord5( BCRow, BCLine )
 ( 5 * BCLine + BCRow )
EndMacro

Structure Puit
  Narf.c[25]
EndStructure

Define Fjord.Puit

Fjord\Narf[BiCoord5(2,3)] = 42

Debug Fjord\Narf[BiCoord5(2,3)]