Sudoku spil Generator

Soduko Spil Generator er et program, der genererer Sudoku spil med valgt besvær og kompleksitet niveauer.

Forklaring

Programmet er stort set udviklet og programmeret på grundlag af Sudoku Solver (findes også her på dette site) og den tilgang er at forsøge at løse en Sudoku uden start værdier, en tom matrix, der er. Programmet bruger derefter logikfunktioner og gæt funktioner for at finde en løsning for Sudoku spil.

Programmet og Excel VBA fil er tilgængelig for download i bunden af denne side, nyder hacking!

Kode


Public Sub Sudoku_Games_Generator ()

Range ("N3: V11"). ClearContents
Range ("C3: K11"). ClearContents
Range ("C14: K22"). ClearContents
Range ("N14: V22"). ClearContents
Range ("C25: K33"). ClearContents
Range ("N25: V33"). ClearContents

»Det array, som indeholder alle data
Dim Sudoku_Games_Generator (9, 9, 40)

For lupar2 = 1 To 6
Erase Sudoku_Games_Generator
»Check_Var kontrol if programmet har skrevet noget nyt til matricen if ikke så gætte programmet gennemføres
Check_Var = False



Call ReadInData (Sudoku_Games_Generator)

Call ReadyOrNot (Sudoku_Games_Generator)
StartAllOver = 0
lups = 0
ER = False
While ER = False
For Row = 1 To 9
For Kolonne = 1 To 9
If Sudoku_Games_Generator (Række, Kolonne, 0) = tom Then
Check_Var = False
"Grundlæggende metoder til at løse Sudoku
Call CheckQ2 (Sudoku_Games_Generator, Række, Kolonne, Check_Var)
Call CheckR2 (Sudoku_Games_Generator, Række, Kolonne, Check_Var)
Call CheckC2 (Sudoku_Games_Generator, Række, Kolonne, Check_Var)
Call CheckQ2IN (Sudoku_Games_Generator, Række, Kolonne, Check_Var)
Call CheckR2IN (Sudoku_Games_Generator, Række, Kolonne, Check_Var)
Call CheckC2IN (Sudoku_Games_Generator, Række, Kolonne, Check_Var)
Call ReadyOrNot (Sudoku_Games_Generator)
End If
Next
Next

»

Genstart = False
»Søger efter fejl if fejlen er fundet under første køre programmet slutter
Call CheckError (Sudoku_Games_Generator, Genstart, start)
If Genstart = True Then
Check_Var = True
Erase Sudoku_Games_Generator
Call ReadInData (Sudoku_Games_Generator)
StartAllOver = StartAllOver + 1
If StartAllOver> 1000 Then
End
End If
If lups = 0 Then
End
End If

End If

If Check_Var = False Then
Call Guess (Sudoku_Games_Generator, Check_Var, StartAllOver)
End If

Call ReadyOrNot (Sudoku_Games_Generator)
Call CheckReady (Sudoku_Games_Generator, ER)
lups = lups + 1
Wend

Call Erase Data (Sudoku_Games_Generator, Range ("N1") .Value)
Call Check_VarData (Sudoku_Games_Generator, Check_Var, lupar2)
Next

End Sub

Public Sub ReadInData (Sudoku_Games_Generator)

For Row = 1 To 9
For Kolonne = 1 To 9
Sudoku_Games_Generator (Række, Kolonne, 11) = tom
Sudoku_Games_Generator (Række, Kolonne, 0) = tom
If Sudoku_Games_Generator (Række, Kolonne, 0) = tom Then
For loops = 1 To 9
Sudoku_Games_Generator (Række, Kolonne, loops) = 1
Next
Else
For loops = 1 To 9
Sudoku_Games_Generator (Række, Kolonne, loops) = 0
Next
End If

If Kolonne <4 Then
If Row <4 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 1
End If
If Row <7 And Row> 3 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 4
End If
If Row> 6 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 7
End If
End If

If Kolonne <7 And Kolonne> 3 Then
If Row <4 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 2
End If
If Row <7 And Row> 3 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 5
End If
If Row> 6 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 8
End If
End If

If Kolonne> 6 Then
If Row <4 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 3
End If
If Row <7 And Row> 3 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 6
End If
If Row> 6 Then
Sudoku_Games_Generator (Række, Kolonne, 10) = 9
End If
End If
Next
Next

End Sub


Public Sub Check_VarData (Sudoku_Games_Generator, Check_Var, lupar2)

If lupar2 = 1 Then
RowPos = 0
ColumnPos = 0
End If

If lupar2 = 2 Then
RowPos = 0
ColumnPos = 11
End If

If lupar2 = 3 Then
RowPos = 11
ColumnPos = 0
End If

