Mal wieder ein Problem mit types

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

timo_81

Betreff: Mal wieder ein Problem mit types

BeitragSa, Jan 28, 2006 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi , ich habe versucht meine Objekte als Types zusammenzufassen
aber irgendwas muss ich wohl flaschgemacht habe hier mal die wichtigsten Fragmente aus meinem Code dazu:

Der Zufallsgenerator ist natürlich am Anfang deklariert worden.

Wenn ich den ganzen Code reinstellen soll bitte sagen

[syntax="bb"]

...

;--------------------------
;MONDE
;--------------------------

Type mond
Field menge ;Abbaumenge ( Resourcen )
Field groesse ; Größe beeinflusst resourcen
Field X
Field Y
Field Z
End Type

;-------------------------
;Planeten
;-------------------------

Type planet
Field kolonisiert ;Wurde er schon kolonialisiert , na dann kannst losgehen Smile
Field groesse ;Größe kann variieren , und somit auch der Platz für Gebäude
Field bewohnbar ;Ist er überhaupt bewohnbar?
Field textur ;eine Nummer die dann eine textur zuweist
Field X
Field Y
Field Z
End Type



;-----------------------------------------------------------------
;Festelegen der Daten für die Planeten und Monde
;-----------------------------------------------------------------

Global anzahl_planeten=Rand(3,5)
Global anzahl_monde=Rand(2-5);

Dim objekt.planet(anzahl_planeten) ; Legt 3-5 Planeten an
Dim objekt.mond(anzahl_monde) ; Legt 2-5 Monde an
planet_kolonisiert=0 ; Anfangs nicht kolonisiert


;-------------------------------------------------------------------
;Zufallswerte für die EINZELNEN Planeten
;-------------------------------------------------------------------
For i=1 To anzahl_planeten



groesse_planet=Rand(0.4,2.0);Zufalls-faktor für ScaleEntity
planet_bewohnbar=Rand(0,1) ;1: bewohnbar , 2: unbewohnbar
planet_textur=Rand(1,5) ; fünf verschieden Texturen für Planeten sind möglich

Planet_X=rand(-2000,2000) ;Zufallskoordinaten der Planeten
Planet_Y=rand(-200,200)
Planet_Z=rand(-2000,2000)


;Erzeugung und Eintragen der Werte

objekt.planet(i) = New planet ;Neuen Planeten erzeugen
objekt\planet(i)\kolonisiert=planet_kolonisiert
objekt\planet(i)\groesse=groesse_planet ;Größe kann variieren , und somit auch der Platz für Gebäude
objekt\planet(i)\bewohnbar=planet_bewohnbar ;Ist er überhaupt bewohnbar : 1-> Ja , 0-> Nein?
objekt\planet(i)\textur=planet_textur ;eine Nummer die dann eine textur zuweist

objekt\planet(i)\X=Planet_X ;Planeten werden zufällig plaziert
objekt\planet(i)\Y=Planet_Y ;""
objekt\planet(i)\Z=Planet_Z;""

Next

;-----------------------------------------------------------------------------
;Zufallswerte für die EINZELNEN Monde
;-----------------------------------------------------------------------------
For k=1 To anzahl_monde



groesse_mond=Rand(0.4,2.0) ;Zufalls-faktor für ScaleEntity
bonus_mond=Rand(1000,12000) ;Wenn der Mond eine bestimmte Größe hat kommt der Wert zur Menge hinzu
Mond_X=rand(-2000,2000) ;Zufallskoordinaten der Monde
Mond_Y=rand(-200,200)
Mond_Z=rand(-2000,2000)
menge_mond=rand(2000,25000) ; Resourcenmenge

;Erzeugung und Eintragung der Werte
objekt.mond(k) = New Mond
objekt\mond(k)\groesse=groesse_mond ;Faktor für ScaleEntity
objekt\mond(k)\menge=menge_mond ;Kommt später noch ein ein Bonus dazu wenn der Mond
;sehr groß ist


;Test ausgeben der Werte

Color 255,255,255
For objekt.planet = Each planet
Print "PLANETEN_DATEN:"

