For Each macht Probleme?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Mr Hopp

BeitragSo, Okt 15, 2006 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
achso ok...aber den Type "head" gibt's immer noch nicht^^ Meinst du damit vll TWagonList???
 

Dreamora

BeitragSo, Okt 15, 2006 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir am besten im Source an von welchem Typ das field head des Zuges ist.

du scheinst da glaub das eine oder andere durcheinander zu bringen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragSo, Okt 15, 2006 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja... mag sein, dass ich etwas falsch verstehe, aber so wie ich das verstehe, müsste "zug.head" vorraussetzen, dass es den Type "head" gibt Laughing
 

Dreamora

BeitragSo, Okt 15, 2006 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
args ...

zug\head

sorry, bin von BM und anderen sprachen gewohnt, das man DAFÜR den Punkt nimmt und nicht zur deklaration.
Mein Fehler Sad
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragMo, Okt 16, 2006 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Das erklärt einiges Very Happy Ich hab den Code dann mal "bereinigt" und ein bisschen rumgetestet. Das Ergebnis ist noch ein bischen HMMM^^ ich habe als test statt "DrawWagon" ein paar Testausgaben angebracht. So lasse ich mir den Handel ausgeben und einen Prüfwert, den ich dem Wagon zugewiesen habe. Da liegt das Problem: der Prüfwert "5" geht irgendwie unter... (dieser, der noch VOR der SChleife erstellt wird)

Hier der Code:
Code: [AUSKLAPPEN]
Global i

zug.TZug = New TZug
WList.TWagonList = New TWagonList
WList\value = New TWagon ; das ist also unsere Lok

zug\head = WList

Zug\head\value\typ=5; !!!!!!!! Hier der Prüfwert !!!!

; 3 weitere Wagen hinzufügen
For i = 1 To 3
AddToWagonList(WList,New TWagon)
Next
; Der Zug besteht nun also aus der Lok und 3 Wagen

drawtrain(zug)
WaitKey

End


Type TVerkehr
Field Zug.TZug
End Type

Type TZug
Field head.TWagonList
Field spd#
Field spurwechsel
Field spw_x
Field spw_y
End Type

Type TWagon
Field x
Field y
Field gr#
Field typ
End Type

Type TWagonList
Field Nextt.TWagonList
Field value.TWagon
End Type

Function AddToWagonList(list.TWagonList, wagon.TWagon)
temp.TWagonList = list
While Handle(temp\Nextt) > 0
temp = temp\Nextt
Wend
t.TWagonList = New TWagonList
t\value = wagon
temp\Nextt = t
temp\value\typ=i;   !!!!!!!!!!!!!!!!!!!!!!!! Und HIER der Prüfwert !!!!!!!
End Function

Function RemoveFromWagonList(list.TWagonList, wagon.TWagon)
temp.TWagonList = list\Nextt
tprev.TWagonList = list
While Handle(temp) > 0
If temp\value = wagon
tprev\Nextt = temp\Nextt
Delete temp
Return
EndIf 
tprev = temp
temp = temp\Nextt
Wend
End Function


Function DrawTrain(zug.TZug)
temp.TWagonList = zug\head
; geht alle Wagen in der WagenListe des Zuges durch und zeichnet sie
While Handle(temp) > 0
Print "Handle: "+Handle(temp\value)
Print "Prüfwert: "+temp\value\typ
Print
temp = temp\Nextt
Wend
End Function


Könnte mir bitte mal jemand sagen, ob und wo da ein Fehler ist? Smile
 

Dreamora

BeitragMo, Okt 16, 2006 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt es nen Grund warum du zum Handle konvertierst zum durchgehen? da kannst du auch direkt <> 0 testen ohne die Konvertierung. Die wird nur gebraucht wenn du den Type irgendwo drin "speichern" willst (bank zb). Ansonsten ist es pure "Zeitverschwendung" diese Konvertierung durchzuführen.

Was das Problem betrifft, so sehe ich das im moment im source eigentlich nicht ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

5k41

BeitragMo, Okt 16, 2006 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
So, da ich wie ich denke relativ viel anders mache habe ich ein beispiel geschrieben, so wie ich es mache:
Code: [AUSKLAPPEN]

Graphics 800,600,32,2
SetBuffer BackBuffer()

Type Tzug
   Field firstt.Twagon
   Field art$
End Type

Type Twagon
   Field zug.Tzug
   Field nxt.Twagon
   Field lst.Twagon
   Field art$
End Type