If lupar2 = 4 Then
RowPos = 11
ColumnPos = 11
End If

»

If lupar2 = 5 Then
RowPos = 22
ColumnPos = 0
End If

If lupar2 = 6 Then
RowPos = 22
ColumnPos = 11
End If

For Row = 1 To 9
For Kolonne = 1 To 9
If Range ("C3"). Offset (RowPos - 1 + Row, ColumnPos - 1 + Kolonne) .Value = tom Then
If Sudoku_Games_Generator (Række, Kolonne, 0) <> Tom Then
Range ("C3"). Offset (RowPos - 1 + Row, ColumnPos - 1 + Kolonne) .Value = Sudoku_Games_Generator (Række, Kolonne, 0)
Check_Var = True
End If
End If
Next
Next

End Sub

Public Sub ReadyOrNot (Sudoku_Games_Generator)

For Row = 1 To 9
For Kolonne = 1 To 9
For VÄRDE = 1 To 9
If Sudoku_Games_Generator (Række, Kolonne, Varde) = 1 Then
Antal = Antal + 1
värdeTal = VÄRDE
End If
Next
If Antal = 1 Then
Sudoku_Games_Generator (Række, Kolonne, värdeTal) = 0
Sudoku_Games_Generator (Række, Kolonne, 0) = värdeTal
End If
Antal = 0
Next
Next

End Sub


Public Sub CheckQ2 (Sudoku_Games_Generator, Række, Kolonne, Check_Var)

kvadrant = Sudoku_Games_Generator (Række, Kolonne, 10)

For RowT = 1 To 9
For ColumnT = 1 To 9
If Sudoku_Games_Generator (RowT, ColumnT, 10) = kvadrant Then
If Sudoku_Games_Generator (RowT, ColumnT, 0) <> Tom Then
tal = Sudoku_Games_Generator (RowT, ColumnT, 0)
If Sudoku_Games_Generator (Række, Kolonne, tal) = 1 Then
Sudoku_Games_Generator (Række, Kolonne, tal) = 0
Check_Var = True
End If
End If
End If
Next
Next

End Sub


Public Sub CheckR2 (Sudoku_Games_Generator, Række, Kolonne, Check_Var)

For ColumnT = 1 To 9
If Sudoku_Games_Generator (Row, ColumnT, 0) <> Tom Then
värdeTal = Sudoku_Games_Generator (Row, ColumnT, 0)
If Sudoku_Games_Generator (Række, Kolonne, värdeTal) = 1 Then
Sudoku_Games_Generator (Række, Kolonne, värdeTal) = 0
Check_Var = True
End If
End If
Next

End Sub

Public Sub CheckC2 (Sudoku_Games_Generator, Række, Kolonne, Check_Var)

For RowT = 1 To 9
If Sudoku_Games_Generator (RowT, kolonne, 0) <> Tom Then
värdeTal = Sudoku_Games_Generator (RowT, kolonne, 0)
If Sudoku_Games_Generator (Række, Kolonne, värdeTal) = 1 Then
Sudoku_Games_Generator (Række, Kolonne, värdeTal) = 0
Check_Var = True
End If
End If
Next

End Sub



Public Sub CheckQ2IN (Sudoku_Games_Generator, Række, Kolonne, Check_Var)

kvadrant = Sudoku_Games_Generator (Række, Kolonne, 10)

For VÄRDE = 1 To 9
UNIK = True
If Sudoku_Games_Generator (Række, Kolonne, Varde) = 1 Then
For RowT = 1 To 9
For ColumnT = 1 To 9
If Sudoku_Games_Generator (RowT, ColumnT, 10) = kvadrant Then
If Sudoku_Games_Generator (RowT, ColumnT, 0) = VÄRDE Then unik = False
If Sudoku_Games_Generator (RowT, ColumnT, Varde) = 1 Then
If Row = RowT And Kolonne = ColumnT Then
Else
UNIK = False
End If
End If
End If
Next
Next

If unik = True Then
Sudoku_Games_Generator (Række, Kolonne, 0) = VÄRDE
Check_Var = True
For lups = 1 To 9
Sudoku_Games_Generator (Række, Kolonne, lups) = 0
Next
End If
End If
Next

End Sub

»

Public Sub CheckR2IN (Sudoku_Games_Generator, Række, Kolonne, Check_Var)

For VÄRDE = 1 To 9
UNIK = True
If Sudoku_Games_Generator (Række, Kolonne, Varde) = 1 Then
For ColumnT = 1 To 9
If Sudoku_Games_Generator (Row, ColumnT, 0) = VÄRDE Then
UNIK = False
End If
If Sudoku_Games_Generator (Row, ColumnT, Varde) = 1 Then
If ColumnT <> Kolonne Then
UNIK = False
End If
End If
Next
If unik = True Then
Sudoku_Games_Generator (Række, Kolonne, 0) = VÄRDE
Check_Var = True
For lups = 1 To 9
Sudoku_Games_Generator (Række, Kolonne, lups) = 0
Next
End If
End If
Next