Print "kolonisiert: " + objekt.planet\kolonisiert
Print "ScaleFaktor: " + objekt.planet\groesse
Print "bewohnbar: " + objekt.planet\bewohnbar
Print "texturNr.: " + objekt.planet\textur
Print "X: " + objekt.planet\X
Print "Y: " + objekt.planet\Y
Print "Z: " + objekt.planet\Z


Print "Monddaten
Print "ScaleFaktor: " + objekt.mond\groesse
If objekt.mond\groesse <= 1.0 Then
Print "Bonus : " + objekt.mond\bonus_mond
Else
Print "Kein Bonus. Mond zu klein."
End if
Print "Resourcen :" + objekt.mond\menge
Print "X: " + objekt.mond\X
Print "Y: " + objekt.mond\Y
Print "Z: " + objekt.mond\Z


Next


...


[/syntax]

gruß
timo
 

Knartz

BeitragSa, Jan 28, 2006 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
*edit*

autsch, da war ich in c++ und nich in bb
  • Zuletzt bearbeitet von Knartz am Sa, Jan 28, 2006 14:29, insgesamt einmal bearbeitet
 

timo_81

BeitragSa, Jan 28, 2006 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hi danke ,
aber der fehler kommt ab hier:

objekt.planet(i) = New planet ;Neuen Planeten erzeugen

error: expecting variable assignment
 

Knartz

BeitragSa, Jan 28, 2006 1:03
Antworten mit Zitat
Benutzer-Profile anzeigen
*edit*
  • Zuletzt bearbeitet von Knartz am Sa, Jan 28, 2006 14:28, insgesamt einmal bearbeitet

preachie

BeitragSa, Jan 28, 2006 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn schon, müsste es object(i).planet heißen.

Du möchtest ja ein Feld mit mehreren objects haben, aber der Type ist ja kein Feld.

Gruß
Preachie
 

timo_81

BeitragSa, Jan 28, 2006 1:21
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
also nur objekt.planet??

objekt(i).planet geht nich
objekt.planet(i) auch net

greetz
timo

preachie

BeitragSa, Jan 28, 2006 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, hab aktuell keine Möglichkeit selbst zu testen, doch laut Tutorial auf Blitzbase sollte das mit dem Feld funktionieren.

Hier der Beispiel-Code aus dem Tutorial:

Code: [AUSKLAPPEN]
Types lassen sich mit DIM-Feldern kombinieren. Dadurch bleibt jedes Objekt direkt ansprechbar. Dazu muss man ein DIM-Feld so definieren:

DIM {feldname}.{typename} (index)

Mit NEW werden neue Objekte erstellt:

{feldname} (index)=NEW {typename}

Eigentlich ändert sich danach nur wenig, nur der Index wird ständig angegeben. Hier ein größeres Beispiel:

TYPE tile
   FIELD image
   FIELD extra
END TYPE

DIM tile.tile(99,99)
tile(0,0)=NEW tile
tile(0,0)\image=0
tile(0,0)\extra=0


Vielleicht hilft es ja den Fehler zu finden,

Gruß
Preachie

preachie

BeitragSa, Jan 28, 2006 1:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Öhm, was mir gerade noch aufgefallen ist,

Du deklarierst objekt einmal als planet und einmal als mond

Code: [AUSKLAPPEN]
Dim objekt.planet(anzahl_planeten) ; Legt 3-5 Planeten an
Dim objekt.mond(anzahl_monde) ; Legt 2-5 Monde an


Ich bin selbst noch am Lernen von BB, aber ich denke mal, dass das nicht geht....

Dann eher:

Code: [AUSKLAPPEN]
Dim planet_objekt.planet(anzahl_planeten) ; Legt 3-5 Planeten an
Dim mond_objekt.mond(anzahl_monde) ; Legt 2-5 Monde an


Und die entsprechenden weiteren Zeilen anpassen.
Auch wenn Du die Type-Felder ansprichst, nicht planet_object.planet(i), sondern planet_objekt(i).planet verwenden!

Gruß
Preachie
 

timo_81

BeitragSa, Jan 28, 2006 1:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für eure regen Beiträge.
Das mit dem Feld ist gefixt nun sagt er End Function without Function.

Seid ich es mit Types und Funktionen eine wenig strukturiert habe kommt müll:

Hier mal die gesamte Funktion...da ich langsam an mir zweifel:

[code]

Function Create_Planets_Ships()