y     = 14
xdiff = 0

zug.Tzug=AddZug("ICE")
AddWagon(zug.Tzug,"Zugmaschiene")
AddWagon(zug.Tzug,"Erste Klasse")
AddWagon(zug.Tzug,"Speise Wagen")
AddWagon(zug.Tzug,"Zweite Klasse")

zug.Tzug=AddZug("RE")
AddWagon(zug.Tzug,"Billige Zugmaschiene")
AddWagon(zug.Tzug,"Zweite Klasse 1")
AddWagon(zug.Tzug,"Zweite Klasse 2")
AddWagon(zug.Tzug,"Zweite Klasse 3")

While Not KeyDown(1)

   xdiff = 0
   
   Text 0,0,"Drücke Leertaste um den Letzen Wagon Abzukoppeln / Enter um den Letzten Zug zu löschen"

   For zug.Tzug = Each Tzug
      DrawZug(zug.Tzug,xdiff,y)
      xdiff = xdiff + 200
   Next

   If KeyDown(57) And Last Twagon <> Null Then RemoveWagon(Last Twagon):Delay 250
   If KeyDown(28) And Last Tzug   <> Null Then RemoveZug  (Last Tzug)  :Delay 250

   Flip
   Cls

Wend



Function AddZug.Tzug(art$)
   zug.Tzug = New Tzug
   zug\art$ = art$
   Return (zug.Tzug)
End Function

Function AddWagon.Twagon(zug.Tzug,art$)
   wagon.Twagon   = New Twagon
   wagon\zug.Tzug = zug.Tzug
   wagon\art$     = art$
   If zug\firstt.Twagon = Null Then
      zug\firstt.Twagon=wagon.Twagon
   Else
      temp.Twagon=zug\firstt.Twagon
      If temp\nxt.Twagon <> Null Then
         Repeat
            temp.Twagon=temp\nxt.Twagon
         Until(temp\nxt.Twagon=Null)
      EndIf
      temp\nxt.Twagon  = wagon.Twagon
      wagon\lst.Twagon = temp.Twagon
   EndIf
End Function

Function RemoveWagon(wagon.Twagon)
   If wagon\nxt.Twagon <> Null Then wagon\nxt\lst.Twagon = wagon\lst.Twagon
   If wagon\lst.Twagon <> Null Then
      wagon\lst\nxt.Twagon = wagon\nxt.Twagon
   Else
      zug.Tzug          = wagon\zug.Tzug
      zug\firstt.Twagon = wagon\nxt.Twagon
   EndIf
   Delete wagon.Twagon
End Function

Function RemoveZug(zug.Tzug)
   wagon.Twagon = zug\firstt.Twagon
   If wagon.Twagon <> Null Then
      Repeat
         oldnxt.Twagon = wagon\nxt.Twagon
         RemoveWagon(wagon.Twagon)
         wagon.Twagon  = oldnxt.Twagon
      Until ( wagon.Twagon = Null )
   EndIf
   Delete zug.Tzug
End Function

Function DrawWagon(wagon.Twagon,x,y)
   Text x,y,wagon\art$
End Function

Function DrawZug(zug.Tzug,x,y)
   ydiff = y
   Text x,y,zug\art$
   ydiff = ydiff+FontHeight()
   wagon.Twagon = zug\firstt.Twagon
   If wagon.Twagon <> Null Then
      Repeat
         DrawWagon(wagon.Twagon,x,ydiff)
         ydiff = ydiff + FontHeight()
         wagon.Twagon = wagon\nxt.Twagon
      Until ( wagon.Twagon = Null )
   EndIf
End Function


P.S.: Ja ich weiss eigntlich sollte man nicht soviel ( wie es von d-bug glaub ich mal liebevoll ausgedrück wurde ) codekacken, aber ich glaube wenn ich versuche das was ich tue in worte zu erklären, dann schreib ich noch morgen an dem Post, also lassen wir den code sprechen Razz
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Mr Hopp

BeitragMo, Okt 16, 2006 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Also MEIN Debugger motzt bei "temp\Nextt<>0" Wink um Missverständnisse auszuschließen: ich habe B3D
 

Dreamora

BeitragMo, Okt 16, 2006 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Du gibst dir Mühe dir keine Gedanken zu geschriebenem zu machen, sonst würdest du selbst <> 0 bei Types zu <> null umdenken oder?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragMo, Okt 16, 2006 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee nee^^ Ich kannte den Begriff "Null" noch gar nicht Laughing

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group