Arrays in Strukturen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Arrays in Strukturen

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Beitrag 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.
(Win 11 64-bit, PB 6.04 und 6.10)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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)]
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten