Frage zu Array und For-Schleife

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

ClayC

Betreff: Frage zu Array und For-Schleife

BeitragDi, Okt 21, 2008 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Also ich will das eine For-Schleife raufzählt
Code: [AUSKLAPPEN]
For i=1 to 10

Danach sollen die Werte der Arrays A1[0] - A10[0] ausgegebn werden aber ich bin mir nicht sicher wie das geht

print A(i)[0] würde mir da auf die Schnelle einfallen, aber kA wie ich das in BlitzMax umsetze

ozzi789

BeitragDi, Okt 21, 2008 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitz3d / Plus

Code: [AUSKLAPPEN]
For i = 1 to 10
print a$(i)
next



Denk ned das es viel anders is in Bmax



mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

d-bug

BeitragDi, Okt 21, 2008 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ozzi, wenn du keine Ahnung hast, dann halte dich einfach mal da raus!

ClayC:

Sieht für mich nach Array im Array aus!

Code: [AUSKLAPPEN]
Local Array:Int[10][10]

Local Count:Int = 100

'füllen:
For Local i:Int = 0 Until 10
  For Local j:Int = 0 Until 10
    Array[i][j] = Count + i
  Next
Next

'ausgeben von Index 0 in die Konsole:
For Local i:Int = 0 Until 10
  Print Array[i][0]
Next


Zumindest nehme ich mal an, dass du sowas meinst. Es wird aus deiner Fragestellung nicht ganz klar.

P.S.: Bin gerade auf der Arbeit und kann das nicht testen, also ist das ohne Gewähr!
 

ClayC

BeitragDi, Okt 21, 2008 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
dein Code funktioniert so nicht...

Aber ich glaub dass ich meine Frage ein bisschen präziser stellen sollte.

Code: [AUSKLAPPEN]
Local A1:String[]=["60","480","2","1"]
Local A2:String[]=["120","480","3","2"]
Local A3:String[]=["180","480","4","3"]
Local A4:String[]=["240","480","5","4"]

Hier werden die Arrays definiert. Gibt 64 von diesen Arrays daher fällt eine einfache If-Abfrage weg.
Es geht darum das ich in der For Schleife gezählt wird und in der Schleife mit einer if anweisung verglichen wird welches Array ich haben will.

Code: [AUSKLAPPEN]
For u=0 To 64
If Eingabe=A(u)
DrawImage Figur,A(u)[0], A(u)[1]
EndIf
Next


Irgendwie so hätt ich mir das vorgestellt

Es wird in ein Textfeld z.B. A1 eingegeben und danach soll an eine bestimmte Position ein Bild gezeichnet werden und daher brauche ich die ersten beiden Werte aus dem Array also z.B. A1[0] und A1[1] als x und y Position.

d-bug

BeitragDi, Okt 21, 2008 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Also möchtest du den Variabelnamen des Arrays abfragen? Nee du, dass wir nicht funktionieren. Da bleibt dir wirklich nur Array im Array, so wie ich es oben gezeigt habe. Schau mal in der BlitzMax-Hilfe, da wird es gezeigt.

Suco-X

Betreff: .....

BeitragDi, Okt 21, 2008 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal abgesehen davon dass das, was du vorhast, sicher 100 mal besser gelöst werden könnte, möchte ich dennoch auf deinen Weg eingehen und dir eine (wie ich finde) ganz nützliche Alternative zu den mehrdimensionalen Arrays (Die du benötigen würdest) bieten.
Code: [AUSKLAPPEN]

Strict


Type TEntry
   Field x:Int, y:Int
   Field ka:Int, ka2:Int
   
   Function Create:TEntry(x:Int, y:Int, ka:Int, ka2:Int)
      Local instance:TEntry
      instance = New TEntry
      instance.x = x
      instance.y = y
      instance.ka = ka
      instance.ka2 = ka2
      Return instance
   End Function
End Type




Local map:TMap = New TMap
map.insert("A1", TEntry.Create(60,480,2,1))
map.insert("A2", TEntry.Create(120,480,3,2))
map.insert("A3", TEntry.Create(180, 480, 4,3))
map.insert("A4", TEntry.Create(240,480,5,4))


Local eingabe:String = "A1"


If map.contains(eingabe)
   Local Entry:TEntry
   Entry = TEntry(map.valueForKey(eingabe))
   Print "X: "+Entry.x
   Print "Y: "+Entry.y
   Print "KA: "+Entry.ka
   Print "KA2: "+entry.ka2
EndIf

Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

ClayC

BeitragDi, Okt 21, 2008 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Mal abgesehen davon dass das, was du vorhast, sicher 100 mal besser gelöst werden könnte, möchte ich dennoch auf deinen Weg eingehen und dir eine (wie ich finde) ganz nützliche Alternative zu den mehrdimensionalen Arrays (Die du benötigen würdest) bieten.


Ok danke soweit ist dein Code eine ziemlich gute Lösung, aber wie sehen andere Alternativen aus wenn du meinst das man das ganze leichter lösen kann. Ich bin für alle Vorschläge offen Very Happy

Suco-X

Betreff: ......

BeitragDi, Okt 21, 2008 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Um dir eine Alternative zu zeigen, müsste ich zuerst mal wissen was du überhaupt vorhast. Wenn ich mir folgendes durchlese

Zitat:

