Seite 1 von 3
Kann man Stellen in einer Struktur mathematisch ansprechen?
Verfasst: 01.08.2007 12:00
von Zweihänder
Hi,
ich habe ein Problem. Und zwar habe ich eine Struktur mit insgesamt 8 Werten erstellt. Die einzelnen Werte möchte ich mathematisch ansprechen.
Die Struktur sieht so aus:
Structure Armeewerte
KS_Ebene.b
KS_Wald.b
KS_Huegel.b
KS_Sumpf.b
KS_Bollwerk.b
Defensivwert.b
Kontrollzone.b
Bewegung.b
EndStructure
Gibt es, wenn ich beispielsweise den 5. Wert der Struktur (KS_Bollwerk)ansprechen will (nicht mit dem Variablennahmen sondern mit dem Stellenwert 5), da eine Möglichkeit???
Ich kann ansonsten ein Array nicht mit der Struktur verbinden.
Mit Dank im voraus...
Michael
Verfasst: 01.08.2007 12:08
von STARGÅTE
da du ja alle Var in der Structur als
b hast
kannst du so an die Zahlen kommen :
MeinSprungWert wäre dann für KS_Ebene : 0 und KS_Sumpf: 3
schreiben ist das genauso:
Verfasst: 01.08.2007 12:23
von Zweihänder
Jetzt kommt ein weiteres Problem:
Die Struktur ist nochmals in einem Array eingelassen... Also o.a. Struktur mit
Global Dim Armee_Spieler.Armeewerte(8,Spieleranzahl)
Ich komm hier total durcheinander...
Verfasst: 01.08.2007 12:29
von jear
Vielleicht hilft das ja:
Code: Alles auswählen
Structure Armeewerte
KS_Ebene.b
KS_Wald.b
KS_Huegel.b
KS_Sumpf.b
KS_Bollwerk.b
Defensivwert.b
Kontrollzone.b
Bewegung.b
EndStructure
Global Dim Armeewerte.Armeewerte(100)
oKS_Ebene = OffsetOf(Armeewerte\KS_Ebene) : Debug oKS_Ebene
oKS_Sumpf = OffsetOf(Armeewerte\KS_Sumpf) : Debug oKS_Sumpf
oBewegung = OffsetOf(Armeewerte\Bewegung) : Debug oBewegung
; Ansprache über Feldnamen
For ix = 1 To 100
Armeewerte(ix)\KS_Ebene = ix / 3
Armeewerte(ix)\KS_Sumpf = ix / 2
Armeewerte(ix)\Bewegung = ix
Next
; Ansprache über Offsets
Debug PeekB(@Armeewerte(53) + oKS_Ebene)
Debug PeekB(@Armeewerte(100) + oKS_Sumpf)
Debug PeekB(@Armeewerte(15) + oBewegung)
; Ansprache schreibend
PokeB(@Armeewerte(15) + oBewegung, 44)
Debug PeekB(@Armeewerte(15) + oBewegung)
End
Verfasst: 01.08.2007 13:14
von Kaeru Gaman
Zweihänder hat geschrieben:Global Dim Armee_Spieler.Armeewerte(8,Spieleranzahl)
also, ein 2-dimensionales array für acht arbeen pro spieler?
mal ganz davon ab, was genau willst du denn machen, worum geht es dir...?
klar geht es, die elemente über formeln anzusprechen, aber je nachdem gibt es sinnvollere lösungen.
zum beispiel ne SturctureUnion
(so ungefähr müßte das aussehen, bin nicht sicher obs richtig ist, hab grad keine zeit, sonst brennt mirs essen an)
Code: Alles auswählen
Structure WerteArray
Wert.b[8]
EndStructure
Structure WerteName
KS_Ebene.b
KS_Wald.b
KS_Huegel.b
KS_Sumpf.b
KS_Bollwerk.b
Defensivwert.b
Kontrollzone.b
Bewegung.b
EndStructure
Structure Armeewerte
StructureUnion
w.WerteArray
n.WerteName
EndStructureUnion
EndStructure
PS:
damit wäre es dann möglich, mit elementnummer und strukturteil-nummer anzusprechen.
dazu muss man sich nicht unbedingt einen abpointern, dafür ist ne Union da....
Verfasst: 01.08.2007 13:51
von gekkonier
Kaeru Gaman hat geschrieben:dazu muss man sich nicht unbedingt einen abpointern, dafür ist ne Union da....
abpointern....
Weltklasse!
Danke für diesen Lacher!

