For Each macht Probleme?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Mr Hopp

Betreff: For Each macht Probleme?

BeitragSo, Sep 17, 2006 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Der folgende Code sollte eigentlich alle Züge und deren einzelne Wagons durchgehen. Type wie folgt: Verkehr\Zug\Wagon. Das Problem ist nun: ein einzelner Zug lässt sich super bewegen, sobald es jedoch 2 Züge sind, stehen beide still.

Code: [AUSKLAPPEN]
For Verkehr\Zug=Each TZug
For Verkehr\Zug\Wagon=Each TWagon

Verkehr\Zug\Wagon\x=Verkehr\Zug\Wagon\x+Cos(Verkehr\Zug\Wagon\gr#)*Verkehr\Zug\spd#
Verkehr\Zug\Wagon\y=Verkehr\Zug\Wagon\y+Sin(Verkehr\Zug\Wagon\gr#)*Verkehr\Zug\spd#

If Verkehr\Zug\Wagon\typ=1 Then DrawImage lok_l(Verkehr\Zug\wagon\gr),Verkehr\Zug\wagon\x,Verkehr\Zug\wagon\y
If Verkehr\Zug\Wagon\typ=2 Then DrawImage wagon(Verkehr\Zug\wagon\gr),Verkehr\Zug\wagon\x,Verkehr\Zug\wagon\y
If Verkehr\Zug\Wagon\typ=3 Then DrawImage lok_r(Verkehr\Zug\wagon\gr),Verkehr\Zug\wagon\x,Verkehr\Zug\wagon\y

Next
Next


PS: Die Zeilenumbrüche sollten eigentlich net sein Confused

5k41

BeitragSo, Sep 17, 2006 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
liegt daran, dass er mit
Code: [AUSKLAPPEN]

For Verkehr\Zug\Wagon=Each TWagon

nicht nur die zum einen Zug sondern ALLE Wagongs durchgeht, bräuchtest also sowas ( gibts bei Blitz nicht):
Code: [AUSKLAPPEN]

For Verkehr\Zug\Wagon=Each Verkehr\Zug\TWagon

Die einzige möglichkeit das Problem in den Griff zubekommen ist, die Types selbst zu verketten.... wurde auch schon 100 te mal geklärt.

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Mr Hopp

BeitragSo, Sep 17, 2006 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du meinst also, dass TWagon nich an TZug gekoppelt werden soll???

5k41

BeitragSo, Sep 17, 2006 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
nicht nicht soll, sondern nicht kann! Du musst wie schon gesagt die wagen manuell untereinander verketten... als denkanstoß:
Code: [AUSKLAPPEN]

Type Zug
 Field firstwagon.wagon
end Type

Type wagon
 Field nextwagon.wagon
 Field lastwagon.wagon
End Type

Diese Felder braucht das Type für die Manuelle Verkettung, nun musst du nur noch bei der erstellung des Zugs/Wagons die Fleder ausfüllen Smile

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Mr Hopp

BeitragSo, Sep 17, 2006 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
mhh...........ich erkenne keinen Unterschied zu meinen Types Laughing Das hier hab ich schon vor dem Problem geproggt^^

Code: [AUSKLAPPEN]
Type TVerkehr
   Field Zug.TZug
End Type

Type TZug
   Field wagon.Twagon
   Field spd#
   Field spurwechsel
   Field spw_x
   Field spw_y
End Type

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

StepTiger

BeitragSo, Sep 17, 2006 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
also das kann man OOP nennen ^^

Es geht. Du kannst ja jeden Wagon durchgehen und schauen, ob er als Zug den Zug ... hat
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Dreamora

BeitragSo, Sep 17, 2006 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst in deinem Fall leider nicht daran vorbei kommen, dir eine eigene linked list zu basteln wie oben empfohlen (ausser du willst eine fixe anzahl an wagen setzen, dann könntest du field wagen.TWagon[anzahl] nehmen mit einer fixen anzahl, da es nicht geändert werden kann).

Hab dir dazu mal einen Code geschrieben:

Code: [AUSKLAPPEN]
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 next.TWagonList
        field value.TWagon
end type

Function AddToWagonList (list.TWagonList, wagon.TWagon)
  temp.TWagonList = list
  while temp\next > 0
    temp = temp\next
  wend
  t.TWagonList = new TWagonList
  t\value = wagon
  temp\next = t
end function

Function RemoveFromWagonList(list.TWagonList, wagon.TWagon)
  temp.TWagonList = list\next
  tprev = list
  while temp > 0
    if temp\value = wagon
      tprev\next = temp\next
      return
    end
    tprev = temp
    temp = temp\next
  wend
end function

Function DrawTrain(zug.TZug)
  temp.TWagonList = zug\head
  ; geht alle Wagen in der WagenListe des Zuges durch und zeichnet sie
  while temp > 0
    DrawWagon(temp\value)
    temp = temp\next
  wend
end Function


DrawTrain und DrawWagon sind dabei einfach beispielfunktionen die eine TZug bzw. eine TWagon Type entgegen nehmen.

Die Add und Remove sind dazu da um von einem Zug\head etwas zu entfernen bzw. hinzuzufügen. Die Funktionen sind husch husch hier im Forum hingeschrieben worden können also eventuell fehler beinhalten.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragMo, Sep 18, 2006 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die Lösung, ich denke, es wird mir weiterhelfen Smile
Allerdings möchte ich nicht nur eine Lösung haben, sondern sie auch verstehen. Und das tue ich leider noch net Laughing Kann's jemand vll nochmal etwas ausführlicher erklären??? Laughing
 

Dreamora

BeitragMo, Sep 18, 2006 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
google mal nach Linear verketteter Liste oder Linear LinkedList

du wirst unzählige Seiten dazu finden häufig mit schönen JAVA Applets die dir alles erklären.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragDi, Sep 19, 2006 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab jetzt WIRKLICH nachgeguckt, blick's aber immer noch net... kannst du mir mal ein Beispiel geben, wie man deine Funktionen benutzt? (Vor allem, was die Parameter enthalten müssen) Laughing
 

Dreamora

BeitragDi, Sep 19, 2006 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Da müsste man dann wohl sagen, dass du dir ein anderes Hobby suchen solltest, das weniger Lernwille und analytisches Denken erfordert, wenn dir schon die unzähligen hervorragenden Seiten zu linear linkedlist nicht helfen, ein so einfaches Thema zu verstehen.


Aber ich werde versuchen dir ein kleines Beispiel zu machen, das dir dann auch direkt zeigen wird, dass du dir selbst noch weitere Funktionen schreiben musst (zur Erzeugung eines Zuges und so)

Code: [AUSKLAPPEN]


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

zug.list = WList

; 3 weitere Wagen hinzufügen
for i = 1 to 3
  AddWagonToList(zug.list,new TWagon)
next
; Der Zug besteht nun also aus der Lok und 3 Wagen

DrawTrain(zug)

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 next.TWagonList
        field value.TWagon
end type

Function AddToWagonList (list.TWagonList, wagon.TWagon)
  temp.TWagonList = list
  while temp\next > 0
    temp = temp\next
  wend
  t.TWagonList = new TWagonList
  t\value = wagon
  temp\next = t
end function

Function RemoveFromWagonList(list.TWagonList, wagon.TWagon)
  temp.TWagonList = list\next
  tprev = list
  while temp > 0
    if temp\value = wagon
      tprev\next = temp\next
      delete temp
      return
    end
    tprev = temp
    temp = temp\next
  wend
end function

Function DrawTrain(zug.TZug)
  temp.TWagonList = zug\head
  ; geht alle Wagen in der WagenListe des Zuges durch und zeichnet sie
  while temp > 0
    DrawWagon(temp\value)
    temp = temp\next
  wend
end Function

PS: Fehler beim Remove entfernt. Vorher wurde das Objekt nicht deleted.

Empfohlene Funktionen die du machen könntest:

AddWagonToTrain
RemoveWagonFromTrain
CreateTrain (für initialisierung der Liste)
DestroyTrain (um die gesamte Liste mittels delete wieder freizugeben)

Und natürlich alles andere was dein Zug an Funktionalität bieten sollte.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragDi, Sep 19, 2006 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab mir das Beispiel jetzt noch net angeguckt, aber:

1. Danke erstmal, dass du dir nochmal die Mühe machst. Smile
2. Zitat:
Da müsste man dann wohl sagen, dass du dir ein anderes Hobby suchen solltest, das weniger Lernwille und analytisches Denken erfordert

Ich programmiere Seit 2 Jahren und habe dabei viel gelernt, ich finde es ziehmlich unfreundlich, sowas einfach so zu sagen!
 

Dreamora

BeitragDi, Sep 19, 2006 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, sofern du wirklich wie oben erwähnst versuchst hast dich zu informieren und die hervorragenden Pages, die man dank Google in Minuten findet, nicht geholfen haben, dann ist es nicht unfreundlich, sondern die Wahrheit. (-> Informieren = ernsthaft damit auseinandersetzen = mehrere Stunden wie bei allem neuen das man sich an wissen aneignet)

Denn die linkedlist ist die einfachste Datenstruktur die auf Basis von Types (struct) überhaupt existiert, da sie ganz einfach aus einem Verweis auf das folgende Objekt und einen Verweis auf ein Datenobjekt besteht.
Dabei gehe ich natürlich davon aus, dass du Types in und auswendig kennst mit deinen 2 Jahren erfahrung.
Falls nicht solltest du das baldmöglichst nachholen.
(aus meiner Sicht sollte man erst types, schleifen, if etc verstehen bevor man sich überhaupt an sowas wie 2D Bilderzeichnen etc setzt, denn was nutzt es einem wenn man etwas zeichnen kann aber das Datenhandling nicht gescheit strukturieren kann?)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragSa, Okt 14, 2006 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal sorry, dass ich dieses alte Thema nochmal anspreche.

Das liegt daran, dass mir durch ein paar ziehmlich blöde äußerungen die Laune am proggen genommen wurde (ich muss das ja nicht nochmal ausführlich beschreiben, oder?). Auf jeden Fall fand ich das ziehmlich sch***e. Naja...zum eigentlichen Thema:

Ich hab jetzt kapiert, wie diese Liste verlinkt wird (habe allerdings kein einziges "schönes JAVA-Applet" gefunden). Allerdings kann ich das ganze noch net so wirklich in BB umsetzen. Außerdem ist das Beispiel eine einzige Errormeldung Confused Deswegen erstmal ein paar Feststellungen/Fragen/Bitten.

- Da fehlen doch noch Types, oder???
- Kann mir BITTE jemand die Funktion zum erstellen eines Zuges machen? (Ich meine: was bringt mir's, zu wissen, wie man nen Waggon erstellt, obwohl ich kp hab, wie ein zug geht? Laughing )

Markus2

BeitragSa, Okt 14, 2006 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Du mußt nur wissen das es pro Struktur (Type) immer nur eine gesamt Liste gibt in BlitzBasic .

For Verkehr\Zug=Each TZug
For Wagon=Each TWagon
If Verkehr\Zug\Wagon=Wagon then
endif
next
Next

Nicht schön aber so in der Art , also wo ist das Problem ?
BlitzMax ist da besser weil man sich eigene Listen erstellen kann .
 

Dreamora

BeitragSa, Okt 14, 2006 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
google nach "linear linkedlist"

Erstes Resultat: http://www.cs.usask.ca/resourc...ction.html

Ich hoffe das hilft dir das ganze ein wenig "bildlich" näher zu bringen.

Und doch obige Types sind alle die nötig sind. Ein Listenelement Type und ein Listen Type. Die restlichen Types haben ja nichts mit der linked list zu tun und sind somit eigentlich mehr oder weniger deine freie Entscheidung Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragSa, Okt 14, 2006 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen vielen Dank Smile Bei MEINER Google-Suche hab ich diesen Link nie gefunden...Aber das is klasse, ich werd mich dann mal morgen intensiv damit beschäftigen Very Happy

Und wegen fehlenden Types: "zug.list = WList" ergibt: "Type "list" not found" ..... aber naja, wie gesagt: wenn du meinst, dass das so stimmt, wird's so sein. Morgen forsche ich mal ganz genau nach^^
 

Dreamora

BeitragSa, Okt 14, 2006 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Args ne da hast du sogar recht.

sollte

zug.head = WList

sein da head ja die referenz auf die wagenliste ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragSo, Okt 15, 2006 11:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Also head müsste ich jetzt erst noch erstellen, oder was??? Weil "zug.head" ergibt den gleichen fehler Confused

das gleiche bei:
AddToWagonList(zug.list,New TWagon)
Type "list" not found

Sad
 

Dreamora

BeitragSo, Okt 15, 2006 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
da müsste auch zug.head stehen.
zug.list existiert nicht, wie du der Type Definition des Zuges entnehmen kannst
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group