Irgendwie so hätt ich mir das vorgestellt

Es wird in ein Textfeld z.B. A1 eingegeben und danach soll an eine bestimmte Position ein Bild gezeichnet werden und daher brauche ich die ersten beiden Werte aus dem Array also z.B. A1[0] und A1[1] als x und y Position.


und die Zahl 64 in deinem obigen Posts betrachte, kommt mir der Verdacht, dass du vielleicht ein Schachspiel programmieren willst?
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

ClayC

BeitragDi, Okt 21, 2008 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
und die Zahl 64 in deinem obigen Posts betrachte, kommt mir der Verdacht, dass du vielleicht ein Schachspiel programmieren willst?


Dein Verdacht war richtig! Cool

Es geht mir um die Steuerung der Figuren (welche als Funktionen deklariert werden) Ich hab 2 textfelder in denen ich die Startposition und die Endposition eingeben z.B: A1-A3 also den Turm von A1 auf das Feld A3
In A1 steht dann die x und y pos wo die Figur hingezeichnet wird, die 3 Zahl welche Figur und die 4 Zahl is die Feldnummer.

Code: [AUSKLAPPEN]
Local A1:String[]=["60","480","2","1"]

Das ist aus meinem alten Code also xposition ist 60, yposition ist 480 (linke untere Ecke), 2 ist der Turm und A1 hat die Feldnummer 1 die wird dann benötigt um die Zugmöglichkeiten der Figuren zu bestimmen.

Suco-X

Betreff: .....

BeitragDi, Okt 21, 2008 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.
Du solltest dir das Schachbrett wie ein zweidimensionales Array vorstellen und es auch so behandeln. Das heißt, du erstellst ein zweidimensionales Array mit der Größe von 8*8 und für jedes Feld in diesem Array legst du Daten an die du für das jeweilige Feld auf dem Schachbrett verwenden willst. Ich habe da kurz einen kleinen Code zusammengebaut der dir das besser veranschaulichen soll:

Code: [AUSKLAPPEN]

Strict

Const FELD_GROESSE:Int = 64

Type TSchachfeld
   Field farbe:Int
   Field figur:Int
   Field name:String
End Type

Type TSchachbrett
   Field feldDaten:TSchachfeld[8,8]
   Field bild:TImage
   
   Function Create:TSchachbrett(bild:TImage)
      Local instance:TSchachbrett
      instance = New TSchachbrett
      instance.bild = bild
      instance.reset()
      Return instance
   End Function
   
   Method draw()
      DrawImageRect bild, 0,0,FELD_GROESSE*8, FELD_GROESSE*8
   End Method
   
   Method reset()
      Local names:String[] = ["a", "b", "c", "d", "e", "f", "g", "h"]
      Local farbe:Int = 0
      For Local y:Int = 0 Until 8
         For Local x:Int = 0 Until 8
            feldDaten[x,y]       = New TSchachfeld
            feldDaten[x,y].name  = names[x]+String(8-y)
            feldDaten[x,y].farbe = farbe
            farbe = 1-farbe
         Next
         farbe = 1-farbe
      Next
   End Method
   
   Method feldAusgabe(fx:Int, fy:Int)
      Local feld:TSchachfeld
      Local str:String
      
      feld = feldDaten[fx,fy]
      
      If feld.farbe
         str = "weiss"
      Else
         str = "Schwarz"
      EndIf
      
      Print ""
      Print "Feld Arrayindex(x/y): "+fx+" : "+fy
      Print "Name: "+feld.name
      Print "Farbe: "+str
   End Method
End Type



Graphics 64*8, 64*8,0


Local bildSchachbrett:TImage = CreateImage(FELD_GROESSE*8, FELD_GROESSE*8)

Local farbe:Int = 0

For Local x:Int = 0 Until 8
   For Local y:Int = 0 Until 8
      If farbe
         SetColor 255,255,255
      Else
         SetColor 30,30,30
      EndIf
      farbe = 1-farbe
      DrawRect x*FELD_GROESSE, y*FELD_GROESSE, FELD_GROESSE, FELD_GROESSE
   Next
   farbe = 1-farbe
Next

GrabImage(bildSchachbrett, 0,0)
Cls

SetColor 255,255,255

Local Brett:TSchachbrett = TSchachbrett.Create(bildSchachbrett)

Repeat
   Cls
   If MouseHit(1)
      Local feldX:Int, feldY:Int
      feldX = MouseX()/FELD_GROESSE
      feldY = MouseY()/FELD_GROESSE
      brett.feldAusgabe(feldX, feldY)
   EndIf
   
   brett.draw()
   
   Flip
Until KeyHit(KEY_ESCAPE)



Wenn du auf ein Feld auf dem Schachbrett klickst, werden dir dessen Daten ausgegeben. Viele Sachen wie Position usw. ergeben sich halt automatisch aus dem Aufbau.
So wirds im Grunde gemacht, hoffe ich konnte dich auf neue Idee bringen.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

ClayC

BeitragDi, Okt 21, 2008 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok vielen dank, werd mir die nächsten paar Tage überlegen welche Variante ich wählen werde obwohl mir der Code mit dem Type mehr zusagt, das mit den zweidimensionalen Arrays hab ich schon öfters gelesen aber aus irgendwelchen Gründen is mir die Methode unsympatisch Rolling Eyes

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group