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

bruce85Betreff: Ein kleines problem(Nachbarfelder auf gleiche Zahl prüfen)!? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group