Fragen zu Arrays?
Übersicht

blackmasterBetreff: Fragen zu Arrays? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
wie bekomme ich am einfachsten solche Feld positionen hin: Screen Also die Kugeln sollen nicht alle gleichmäßig untereinander gezeichnet werden, sondern jede 2te Zeile sollen die Kugeln um 10 Pixel nach rechts und -2 Pixel nach oben verschoben werden. Ich habe das mit 2 x und y durchläufe versucht, die werden alle jede 2te Zeile gezeichnet mit Step 2. Hier mal der Code: Code: [AUSKLAPPEN] Graphics 1024,768,16,2
SetBuffer BackBuffer() ;Spielfeld erstellen Dim Map(21,26) ;Map Daten einlesen Restore map_data For y=0 To 26 For x=0 To 21 Read Map(x,y) Next Next ClsColor 147,188,255 Repeat Cls ;Kugel jede 2te Zeile zeichnen For y=0 To 26 Step 2 For x=0 To 21 maps = Map(x,y) If maps = 1 Then Color 0,0,0 ;Kugeln so positionieren, das diese in der Mitte des Fensters ausgerichtet werden Oval GraphicsWidth()/2-(22*20/2)+x*20,100+y*18,20,20,0 EndIf Next Next ;Kugel jede 2te Zeile zeichnen For y=0 To 26 Step 2 For x=0 To 21 maps = Map(x,y) If maps = 1 Then Color 0,0,0 ;Kugeln so positionieren, das diese in der Mitte des Fensters ausgerichtet werden ;aber diesmal um 18 Pixel nach unten und 10 Pixel nach rechts verschieben Oval GraphicsWidth()/2-(22*20/2)+10+x*20,100+y*18+18,20,20,0 EndIf Next Next Flip Until KeyHit(1) End ;Daten für die Map .map_data Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Das ist aber Schwachsinn, wie könnte ich das ambesten lösen? Ich bedanke mich schonmal im Voraus. MfG |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
du brauchst keine 2 Schleifen, arbeite mit offsets
in jedem durchlauf machst du Code: [AUSKLAPPEN] x_off = 1 - x_off y_off = y_off + 2 beim zeichnen Code: [AUSKLAPPEN] oval x+(x_off*halbekugelbreite), y-y_off, breite, höhe hier noch ein kleines Beispiel, damit du siehst, wo du es einsetzen musst Code: [AUSKLAPPEN] Graphics 800, 600 SetBuffer BackBuffer() Repeat For y = 0 To 10 For x = 0 To 20 Oval x*16+(x_off*8), y*16-y_off, 16, 16 ,0 Next x_off = 1 -x_off y_off = y_off + 2 Next x_off = 0 y_off = 0 Flip Cls Until KeyHit(1) End |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich danke Dir.
So ähnlich hatte ich es auch erst, aber ich lasse im Feld eine Kugel in Richtung Maus fliegen, wenn diese gedrückt wurde und muss dann auch feststellen in welches Feld sich gerade die Kugel befindet, wenn sie fliegt. Deshalb weiss ich nicht, ob diese Variante gut ist, da jede 2te Zeile die Felder dann weiter nach rechts sich befinden. MfG |
||
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gibt es vieleicht eine bessere lösung das hinzubekommen?
Hier mal mein Code wie es im Moment abläuft: Code: [AUSKLAPPEN] Graphics 1024,768,16,2
SetBuffer BackBuffer() Global Timer = CreateTimer(50) Global GX#,GY# Global pos_x# = GraphicsWidth()/2-20/2 Global pos_y# = 589 Global Winkel# Global Speed = 5 Global Bewegen Global X_PX,Y_PX ;Pixel zähler für die Kugel Global Feld_x,Feld_y ;Spielfeld erstellen Dim Spielfeld(25,30) ;Map Daten einlesen Restore map_data For y=0 To 30 For x=0 To 25 Read Spielfeld(x,y) Next Next ClsColor 147,188,255 Repeat Cls WaitTimer(Timer) MX = MouseX() MY = MouseY() For y = 0 To 30 For x = 0 To 25 map = Spielfeld(x,y) If map = 2 Then Color 0,128,128 Oval GraphicsWidth()/2-(26*20/2)+x*20+(x_off*10), 100+y*20-y_off, 20, 20 ,0 If Bewegen = 0 Then If MouseDown(1) And MouseHit(1) Then Feld_x = 12 Feld_y = 26 Winkel = ATan2(MY-pos_y-10,MX-pos_x-10) ;Winkel für die Kugel berechnen GX = Cos(Winkel)*Speed GY = Sin(Winkel)*Speed Bewegen = 1 EndIf EndIf EndIf Next x_off = 1 -x_off y_off = y_off + 2 Next x_off = 0 y_off = 0 KugelShoot() Color 0,0,0 ;Rahmen zeichnen für das Spielfeld Rect 291,99,452,490,0 ;Kugel zeichnen Oval pos_x,pos_y,20,20,0 Color 0,0,128 Text 20,40,"X PX:"+X_PX Text 20,60,"Y PX:"+Y_PX Text 20,80,"Feld X:"+Feld_x Text 20,100,"Feld Y:"+Feld_y Flip Until KeyHit(1) End Function KugelShoot() If Bewegen = 1 Then pos_x = pos_x + GX pos_y = pos_y + GY ;Pixel zähler für die X-Richtung X_PX = X_PX + GX ;Pixel zähler für die Y-Richtung Y_PX = Y_PX + GY If X_PX <= -18 Then Feld_x = Feld_x - 1 X_PX = 0 EndIf If X_PX >= 18 Then Feld_x = Feld_x + 1 X_PX = 0 EndIf If Y_PX <= -18 Then Feld_y = Feld_y - 1 Y_PX = 0 EndIf If Y_PX >= 18 Then Feld_y = Feld_y + 1 Y_PX = 0 EndIf If Spielfeld(Feld_x,Feld_y-1) = 2 Or Spielfeld(Feld_x,Feld_y+1) = 2 Or Spielfeld(Feld_x-1,Feld_y) = 2 Or Spielfeld(Feld_x+1,Feld_y) = 2 Then Spielfeld(Feld_x,Feld_y) = 2 pos_x# = GraphicsWidth()/2-20/2 pos_y# = 589 Bewegen = 0 EndIf EndIf End Function ;Daten für die Map .map_data Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Ich bekomme keine genaue Feld position angezeigt, da jede 2te Zeile die Felder anders positioniert sind. Wenn ich eine Kugel abfeuer, dann wird sie nicht genau da rein gesetzt wo die Kugel kollidiert. Ich wäre euch sehr dankbar für lösungsvorschläge. MfG |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
das ist jetzt nicht des rätsels lösung aber warum fragst du den Mousehit während der geschachtelten schleifen immer und immer wieder ab? wäre doch sinnvoller den ganzen if block davor oder dahinter zu setzten... | ||
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast recht, ich habe das erst in der Funktion KugelShoot() drin gehabt aber habe es dann in der Schleife gleich mit rein geschrieben.
Eigentlich ist es egal ob in der For Schleife oder in der Funktion. Weiss wer eine lösung zu meinem Problem? MfG |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group