Alle Elemente gleich?
Übersicht

![]() |
relentless92Betreff: Alle Elemente gleich? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Huhu ihrs,
ich versuche grade eine Funktion zu schreiben, welche eine ganze Reihe in einem zweidimensionalen Array prüft. Wenn alle einen bestimmten Wert haben, sollen sie überschrieben werden - doch es passiert nichts. Code: [AUSKLAPPEN] Function IsLineCompleted()
Local prufline For bg_y=14 To 0 Step -1 If bg(0,bg_y)=9 Then For bg_x=6 To 13 If bg(bg_x,bg_y)=9 Then prufline=True Else prufline=False Exit EndIf Next If prufline=True Then For bg_x=0 To 6 bg(bg_x,bg_y)=98 Next EndIf EndIf Next End Function Kann mir da jemand helfen? Bin zu blauäugig ![]() Vielen Dank, MfG |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde da gerade keinen Fehler, wahrscheinlich liegt es daran, da ich nicht weiß wie dein Array aussieht.
Ich würde das ganze allerdings so machen, vielleicht funktioniert das ja: BlitzBasic: [AUSKLAPPEN] Function IsLineComplete() MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
beschreib mal genau, was in der zeile passieren soll.
Momentan steht in deinem Code: Code: [AUSKLAPPEN] Gehe alle Zeilen durch...
...Wenn in einer Zeile ganz außen bei Stelle 0 eine "9" steht... ...dann prüfe die anderen Stellen 6 bis 13 in dieser Zeile... ...wenn die auch alle 9 sind... ...dann ändere den Wert in den Stellen 0 bis 6 in dieser Zeile auf "98". Ist es wirklich, was du erreichen willst? |
||
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, genau das soll passieren =)
@ Der Eisvogel: Auch ne Möglichkeit, aber geht leider auch nicht. Hier mal mein Array für euch: Code: [AUSKLAPPEN] Dim bg(19,14)
Restore bgdata For bg_y=0 To 14 For bg_x=0 To 19 Read bg(bg_x,bg_y) Next Next ... Function draw_bg() For bg_y=0 To 14 For bg_x=0 To 19 Select bg(bg_x,bg_y) Case 0 DrawImage bg0,bg_x*32,bg_y*32 Case 1 DrawImage bgi_1,bg_x*32,bg_y*32 Case 2 DrawImage bgi_2,bg_x*32,bg_y*32 Case 3 DrawImage bgi_3,bg_x*32,bg_y*32 Case 4 DrawImage bgi_4,bg_x*32,bg_y*32 Case 5 DrawImage bgi_OR,bg_x*32,bg_y*32 Case 6 DrawImage bgi_UR,bg_x*32,bg_y*32 Case 7 DrawImage bgi_UL,bg_x*32,bg_y*32 Case 8 DrawImage bgi_OL,bg_x*32,bg_y*32 Case 99 DrawImage spf,bg_x*32,bg_y*32 Case 98 DrawImage red_dummy_tile,bg_x*32,bg_y*32 Case 9 DrawImage rdtset,bg_x*32,bg_y*32 End Select Next Next End Function spf=Spielfeld, rdt=Block, rdtset=Gesetzter Block. Dadurch erklärt sich dann auch mein Vorhaben. =) Wenn die komplette Reihe voller Blöcke sitzt, soll das Spielfeld wieder darübergemalt werden. MfG |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry, aber ich habs immer noch nicht verstanden...
wieso checkst du dann nur die positionen 6 bis 13. Und beim Füllen füllst du nur die positionen 0 bis 6... Im Text schreibst du immer "ganze Reihe". Wie passt das zusammen? |
||
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, danke, du hast mich auf einen kleinen Denkfehler aufmerksam gemacht.
Das effektive Spielfeld befindet sich nur von Koordinate 6 - 13 - deswegen frag ich die nur ab. (Ressourcen sparen) Abgeändert sieht das ganze nun also so aus: Code: [AUSKLAPPEN] Function IsLineCompleted()
For bg_y=14 To 0 Step -1 If bg(6,bg_y)=9 Then prufline=True For bg_x=6 To 13 If bg(bg_x,bg_y)<>9 Then prufline=False : Exit Next If prufline=True Then For bg_x=6 To 13 bg(bg_x,bg_y)=99 Next EndIf EndIf Next End Function Hier einmal mein relativ unübersichtliches Array, vielleicht könnt ihr's euch dann besser vorstellen: Code: [AUSKLAPPEN] .bgdata
Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## 0| = 1 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## |0 = 2 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## _ = 3 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## = = 4 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## OR = 5 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## UR = 6 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## UL = 7 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## OL = 8 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## blue = 0 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,0, 0,0,0,0 ;## grayspf = 99 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,6, 3,7,0,0 ;## rdummy = 98 Data 0,0,0,0,0,1,99,99,99,99,99,99,99,2,0,1,99,2,0,0 ;## rdtset = 9 Data 0,0,0,0,0,5, 4, 4, 4, 4, 4, 4, 4,8,0,5, 4,8,0,0 Data 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 Allerdings tut sich immer noch nichts. Danke nochmal. ![]() |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
- Dü prüfst nach 9en, im Datafeld kommen aber keine vor
- Wenn das nicht der Fehler ist führ mal vor IsLineCompleted() das hier aus und mach dannach ein Stop: Code: [AUSKLAPPEN] For bg_y=0 To 14
Local zeile$="" For bg_x=0 To 19 zeile$=zeile$+String(" ", 3-Len(bg(bg_x,bg_y)))+bg(bg_x,bg_y) Next DebugLog zeile$ Next Poste dann den Inhalt der DebugLog (Debug-Fenster->Debug Log) Dort müsste man den Inhalt der Karte sehen. |
||
1 ist ungefähr 3 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, leider schreibst du ja immer noch nicht, wozu das ganze dienen soll. das macht das helfen auch nicht gerade leichter.
Es gibt zwei gründe, warum etwas nicht funktioniert: 1. der code hat einen Fehler (das ist was du vermutest) und 2. der erwartete zustand war gar nicht eingetreten!!! Deshalb helfen immer ein paar DEBUGLOGs BlitzBasic: [AUSKLAPPEN] Function IsLineCompleted() würde mich jetzt nicht wundern, wenn da was ganz anderes rauskommt, als du erwartest! Dazu gibt es das echt witzige Kapitel IV in meinem Fehler-Vermeiden Tutorial: https://www.blitzforum.de/foru...620#354620 Mein Tipp lautet: während der Programm-Erstellung viel mehr DEBUGLOGs einsetzen und bis zum Schluss drinlassen. Es spart soviel Zeit bei der Fehlersuche... |
||
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit dem DebugLog ist gut, werde ich beherzigen.
//EDIT: Vielen Dank! Ich hab jetzt mal Schritt für Schritt mit dem Debugger gearbeitet, und ich hab den Fehler gefunden. Dank an euch! |
||
~
Fussball spielen viele, Kart fahren nur die Besten. ~ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group