Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/02/2007, 11:55
mfc
 
Fecha de Ingreso: febrero-2007
Mensajes: 33
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Porque Me Salen El Numero 10 En El Sudoku???

gracias por ayudarme aqui te dejo todo el codigo haver si me puedes ayudar a conseguir que no salgan los 10 aqui tienes y si quieres el programa me podrias dar tu direccion de correo y te puedo enviar el programa completo haver si te ira mejor para mirar el posible fallo, gracias de nuevo

codigo completo:
--------------------------------------
Const Gris As Long = &HFFFFFF
Private SolutionShown As Boolean
Private SudokuGrid(81) As Integer
Private SudokuTemp(81) As String
Private SudokuSolution(81) As String
------------------------------------------
Private Sub cmdGenerar_Click()
While Not CreateSudokuGrid()
Wend
lblDone.Visible = False
cmdSolucion.Enabled = True
cmdSolucion.Caption = "Show Solution"
SolutionShown = False
If SolutionShown Then
For i = 1 To 81
Text1(i).Text = SudokuTemp(i)
Next i

Else
For i = 1 To 81
SudokuTemp(i) = Text1(i).Text
Text1(i).Text = SudokuSolution(i)
Next

End If

End Sub
--------------------------------------------
Private Function CreateSudokuGrid() As Boolean
Dim b, i, j, k As Integer
Dim numRand As Integer
Dim ValIsOK(9) As Boolean
Dim valsOK As Integer
valsOK = 0


lblConfiguring.Visible = True
For i = 1 To 81
Text1(i).Text = ""
Text1(i).BackColor = Gris
Text1(i).Visible = False
SudokuSolution(i) = ""

Next i
lblConfiguring.Visible = True
lblConfiguring.Refresh
For i = 1 To 81
If True Then

valsOK = GetValidVals(i, ValIsOK)
If valsOK <= 0 Then
CreateSudokuGrid = False
End If
numRand = Int(Rnd(valsOK)) + 1
k = 0
For j = 1 To 9
If ValIsOK(j) Then
k = k + 1
If k = numRand Then
Exit For
End If
End If
Next j
Text1(i).Text = CStr(j)
Text1(i).BackColor = Gris
End If
Next i
lblConfiguring.Visible = False
For i = 1 To 81
SudokuSolution(i) = Text1(i).Text
numRand = Rnd(CInt(3) + 1) + 1
If numRand > 1 Then
Text1(i).Text = ""
Text1(i).BackColor = Gris
Text1(i).Enabled = True
Else
Text1(i).Enabled = False
End If
Text1(i).Visible = True
Next i
CreateSudokuGrid = True
End Function
---------------------------------------------------
Private Function GetValidVals(ByVal Location As Integer, ByRef ValidVals() As Boolean) As Integer

Dim i, j, k As Integer
Dim row, col As Integer
Dim numStr As String
Dim numOK As Boolean
Dim retVal As Integer

retVal = 0
For i = 1 To 9
numOK = True
numStr = CStr(i)
For j = 1 To 9
k = (Int((Location - 1) / 9) * 9) + j
If Text1(k).Text = numStr Then
numOK = False
Exit For
End If
Next j
If numOK Then
For j = 1 To 9
k = (((Location - 1) Mod 9) + 1) + ((j - 1) * 9)
If Text1(k).Text = numStr Then
numOK = False
Exit For
End If
Next j
End If
If numOK Then
row = Int(Int((Location - 1) / 9) / 3)
col = Int(((Location - 1) Mod 9) / 3)
For j = 1 To 9
k = (((row * Rnd) + Int((j - 1) / 9)) * 9) + (col * 9) + ((j - 1) Mod 3) + 1
If Text1(k).Text = numStr Then
numOK = False
Exit For
End If
Next j
End If
ValidVals(i) = numOK
If numOK Then
retVal = retVal
End If
Next i
GetValidVals = retVal
End Function