Verfasst: 01.08.2007 13:57
von Zweihänder
Also, ein zweidimensionales Array mit 8 Einheitentypen und 4 Spielern (Dim Armee_Spieler.Armeewerte(8,4)).
Ich habe nebenher noch ein 2 dimensionales Array mit verschiedenen Untergrundtypen laufen, die einfach mittels einer Zahl in dem Array entahlten sind. Das stellt die Karte dar (Dim Karte)
1=Ebene, 2=Wald,3=Hügel,usw.
Eine auf der Karte befindliche Einheit soll die umliegenden Felder mit seinen Werten in der Struktur beeinflussen. KS-Ebene gibt die Kampfstärke auf der Ebene an usw.
Jetzt soll folgende Abfrage erfolgen: Um eine Einheit herum sollen alle Felder abgefragt werden. Handelt es sich beispielsweise bei dem Feld rechts von der Einbheit um eine Ebene, so soll der Wert KS_Ebene der jeweiligen Einheit auf die Kampfstärke des Feldes gerechnet werden.
Ich stelle mir die Abfrage so vor (auch wenn sie so nicht klappt):
If karte(i+1,j)=1 (1 steht für Ebene)
Kampfstaerke(i+1,j)=Kampfstaerke(i+1,j)+Armee_Spieler(Einheit(i,j),Spieler)\ *** und hier soll die Stelle in der Struktur gewählt werden, also auch die erste (KS_Ebene)
Endif
Zur Info: Ich habe parallel noch ein zweidimensionales Array für die Einheiten (Dim Einheit) und ein dreidimensionales Array für die Kampfstärke (Dim Kampfstaerke)
Verfasst: 01.08.2007 13:59
von rolaf
Kaeru Gaman hat geschrieben:damit wäre es dann möglich, mit elementnummer und strukturteil-nummer anzusprechen.
dazu muss man sich nicht unbedingt einen abpointern, dafür ist ne Union da....
Klingt interessant, sowas hätte ich auch schon brauchen können. Mal sehen ob ich das raffe mit dem sich_nicht_einen_abpointern.

So ganz geheuer ist mir das noch nicht. Bei mehrdimensionalen Arrays oder rekursiven Sachen krieg ich immer nen Wuschel in der Birne.
Verfasst: 01.08.2007 14:00
von Zweihänder
also die If-Abfrage möchte ich mir dann eigentlich sparen... Ich will nur die korrekten Werte aus der Struktur dem Kampfstärken_Array hinzu addieren.
Verfasst: 01.08.2007 14:11
von Kaeru Gaman
ja verstehe...
also so in der richtung
Kampfstärke + Verteidigung( Bodenart )
grundsätzlich ist deine idee da schon richtig, das mit nem offset (hier: bodenart)
zu lösen anstatt mit nem haufen Ifs oder Cases.
das müßte eigentlich mit der Union auch funktionieren, wenn ich die so halbwegs richtig hingeschmiert hab.
die frage ist allerdings, ob du wirklich für jede figur einzeln der wert mitschleppen mußt...
oder ist das eher ein Typen-Array, also,
notierst du da nur die kampfwerte für die möglichen einheiten jedes spielers,
und jeder spieler kann 8 einheitentypen haben, und die einheitentypen können bei jedem spieler unterschiedlich sein?
weil ich denk grad, ein extra-array würde da reichen:
Kampfstaerke + Verteidigung( Einheitentyp, Bodenart )
weil ja eigentlich egal ist, ob das jetzt speerkämpfer Nr.1, speerkämpfer Nr.4 oder speerkämpfer Nr.13 ist,
maßgeblich ist nur, dass es ein speerkämpfer ist, und dass er in ner ebene steht.