Ein kleines problem(Nachbarfelder auf gleiche Zahl prüfen)!?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Ein kleines problem(Nachbarfelder auf gleiche Zahl prüfen)!?

BeitragDo, März 13, 2008 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe ein kleines Sudoku Spiel geschrieben und habe nur ein kleines Problem.
Alles funktioniert soweit, also die Nachbarfelder zu prüfen auf gleiche Zahlen, nur wenn die letzte Zahl also 9 geprüft wird, dann bekomme ich ein solches ergebnis:
http://www.qpic.ws/viewimage.p...G32494.png

Hier ist mal der komplette Code:
Code: [AUSKLAPPEN]
Graphics 1024,768,16,2
SetBuffer BackBuffer()

AppTitle "Sudoku Grundgerüst"

Global Schrift = LoadFont("Arial",26,1,0,0)

Dim Spielfeld(8,8)

;Daten lesen
Restore map_data
For y=0 To 8
  For x=0 To 8
    Read Spielfeld(x,y)
  Next
Next

Global Zahl%
Global Eingabe
Global Merk_x,Merk_y

ClsColor 147,188,255
Repeat
  Cls

  SetFont Schrift

  CheckNum()

  For y=0 To 8
    For x=0 To 8
      map = Spielfeld(x,y)
      ;Wenn Eingabe = False, dann kann ein entsprechendes Feld ausgewählt werden
      If Eingabe = False Then
        ;Maus berechnungen für die Felder
        If MouseX() > 324+x*40+(x/1)*2 And MouseX() < 324+x*40+(x/1)*2+40 Then
          If MouseY() > 194+y*40+(y/1)*2 And MouseY() < 194+y*40+(y/1)*2+40 Then
            If map < 10 Then
              Color 0,188,255
              ;Das Feld markieren/zeichnen, wo sich die Maus befindet
              Rect 325+x*40+(x/1)*2,195+y*40+(y/1)*2,38,38,1
              If MouseDown(1) And MouseHit(1) Then
                Merk_x = x : Merk_y = y
                FlushKeys() ;Alle Tastatur eingaben löschen
                Eingabe = True ;Eingabe auf True setzen
              EndIf
            EndIf
          EndIf
        EndIf
      EndIf

      ;Felder zeichnen
      If map >= 0 Then
        Color 0,0,128
        Rect 324+x*40+(x/1)*2,194+y*40+(y/1)*2,40,40,0
      EndIf
      ;Felder zeichnen die nicht geändert werden können
      If map >= 10 Then
        Color 0,128,200
        Rect 325+x*40+(x/1)*2,195+y*40+(y/1)*2,38,38,1
      EndIf

      ;Zahlen zeichnen
      Color 0,0,128
      If map = 1 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"1"
      If map = 2 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"2"
      If map = 3 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"3"
      If map = 4 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"4"
      If map = 5 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"5"
      If map = 6 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"6"
      If map = 7 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"7"
      If map = 8 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"8"
      If map = 9 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"9"
      Color 0,0,0
      If map = 10 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"1"
      If map = 11 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"2"
      If map = 12 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"3"
      If map = 13 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"4"
      If map = 14 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"5"
      If map = 15 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"6"
      If map = 16 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"7"
      If map = 17 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"8"
      If map = 18 Then Text 338+x*40+(x/1)*2,201+y*40+(y/1)*2,"9"
    Next
  Next

  ;Wenn Eingabe = True, dann die Function InputRoutine() aufrufen
  ;und die Position des angeklickte feld anzeigen
  If Eingabe = True Then
    InputRoutine()
    Color 0,222,255
    Rect 325+Merk_x*40+(Merk_x/1)*2,195+Merk_y*40+(Merk_y/1)*2,38,38,1
  EndIf

  Flip
Until KeyHit(1)

End