;-------------------------------------------------------------------
;Zufallswerte für die EINZELNEN Planeten
;-------------------------------------------------------------------
For i=1 To anzahl_planeten



groesse_planet#=Rand(0.4,2.0);Zufalls-faktor für ScaleEntity
planet_bewohnbar=Rand(0,1) ;1: bewohnbar , 2: unbewohnbar
planet_textur=Rand(1,5) ; fünf verschieden Texturen für Planeten sind möglich

Planet_X=rand(-2000,2000) ;Zufallskoordinaten der Planeten
Planet_Y=rand(-200,200)
Planet_Z=rand(-2000,2000)


;Erzeugung und Eintragen der Werte

objekt.planet = New planet ;Neuen Planeten erzeugen
objekt(i)\planet\kolonisiert=planet_kolonisiert
objekt(i)\planet\groesse#=groesse_planet# ;Größe kann variieren , und somit auch der Platz für Gebäude
objekt(i)\planet\bewohnbar=planet_bewohnbar ;Ist er überhaupt bewohnbar : 1-> Ja , 0-> Nein?
objekt(i)\planet\textur=planet_textur ;eine Nummer die dann eine textur zuweist

objekt(i)\planet\X=Planet_X ;Planeten werden zufällig plaziert
objekt(i)\planet\Y=Planet_Y ;""
objekt(i)\planet\Z=Planet_Z;""

Next

;-----------------------------------------------------------------------------
;Zufallswerte für die EINZELNEN Monde
;-----------------------------------------------------------------------------

For k=1 To anzahl_monde



groesse_mond#=Rand(0.4,2.0) ;Zufalls-faktor für ScaleEntity
bonus_mond=Rand(1000,12000) ;Wenn der Mond eine bestimmte Größe hat kommt der Wert zur Menge hinzu
Mond_X=rand(-2000,2000) ;Zufallskoordinaten der Monde
Mond_Y=rand(-200,200)
Mond_Z=rand(-2000,2000)
menge_mond=rand(2000,25000) ; Resourcenmenge

;Erzeugung und Eintragung der Werte
objekt.mond = New Mond
objekt(k)\mond\groesse#=groesse_mond# ;Faktor für ScaleEntity
objekt(k)\mond\menge=menge_mond ;Kommt später noch ein ein Bonus dazu wenn der Mond
;sehr groß ist


;Test ausgeben der Werte

Color 255,255,255

For objekt.planet = Each planet

Print "PLANETEN_DATEN:"

Print "kolonisiert: " + objekt.planet\kolonisiert
Print "ScaleFaktor: " + objekt.planet\groesse#
Print "bewohnbar: " + objekt.planet\bewohnbar
Print "texturNr.: " + objekt.planet\textur
Print "X: " + objekt.planet\X
Print "Y: " + objekt.planet\Y
Print "Z: " + objekt.planet\Z


Print "Monddaten"
Print "ScaleFaktor: " + objekt.mond\groesse#

If objekt.mond\groesse# > 1.0 Then
Print "Bonus : " + objekt.mond\bonus_mond
ElseIf objekt.mond\groesse# <= 1.0 Then
Print "Bonus : -"

End If


Print "Resourcen :" + objekt.mond\menge
Print "X: " + objekt.mond\X
Print "Y: " + objekt.mond\Y
Print "Z: " + objekt.mond\Z


Next

End Function Create_Planets_Ships

preachie

BeitragSa, Jan 28, 2006 1:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
objekt.planet = New planet ;Neuen Planeten erzeugen


Hier fehlt wieder das (i) hinter objekt.

Wenn Du auf das objekt zugreifst, darfst Du nicht den Typen mit angeben... also nicht

Code: [AUSKLAPPEN]
objekt(i)\planet\kolonisiert=planet_kolonisiert

sondern
Code: [AUSKLAPPEN]
objekt(i)\kolonisiert=planet_kolonisiert


Die Ursache für die Meldung EndFunction without Function konnte ich jetzt auf die Schnell nicht in Deinem Code-Ausschnitt sehen... liegt möglicherweise auch noch in einem Bereich, den Du nicht mit gepostet hast.

Außerdem ist die Variable objekt immer noch sowohl vom Typ planet, als auch vom Typ mond... wie gesagt, ich weiß es nicht genau, ob das überhaupt geht... ich bezweifel es eher Wink

