Felder Prüfen auf gleiche Zahlen, bei Sudoku Spiel?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Felder Prüfen auf gleiche Zahlen, bei Sudoku Spiel?

BeitragFr, Jan 16, 2009 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich brauche mal eure Hilfe bei meinem Sudoku Spiel und zwar, möchte ich Überprüfen ob noch irgendwas zu setzen ist, dazu habe ich mir mal eine Funktion geschrieben:

Code: [AUSKLAPPEN]
Function CheckNum:Int()
  Local ZaehlerX:Int = 0
  Local ZaehlerY:Int = 0
  Local Doppelt:Int
  Local Zahl:Int

  For Local FX:Int=0 Until feld_x
    For Local FY:Int=0 Until feld_y
      If SpielFeld[FX,FY].Wert = 0 Then
        Doppelt = 0
        For Local Zahl:Int=1 To 9
          Local FX2 = FX/3
          Local FY2 = FY/3
          '9 Kästchen Prüfen auf gleiche Zahl "Horizontal"
          While ZaehlerX < 9
            If SpielFeld[ZaehlerX,FY].Wert = Zahl Then
              Doppelt = 1
              Exit
            EndIf
            ZaehlerX = ZaehlerX + 1
          Wend

          '9 Kästchen Prüfen auf gleiche Zahl "Vertikal"
          While ZaehlerY < 9
            If SpielFeld[FX,ZaehlerY].Wert = Zahl Then
              Doppelt = 1
              Exit
            EndIf
            ZaehlerY = ZaehlerY + 1
          Wend

          'Die 9 Felder prüfen auf die gleiche Zahl
          '[][][]
          '[][][]
          '[][][]
          For Local x=FX2*3 To FX2*3+2
            For Local y=FY2*3 To FY2*3+2
              If SpielFeld[x,y].Wert = Zahl Then
                Doppelt = 1
                Exit
              EndIf
            Next
          Next
        Next
      EndIf
    Next
  Next

  If Doppelt = 1 Then Return 0
  Return 1
End Function


Code: [AUSKLAPPEN]
If CheckNum() Then
  DrawText "Kein Zug mehr möglich!",455,320
Else
  DrawText "Zug möglich.",455,320
EndIf


Ich versuche schon 2 Tage das hinzubekommen, leider klappt das nicht korrekt.

Die Schleifen laufen nicht so wie sie laufen sollen etc.

Wie könnte ich mein Problem ambesten lösen?

Ich bedanke mich schonmal im Voraus.

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

bruce85

BeitragSa, Jan 17, 2009 2:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nochmal,
Hier ist mal meine Funktion um zu Prüfen ob man die gewünschte Zahl an dieser Position ablegen kann:
Code: [AUSKLAPPEN]
Function Check:Int(Zahl:Int,FX:Int,FY:Int)
  Local FX2 = FX/3
  Local FY2 = FY/3
  Local ZaehlerX:Int = 0
  Local ZaehlerY:Int = 0
  Local Doppelt:Int
  '9 Kästchen Prüfen auf gleiche Zahl "Horizontal"
  While ZaehlerX < 9
    If SpielFeld[ZaehlerX,FY].Wert = Zahl Then
      Doppelt = 1
    EndIf
    ZaehlerX = ZaehlerX + 1
  Wend

  '9 Kästchen Prüfen auf gleiche Zahl "Vertikal"
  While ZaehlerY < 9
    If SpielFeld[FX,ZaehlerY].Wert = Zahl Then
      Doppelt = 1
    EndIf
    ZaehlerY = ZaehlerY + 1
  Wend

  'Die 9 Felder Prüfen auf die gleiche Zahl
  '[][][]
  '[][][]
  '[][][]
  For Local x=FX2*3 To FX2*3+2
    For Local y=FY2*3 To FY2*3+2
      If SpielFeld[x,y].Wert = Zahl Then
        Doppelt = 1
      EndIf
    Next
  Next

  If Doppelt = 1 Then Return 0
  Return 1 'Zahl kann abgelegt werden
End Function


Das funktioniert jedoch ohne Probleme.

Was mich wundert, ist, das die Funktion um zu Prüfen ob noch was gelegt werden kann, nicht korrekt in BM funktioniert.

Hat jemand vieleicht eine Idee wie ich das ambesten lösen kann?

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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group