Function CheckNum()
  ;Alle Felder durchgehen
  For F_y = 0 To 8
    For F_x = 0 To 8
      ;Nur Felder die > 0 sind, prüfen
      If Spielfeld(F_x,F_y) > 0 Then
        ;While Schleife solange laufen lassen, wie F_x+x_zahl < 8 ist, da sonst
        ;eine Fehlermeldung kommt, wenn es außerhalb der Felder geprüft wird
        While F_x+x_zahl < 8
          ;x_zahl um jeweils 1 erhöhen
          x_zahl = x_zahl + 1
          ;Nachbarfelder auf gleiche Zahl prüfen
          If Spielfeld(F_x,F_y) = Spielfeld(F_x+x_zahl,F_y) Or Spielfeld(F_x,F_y)+9 = Spielfeld(F_x+x_zahl,F_y) Or Spielfeld(F_x,F_y) = Spielfeld(F_x+x_zahl,F_y)+9 Then
            Color 200,0,0
            Rect 325+F_x*40+(F_x/1)*2,195+F_y*40+(F_y/1)*2,38,38,1
            Rect 325+(F_x+x_zahl)*40+((F_x+x_zahl)/1)*2,195+F_y*40+(F_y/1)*2,38,38,1
          EndIf
        Wend
        While F_y+y_zahl < 8
          y_zahl = y_zahl + 1
          If Spielfeld(F_x,F_y) = Spielfeld(F_x,F_y+y_zahl) Or Spielfeld(F_x,F_y)+9 = Spielfeld(F_x,F_y+y_zahl) Or Spielfeld(F_x,F_y) = Spielfeld(F_x,F_y+y_zahl)+9 Then
            Color 200,0,0
            Rect 325+F_x*40+(F_x/1)*2,195+F_y*40+(F_y/1)*2,38,38,1
            Rect 325+F_x*40+(F_x/1)*2,195+(F_y+y_zahl)*40+((F_y+y_zahl)/1)*2,38,38,1
          EndIf
        Wend
        x_zahl = 0
        y_zahl = 0
      EndIf
    Next
  Next
End Function

Function InputRoutine()
  b$ = GetKey()
  If b >= 49 And b <= 57 Then ;ASCII Code 49 - 57 abfragen, entspricht die Zahlen (1-9)
    Zahl% = Zahl% + Chr(b) ;ASCII Code in Zahl umwandeln
    Spielfeld(Merk_x,Merk_y) = Zahl% ;Spielfeld diese Zahl zuweisen
    Zahl% = 0 ;Anschließend Zahl% wieder auf 0 setzen für die nächste eingabe
    Eingabe = False ;Eingabe wieder auf False setzen
  EndIf
End Function

.map_data
Data 0,0,14,0,0,16,0,0,0
Data 0,11,0,0,0,0,0,0,18
Data 0,0,18,0,15,0,12,0,0
Data 0,0,0,17,0,0,13,0,0
Data 0,13,0,0,0,10,0,0,14
Data 17,0,12,13,0,15,0,11,0
Data 0,0,0,0,0,0,0,0,15
Data 0,15,0,0,16,0,11,0,0
Data 0,0,17,0,0,0,0,12,0


Das problem liegt hier:
Code: [AUSKLAPPEN]
;Nachbarfelder auf gleiche Zahl prüfen
If Spielfeld(F_x,F_y) = Spielfeld(F_x+x_zahl,F_y) Or Spielfeld(F_x,F_y)+9 = Spielfeld(F_x+x_zahl,F_y) Or Spielfeld(F_x,F_y) = Spielfeld(F_x+x_zahl,F_y)+9 Then
  Color 200,0,0
  Rect 325+F_x*40+(F_x/1)*2,195+F_y*40+(F_y/1)*2,38,38,1
  Rect 325+(F_x+x_zahl)*40+((F_x+x_zahl)/1)*2,195+F_y*40+(F_y/1)*2,38,38,1
EndIf


Wenn ich in der If anweisung das hier:
Code: [AUSKLAPPEN]
Spielfeld(F_x,F_y) = Spielfeld(F_x+x_zahl,F_y)+9


entferne, dann funktioniert das, aber ich brauche diese berechnung um die fehlers im Feld zu Markieren.

Hat jemand eine ahnung was ich falsch gemacht habe?

Ich bedanke mich schonmal im Voraus.

[EDIT] Hat sich erledigt, war nur ein kleiner fehler im Code.

MfG
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