Der Listeninhalt wird nicht komplett angezeigt [gelöst]

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Klip

Betreff: Der Listeninhalt wird nicht komplett angezeigt [gelöst]

BeitragFr, Jul 20, 2007 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen!

Ich probiere gerade, für eine Bekannte eine Art Memory zu programmieren. Für die Karten nutze ich Types.

Vor der Hauptschleife werden die Karten erstellt, mit TCard.deal_cards(5).

In der Hauptschleife selbst zeichne ich den Inhalt der Liste mit
Code: [AUSKLAPPEN]
For Local card:TCard = EachIn cardlist
      card.draw()
Next


Und so sehen dann die ominösen Methoden/Funktionen deal_cards und draw aus:
Code: [AUSKLAPPEN]

   Function deal_cards(number:Int)
      For Local i = 1 To number
         Global card:TCard = New TCard
         
         card.id         = i
         card.img      = LoadImage("gfx/s/s"+i+".png")
         card.back      = LoadImage("gfx/s/c_back.png")
         card.vis      = True
         card.found       = False
         card.x         = i+Rnd(10,100)
         card.y         = i*20
         
         ListAddLast(cardlist, card)
         DebugLog("added card number: "+i+"")
      Next
   EndFunction

   Method draw()
         DrawImage img,x,y
   EndMethod


Beide befinden sich innerhalb von TCard.

Alle Karten (in diesem Fall 5) werden geladen. Allerdings wird immer nur die letzte Karte gezeichnet. Ich verstehe nicht wieso. Ich weise doch dem x-Wert jeweils einen Zufallswert zu. Also müssten alle Karten zu sehen sein und können sich nicht überlappen.

Kann mir jemand sagen, was ich hier falsch mache?

Liebe Grüße
klip
  • Zuletzt bearbeitet von Klip am Fr, Jul 20, 2007 16:03, insgesamt einmal bearbeitet
 

#Reaper

Newsposter

BeitragFr, Jul 20, 2007 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Du tust eine Variable doppelt deklarieren:

Einmal mit:
Code: [AUSKLAPPEN]
For Local card:TCard = EachIn cardlist

in der Hauptschleife, und einmal in der Funktion deal_cards():
Code: [AUSKLAPPEN]
For Local i = 1 To number
   Global card:TCard = New TCard

Als Globale... Du kannst in keiner schleife eine Variable neudeklarieren, schongarnicht eine Globale. Benutzte mal lieber SuperStrict, dann passiert dir sowas nicht mehr Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Klip

BeitragFr, Jul 20, 2007 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe die lokale Variable umbenannt. Bewirkt leider nichts. Immer noch dasselbe Problem =/
 

#Reaper

Newsposter

BeitragFr, Jul 20, 2007 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ergänze auch mal das:

Code: [AUSKLAPPEN]

   Function deal_cards(number:Int)
      For Local i = 1 To number
         Global card:TCard = New TCard


Durch das:
Code: [AUSKLAPPEN]

   Function deal_cards(number:Int)
      Local card:TCard
      For Local i = 1 To number




Edit:

Und
card.back = LoadImage("gfx/s/c_back.png")
würd ich mal ganz schnell abändern, du brauchst ein und das selbe Bild nicht x-Mal laden Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
 

Dreamora

BeitragFr, Jul 20, 2007 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
mit dem local in der loop sollts gehen.
Global ist an sich auch korrekt, hat jedoch eine elementar andere bedeutung, denn es erzeugt eine statische variable die mit global ... = new ... direkt dort festgelegt wird und sich während der gesamten Laufzeit nicht mehr ändert (wenn das new in einer extra zeile ist, wird sie immer wieder neu initialisiert)

Auch ist eine global in einer funktion oder einem scope allgemein keine programm globale.


Was passiert denn jetzt nachdem du global durch local ersetzt hast? (angenommen natürlich ganz oben in deinem programm steht strict oder superstrict, ohne kannst du dir local sparen ...)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Klip

BeitragFr, Jul 20, 2007 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt mit dem Bild, danke Reaper ^^

Ja, das war es, Dreamora! Das Local in der Create-Funktion hat geholfen. Vielen Danke euch beiden. Wieder etwas dazugelernt =)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group