End Sub

Public Sub CheckC2IN (Sudoku_Games_Generator, Række, Kolonne, Check_Var)

kvadrant = Sudoku_Games_Generator (Række, Kolonne, 10)

For VÄRDE = 1 To 9
UNIK = True
If Sudoku_Games_Generator (Række, Kolonne, Varde) = 1 Then
For RowT = 1 To 9
If Sudoku_Games_Generator (RowT, kolonne, 0) = VÄRDE Then
UNIK = False
End If
If Sudoku_Games_Generator (RowT, kolonne, Varde) = 1 Then
If RowT <> Row Then
UNIK = False
End If
End If
Next
If unik = True Then



Sudoku_Games_Generator (Række, Kolonne, 0) = VÄRDE
Check_Var = True
For lups = 1 To 9
Sudoku_Games_Generator (Række, Kolonne, lups) = 0
Next
End If
End If
Next

End Sub

Public Sub Guess (Sudoku_Games_Generator, Check_Var, StartAllOver)

»Identificere bedste gæt sted

SlutSumma = 10
For Row = 1 To 9
For Kolonne = 1 To 9
If Sudoku_Games_Generator (Række, Kolonne, 0) = tom Then
For lups = 1 To 9
summa = summa + Sudoku_Games_Generator (Række, Kolonne, lups)
Next
If summa <SlutSumma Then
SlutRow = Row
SlutColumn = Kolonne
SlutSumma = summa
End If
summa = 0
End If
Next
Next

»

If SlutSumma <> 0 Then
»Tilfældigt tal mellem 1 og 9
hittat = False
While hittat = False
Randomize
tal = Int ((9 * Rnd) + 1)
If Sudoku_Games_Generator (SlutRow, SlutColumn, tal) = 1 Then
hittat = True
Sudoku_Games_Generator (SlutRow, SlutColumn, 0) = tal
For lups = 1 To 9
Sudoku_Games_Generator (SlutRow, SlutColumn, lups) = 0
Check_Var = True
Next
End If
Wend
Else
Erase Sudoku_Games_Generator
Check_Var = True
Call ReadInData (Sudoku_Games_Generator)
StartAllOver = StartAllOver + 1
If StartAllOver> 1000 Then
End
End If
End If

End Sub

Public Sub CheckError (Sudoku_Games_Generator, Genstart, start)

Dim R (9)
Dim C (9)

For Værdi = 1 To 9
For Row = 1 To 9
Erase R
For Kolonne = 1 To 9
If Sudoku_Games_Generator (Række, Kolonne, 0) <> 0 Then
R (Sudoku_Games_Generator (Række, Kolonne, 0)) = R (Sudoku_Games_Generator (Række, Kolonne, 0)) + 1
If R (Sudoku_Games_Generator (Række, Kolonne, 0))> 1 Then Genstart = True
End If
Next
Next
For kolonne2 = 1 To 9
Erase C
For RÆKKE2 = 1 To 9
If Sudoku_Games_Generator (RÆKKE2, kolonne2, 0) <> 0 Then
C (Sudoku_Games_Generator (RÆKKE2, kolonne2, 0)) = C (Sudoku_Games_Generator (RÆKKE2, kolonne2, 0)) + 1
If K (Sudoku_Games_Generator (RÆKKE2, kolonne2, 0))> 1 Then Genstart = True
End If
Next
Next
Next

End Sub



Public Sub CheckReady (Sudoku_Games_Generator, ER)

For Row = 1 To 9
For Kolonne = 1 To 9
Summan = Summan + Sudoku_Games_Generator (Række, Kolonne, 0)
If Sudoku_Games_Generator (Række, Kolonne, 0) <> Tom Then
Summan2 = Summan2 + 1
End If
Next
Next

If Summan = 405 And Summan2 = 81 Then
ER = True
End If

End Sub

Public Sub Erase Data (Sudoku_Games_Generator, Erase Nummer)

While runder <> (Erase Antal * 10)
Randomize
Row = Int ((9 * Rnd) + 1)
Randomize
Kolonne = Int ((9 * Rnd) + 1)
If Sudoku_Games_Generator (Række, Kolonne, 0) <> Tom Then
Sudoku_Games_Generator (Række, Kolonne, 0) = tom
runder = runder + 1
End If
Wend

End Sub

Download excel filen!Sudoku_Games_Generator.xls

 

Add your comment

Your name:
Subject:
Comment: