Array Verwaltung?
Übersicht

![]() |
relentless92Betreff: Array Verwaltung? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Huhu, da bin ich nochmal =)
Jeder von euch kennt doch bestimmt Tetris. Ich habe mir jetz überlegt das mit einem zweidimensionalen Array zu machen. Sprich wenn man die Taste runter drückt, geht die obrige stelle des arrays zurück auf 9 (neutral) und die da drunter auf 10 (der tile). Code: [AUSKLAPPEN] Function red_dummy_tile_function()
Local x=10,y=0, down If KeyDown(208) Then down=1 Else down=0 If down=1 Then bg(x,y)=9 y=y+1 bg(x,y)=10 EndIf End Function Problem nun, das geht nur einmal. Bin ich zu doof das jetzt zu sehen oder woran liegts? Danke schonmal ![]() MfG |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Willst du damit erreichen, dass der Dummy immer weiter fällt?
Dann musst du jedes Mal ein neues Y übergeben! Da ja der Stein eins weiter gerutsch ist. nur mal als 1.Schritt: BlitzBasic: [AUSKLAPPEN] If down=1 Then das musst du natürlich auch noch auf alle X erweitern. Aber da kommst du schon selber drauf... |
||
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So gehts natürlich auch... Vielen Dank! | ||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun äh... Ich bin deinem Muster gefolgt.
Code: [AUSKLAPPEN] Function red_dummy_tile_function()
Local x,y, tdown,tleft,tright If KeyHit(208) Then tdown=1 Else tdown=0 If KeyHit(203) Then tleft=1 Else tdown=0 If KeyHit(205) Then tright=1 Else tdown=0 If tdown=1 Then For y=0 To 14 For x=0 To 19 Step -1 If bg(x,y)=10 Then bg(x,y)=9 bg(x,y+1)=10 EndIf Next Next EndIf If tleft=1 Then For y=0 To 14 For x=0 To 19 If bg(x,y)=10 Then bg(x,y)=9 bg(x-1,y)=10 EndIf Next Next EndIf If tright=1 Then For y=0 To 14 For x=0 To 19 If bg(x,y)=10 Then bg(x,y)=9 bg(x+1,y)=10 EndIf Next Next EndIf End Function Ich überprüfe auf Tastendruck. Wenn der =1 ist, springt er in die Überprüfung des Feldes. (For Schleifen.) Wenn er jetzt ein Feld mit Rotem Dummy (bg(x,y)=10) findet, soll er es dementsprechend verschieben und das alte überschreiben. Taste links geht einwandfrei. Runter gar nicht, Rechts gibts Error, Programm schmiert ab. Äh? Danke im Vorweg nochmal ![]() |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, logisch...
das verschieben muss für alle 3 richtungen etwas anders aussehen. du musst immer rückwärts von der vorletzten(!!) Zeile her arbeiten. Das Programm überschreitet sonst die DIM-Grenzen. Deshalb vorhin das For Y=19 to 0 Step -1 für eine senkrechte Bewegung bei gedachten 20 Zeilen (yMax). Wegen des kopierens wird ja immer noch eine Zeile y+1 angesprochen. Bei einer Bewegung nach links musst du erst ab Spalte 1 (vorwärts) arbeiten. Bei einer Bewegung nach rechts ab Spalte xMax-1 (rückwärts) Anmerkung: Hast du nicht in deinem letzten Beispiel X und Y miteinander verwechselt? Wie breit und wie hoch wird der das Array bzw Spielfeld? |
||
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
640x480, (20x32)x(15x32)
Verwechselt ist es nicht. Aber danke für deine Hilfe, das dürfte funktionieren! MfG |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, tut mir Leid das ich nochmal störe, aber so richtig will das nicht in meinen Kopf rein. ![]() Beispiel an diesem Schnipsel: Code: [AUSKLAPPEN] If tleft=1 Then
For y=14 To 0 Step -1 For x=19 To 0 Step -1 If bg(x,y)=10 Then bg(x,y)=9 bg(x-1,y)=10 EndIf Next Next EndIf Wenn die Taste gedrückt ist, Springt er in die Schleifen. Wir befinden uns also bei bg(19,14). wenn diese nun =10 ist, macht er sie =9 und zieht vom x einen ab. also bg(18,14). Allerdings sagt er: Array out of Bounds. Wo ist denn da die Logik? |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na, wenn du nach links suchst und die letzte Spalte darf wie bei dir die X=0 sein, dann kommt die Stelle, wo du Feld(x-1,... schreibst. Und das wäre ja dann wohl Feld(-1,... Das gibt es nicht. Es liegt OUT OF BOUNDS.
Deshalb sollt du bei einer Bewegung nach links auch mit der Untersuchung links anfangen und dich nach rechts durcharbeiten. Beginne Bei X=1 und nicht bei X=0. Zusammenfassung: Wenn Spielerbewegung nach links... ..dann Untersuchung von links nach rechts ...beginne bei 1 und geh ruhig bis xMax Wenn Spielerbewegung nach rechts... ..dann Untersuchung von rechts nach links ...beginne bei xMax-1 und geh ruhig bis 0 Wenn Spielerbewegung nach unten... ..dann Untersuchung von unten nach oben ...beginne bei YMax-1 und geh ruhig bis 0 Anmerkung I: bei den Bewegungen nach links/rechts ist es bei der Reihenvariable Y egal, ob du mit negativer Richtung untersuchst. Anmekung II: Ah 20x15, dann ist dein Spielfeld also breiter als hoch! Anmerkung III: Du störtst natürlich nicht! |
||
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alles klar, danke dir nochmal vielmals.
Rechts und links habe ich jetzt verstanden. Erst einmal so erklärt ist es natürlich ganz logisch, danke dir. Ein Problem habe ich dummerweise trotzdem noch. Rechts und Links funktioniert. Aber bei einem Druck auf die Runter-Taste passiert gar nischt, obwohl die Funktion eigentlich richtig ist. Code: [AUSKLAPPEN] If tdown=1 Then
For y=14 To 0 Step -1 For x=19 To 0 Step -1 If bg(x,y)=10 Then bg(x,y)=9 bg(x,y+1)=10 EndIf Next Next EndIf Ist da ein Fehler so offensichtlich, das ich ihn nicht erkennen kann? Achja, hier mal die beiden funktionierenden für rechts und links, falls es interessiert: Code: [AUSKLAPPEN] If tleft=1 Then
For y=0 To 14 For x=7 To 19 If bg(x,y)=10 Then bg(x,y)=9 bg(x-1,y)=10 EndIf Next Next EndIf If tright=1 Then For y=14 To 0 Step -1 For x=11 To 0 Step -1 If bg(x,y)=10 Then bg(x,y)=9 bg(x+1,y)=10 EndIf Next Next EndIf Danke im Vorraus! MfG |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hattest auch in nem obigen code sowas stehen wie
If KeyHit(208) Then tdown=1 Else tdown=0 If KeyHit(203) Then tleft=1 Else tdown=0 If KeyHit(205) Then tright=1 Else tdown=0 das tdown am Ende kann nicht richtig sein ... da fehlt ein tleft und ein tright. |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
Nibor |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If KeyHit(208) Then tdown=1 Else tdown=0 If KeyHit(203) Then tleft=1 Else tdown=0 If KeyHit(205) Then tright=1 Else tdown=0 geht übrigens einfacher mit: Code: [AUSKLAPPEN] tdown=KeyHit(208)
tleft=KeyHit(203) tright=KeyHit(205) |
||
http://www.blitzforum.de/showcase/203/ |
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke euch, es musste ja so etwas offensichtliches sein. ![]() MfG |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei Nibor könnten aber evtl auch die werte 2 oder 3 auftauchen wenn du die taste in einem frame 2 mal drückst... rein hypothetisch | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group