3 Gleiche Felder mit einem If anweisung prüfen?
Übersicht

bruce85Betreff: 3 Gleiche Felder mit einem If anweisung prüfen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich brauch mal kurz eure hilfe und zwar möchte ich 3 gleiche felder mit nur einem If anweisung prüfen, ich hab das zurzeit so gemacht: Code: [AUSKLAPPEN] If Spielfeld(F_x,F_y) = 2 Then
If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = Spielfeld(F_x,F_y) And Spielfeld(F_x,F_y+2) = Spielfeld(F_x,F_y) Then Spielfeld(F_x,F_y) = 1 Spielfeld(F_x,F_y+1) = 1 Spielfeld(F_x,F_y+2) = 1 EndIf EndIf EndIf ich komm grad net drauf, ich könnte ja noch eine For schleife mit einbauen wie z.B. y_pos und in der if irgendwie alle felder nach unten prüfen bis es keine paare mehr gefunden hat. Wäre sehr nett, wenn mir da einer nen tip geben könnte, danke. MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
coldie |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich verstehe ehrlich gesagt nicht genau was du willst.
Außerdem hast du hier nicht mehrere Dim-Felder (oder meintest du etwas anderes?) sondern nur eines, in dem du verschiedene Variablen überprüfst. Also was für "Paare" oder sonstige Dinge sollen da übeprüft werden? Erklär doch nochmal ausführlicher. |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Dir.
Das ist genau richtig so, so muss ich net jede Frame einzeln überprüfen weil es ja mehrere Frame sind die ich dann prüfen will ob sich 3 gleiche obereinander befinden. Das geht zwar, aber ich will es einfacher machen, indem ich auch mehr wie 3 felder prüfen kann, ohne jedes mal ne neue If anweisung schreiben zu müssen. ![]() MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt zudem noch ein paar Sachen die ich für unsinig halte: Code: [AUSKLAPPEN] If Spielfeld(F_x,F_y) = 2 Then
If Spielfeld(F_x,F_y) > 1 Then Entweder das eine oder das andere, aber bei dieser If-Konstelation ist eine zuviel... Ausserdem kann man - wenn es wirklich so sein soll - das ganze was jetzt so aussieht: Code: [AUSKLAPPEN] If Spielfeld(F_x,F_y) = 2 Then
; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = Spielfeld(F_x,F_y) And Spielfeld(F_x,F_y+2) = Spielfeld(F_x,F_y) Then auch so machen: Code: [AUSKLAPPEN] If Spielfeld(F_x,F_y) = 2 Then
; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = 2 Then If Spielfeld(F_x,F_y+2) = 2 Then Kommt auf das selbe hinaus... |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
UPS, sry bei meinem Code habe ich es geändert und hab es vergessen hier zu edítieren.
So siehts bei mir aus: Code: [AUSKLAPPEN] For F_y=0 To 13
For F_x=0 To 13 If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = Spielfeld(F_x,F_y) And Spielfeld(F_x,F_y+2) = Spielfeld(F_x,F_y) Then Spielfeld(F_x,F_y) = 1 Spielfeld(F_x,F_y+1) = 1 Spielfeld(F_x,F_y+2) = 1 EndIf EndIf Next Next jetzt will ich aber ohne weiter if anweisungen auch mehr als 3 gleiche Felder prüfen. EDIT: @hectic das wäre so umständlich zu machen wie du es meinst, weil ich dann für jedes Feld eine If anweisung schreiben müsste um gleiche paare zu vergleichen. Code: [AUSKLAPPEN] ;FRAME 2
If Spielfeld(F_x,F_y) = 2 Then ; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = 2 Then If Spielfeld(F_x,F_y+2) = 2 Then ;FRAME 3 If Spielfeld(F_x,F_y) = 3 Then ; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = 3 Then If Spielfeld(F_x,F_y+2) = 3 Then ;FRAME 4 If Spielfeld(F_x,F_y) = 4 Then ; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = 4 Then If Spielfeld(F_x,F_y+2) = 4 Then ;FRAME 5 If Spielfeld(F_x,F_y) = 5 Then ; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = 5 Then If Spielfeld(F_x,F_y+2) = 5 Then ;FRAME 6 If Spielfeld(F_x,F_y) = 6 Then ; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = 6 Then If Spielfeld(F_x,F_y+2) = 6 Then deshalb habe ich das oben anders gemacht. MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
coldie |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mit For kannst du es so machen:
Code: [AUSKLAPPEN] For framenr =2 to 6 If Spielfeld(F_x,F_y) = framenr Then ; If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = framenr Then If Spielfeld(F_x,F_y+2) = framenr Then next Bringt aber nur was für die Übersichtlichkeit. Es wird trotzdem 5x eine If-Abfrage ausgeführt. |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja danke dir, aber ich hab das doch so ähnlich, ich wollte was anderes machen, also das es auch mehr als 3 gleiche paare prüft.
z.B. 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1112221111 des sind 3 gleiche Paare mit der Frame NR: 2. aber was ist wenn mehr als 3 Paare vorhanden sind? 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1122222111 so z.B. Ich möchte das mit wenigen aufwand machen, ohne X if befehlen in meinem Code verwenden zu müssen. Ich mach das einfach mal anders, dürfte ja nicht schwer sein das noch mit einer schleife zu realisieren^^ MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
moin,
meinst vieleicht einfach so? Code: [AUSKLAPPEN] For F_y=0 To 13
For F_x=0 To 13 If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x,F_y+1) = Spielfeld(F_x,F_y) And Spielfeld(F_x,F_y+2) = Spielfeld(F_x,F_y) Then bla = 0 Repeat Spielfeld(F_x,F_y+bla) = 1 bla = bla +1 Until Spielfeld(F_x,F_y+bla)<2 EndIf EndIf Next Next |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank @Rone, genau das habe ich gebraucht.
Hab das grad für die X Kordinate umgeschrieben, weil es ja kaum möglich ist das man bei der Y Kordinate mehr wie 3 gleiche paare bekommt. Code: [AUSKLAPPEN] If Spielfeld(F_x,F_y) > 1 Then
If Spielfeld(F_x+1,F_y) = Spielfeld(F_x,F_y) And Spielfeld(F_x+2,F_y) = Spielfeld(F_x,F_y) Then bla = 0 Repeat Spielfeld(F_x+bla,F_y) = 1 bla = bla +1 Until Spielfeld(F_x+bla,F_y)<2 EndIf EndIf also funktioniert sehr gut, vielen dank. EDIT:Ich hab da noch ein kleines problem und zwar soll die Schleife abrechen, wenn es kein gleiche Frame mehr gefunden hat. Ich hab das so proboert: Code: [AUSKLAPPEN] bla = 0
Repeat Spielfeld(F_x+bla,F_y) = 1 bla = bla +1 Until Spielfeld(F_x+bla,F_y)<Spielfeld(F_x,F_y) Or Spielfeld(F_x+bla,F_y)>Spielfeld(F_x,F_y) aber dann wird nur das erste gelöscht und die schleife wird dann gleich abgeprochen. Ich hab das so geändert, weil der Code wo du mir gepostet hast, die ganze reihe löscht, also wenn mehr als 3 gleiche Frames vorhanden sind, dann wird die ganze reihe gelöscht. Muss ich es vieleicht anders machen? MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
moin,
nein, der code von mir löscht eigendlich nicht die ganze reihe... die schleife wird beendet wenn kein wert >1 mehr folgt( until Spielfeld(F_x+bla,F_y)<2 ) wenn zum Beispiel 4 zweier in einer reihe sind, dann werden auch nur diese 4 werte auf eins gesetzt...kanns jetzt grad nicht testen, weil ich auf der arbeit bin, aber sollte so gehn... mfg |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, Du hast recht, die Schleife geht solang und wird abgeprochen wenns kleine wie 2 ist, das habe ich ja auch gemeint.
Ich meinte das so, wenn ich 3 gleiche Frames unten habe und neben dran ist ein anderer Frame, sagen wir mal eine 3, dann wird diese mit gelöscht, deshalb habe ich ganze reihe gesagt. Ich versuchs einfach nochmal des ein bisschen umzuschreiben, wenn ich es dann noch net hinbekommen sollte, dann schreibe ich nochmal hier rein. EDIT:Wenn ich es so mache, also die Frame Nr überprüfe, dann geht es: Code: [AUSKLAPPEN] If Spielfeld(F_x,F_y) > 1 Then
If Spielfeld(F_x,F_y) = 2 Then If Spielfeld(F_x+1,F_y) = 2 And Spielfeld(F_x+2,F_y) = 2 Then bla = 0 Repeat Spielfeld(F_x+bla,F_y) = 1 bla = bla +1 Until Spielfeld(F_x+bla,F_y)>2 Or Spielfeld(F_x+bla,F_y)<2 EndIf EndIf EndIf Dann werde ich es halt für jede Frame Nr eine abfrage machen, bis ich eine andere lösung finde. Und danke dir für die hilfe. MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
warum nicht einfach so?
Code: [AUSKLAPPEN] For F_y=0 To 13
For F_x=0 To 13 If Spielfeld(F_x,F_y) > 1 Then If Spielfeld(F_x+1,F_y) = Spielfeld(F_x,F_y) And Spielfeld(F_x+2,F_y) = Spielfeld(F_x,F_y) Then bla = 1 While Spielfeld(F_x+bla,F_y)=Spielfeld(F_x,F_y) Spielfeld(F_x+bla,F_y) = 1 bla = bla +1 Wend Spielfeld(F_x,F_y) = 1 EndIf EndIf Next Next Edit: eieiei...ne doch nicht Edit: jetzt aber... |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sieht schon viel besser aus, darauf hätte ich ja auch selber drauf kommen können.
Vielen dank, Du hast mir sehr weitergeholfen. MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group