3 Gleiche Felder mit einem If anweisung prüfen?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: 3 Gleiche Felder mit einem If anweisung prüfen?

BeitragMi, März 07, 2007 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 07, 2007 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 07, 2007 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Wink

MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, März 07, 2007 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 07, 2007 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 07, 2007 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 07, 2007 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 07, 2007 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 08, 2007 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 08, 2007 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 08, 2007 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, März 09, 2007 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, März 09, 2007 2:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group