Gruß
Preachie
 

Knartz

Betreff: Upps !

BeitragSa, Jan 28, 2006 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
SORRY ICH HAB SCHEISSE GEBAUT !

Meine Hirnwindungen haben sich etwas zu stark verwunden Smile
Ich hab den Code auf C++ umgeschrieben ... Embarassed

So hier jetzt auf BB...

und nochmals sorry

*hab meine falschen posts geedited*

wow, der richtige quellcode ist ja jetzt richtig kurz Smile

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::

;-----------------------------------------------------------------
;Planeten
;-----------------------------------------------------------------

Type planet
Field kolonisiert ;Wurde er schon kolonialisiert , na dann kannst losgehen Smile
Field groesse# ;Größe kann variieren , und somit auch der Platz für Gebäude
Field bewohnbar ;Ist er überhaupt bewohnbar?
Field textur ;eine Nummer die dann eine textur zuweist
Field X,Y,Z
End Type

;-----------------------------------------------------------------
;MONDE
;-----------------------------------------------------------------

Type mond
Field res_menge ;Abbaumenge ( Resourcen )
Field groesse# ; Größe beeinflusst resourcen
Field textur
Field X,Y,Z
End Type

;-----------------------------------------------------------------
;Zusammenfassung von:
;Festelegen der Daten für die Planeten und Monde
;Zufallswerte für die EINZELNEN Planeten
;Zufallswerte für die EINZELNEN Monde
;-----------------------------------------------------------------

Global anzahl_planeten = Rand(3,5)
Global anzahl_monde = Rand(2,5)

;in diesem abschnitt werden die planeten gemacht ... alles wird direkt reingeschrieben
;man beachte die for-next schleife, damit wird eine liste gemacht, in die die ganzen planeten
;reinkommen - vorher waren es mehrere listen
For temp_counter = 1 To anzahl_planeten
planets.planet = New planet
planets\groesse# = Rand(0.4,2.0)
planets\bewohnbar = Rand(0,1)
planets\textur = Rand(1,5)
planets\x = Rand(-2000,2000)
planets\y = Rand(-200,200)
planets\z = Rand(-2000,2000)
Next

;das selbe wie bei den planeten nur halt mir monden die in eine andere liste müssen
For temp_counter = 1 To anzahl_monde
monde.mond = New mond
monde\groesse# = Rand(0.4,2.0)
monde\res_menge = Rand(2000,25000)
monde\textur = Rand(6,10) ;die sollen ja auch gut aussehen Smile
monde\x = Rand(-2000,2000)
monde\y = Rand(-200,200)
monde\z = Rand(-2000,2000)
Next

;-----------------------------------------------------------------
;ausgeben der testwerte
;-----------------------------------------------------------------

Color 255,255,255
For planets.planet = Each planet
Print "PLANETEN_DATEN:"
Print "kolonisiert: " + planets\kolonisiert
Print "ScaleFaktor: " + planets\groesse
Print "bewohnbar: " + planets\bewohnbar
Print "texturNr.: " + planets\textur
Print "X: " + planets\X
Print "Y: " + planets\Y
Print "Z: " + planets\Z
Next

For monde.mond = Each mond
Print "Monddaten
Print "ScaleFaktor: " + monde\groesse
If monde\groesse <= 1.0 Then
Print "Bonus von " + (monde\res_menge * 0.5) + "Ressourcen"
Else
Print "Kein Bonus. Mond zu klein."
End If
Print "Resourcen :" + monde\res_menge
Print "X: " + monde\X
Print "Y: " + monde\Y
Print "Z: " + monde\Z
Next
 

Knartz

BeitragSo, Jan 29, 2006 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
dim und index ist hier etwas stussig weil die man die types ja in einer liste speichert, da wäre (doppelt*doppelt)³ gemoppelt ...

monde.xyz ist ja die liste mit den xyzs (gilt auch für planeten.xyz)
packt man da noch ein index ran wird für jeden planeten eine eigene liste mit der liste die nur den planeten hat gespeichert.

das ist das selbe wie c:\games\tetris\tetris\tetris\...

got milk ?
 

timo_81

BeitragMo, Jan 30, 2006 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
es geht danke.

no milh but vodka Smile

cheers timo

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group