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 |