Sudokuspel Generator
Soduko Spel Generator är ett program som genererar Sudoku-spel med valt svårigheter och nivåer komplexitet.
Förklaring Programmet är i grunden utvecklad och programmerad baserat på Sudoku (finns även här på denna webbplats) och strategin är att försöka lösa ett sudoku utan börja värden, en tom matris som är. Programmet använder sedan logiska funktioner och gissa funktioner i syfte att finna en lösning på Sudoku spel.
Programmet och Excel VBA-fil finns att ladda ner längst ner på denna sida, njut hacka!
Kod 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
"Den matris som innehåller alla uppgifter Dim Sudoku_Games_Generator (9, 9, 40)
For lupar2 = 1 To 6 Erase Sudoku_Games_Generator "Check_Var kontroller if programmet har skrivit något nytt att matrisen if inte då gissa programmet körs Check_Var = False
Call ReadInData (Sudoku_Games_Generator)
Call ReadyOrNot (Sudoku_Games_Generator) StartAllOver = 0 lups = 0 ER = False While ER = False For Rad = 1 To 9 For Kolumn = 1 To 9 If Sudoku_Games_Generator (rad, kolumn, 0) = tom Then Check_Var = False "Grundläggande metoder för att lösa Sudoku Call CheckQ2 (Sudoku_Games_Generator, rad, kolumn, Check_Var) Call CheckR2 (Sudoku_Games_Generator, rad, kolumn, Check_Var) Call CheckC2 (Sudoku_Games_Generator, rad, kolumn, Check_Var) Call CheckQ2IN (Sudoku_Games_Generator, rad, kolumn, Check_Var) Call CheckR2IN (Sudoku_Games_Generator, rad, kolumn, Check_Var) Call CheckC2IN (Sudoku_Games_Generator, rad, kolumn, Check_Var) Call ReadyOrNot (Sudoku_Games_Generator) End If Next Next
"
Starta = False "Söker efter fel if felet hittas under första körningen programmet avslutas Call CheckError (Sudoku_Games_Generator, vila, start) If Starta = 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 Gissa (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 Rad = 1 To 9 For Kolumn = 1 To 9 Sudoku_Games_Generator (rad, kolumn 11) = tom Sudoku_Games_Generator (rad, kolumn, 0) = tom If Sudoku_Games_Generator (rad, kolumn, 0) = tom Then For slingor = 1 To 9 Sudoku_Games_Generator (rad, kolumn loopar) = 1 Next Else For slingor = 1 To 9 Sudoku_Games_Generator (rad, kolumn loopar) = 0 Next End If
If Kolumn <4 Then If Row <4 Then Sudoku_Games_Generator (rad, kolumn 10) = 1 End If If Row <7 And Rad> 3 Then Sudoku_Games_Generator (rad, kolumn 10) = 4 End If If Rad> 6 Then Sudoku_Games_Generator (rad, kolumn 10) = 7 End If End If
If kolumn <7 And Kolumn> 3 Then If Row <4 Then Sudoku_Games_Generator (rad, kolumn 10) = 2 End If If Row <7 And Rad> 3 Then Sudoku_Games_Generator (rad, kolumn 10) = 5 End If If Rad> 6 Then Sudoku_Games_Generator (rad, kolumn 10) = 8 End If End If
If Kolumn> 6 Then If Row <4 Then Sudoku_Games_Generator (rad, kolumn 10) = 3 End If If Row <7 And Rad> 3 Then Sudoku_Games_Generator (rad, kolumn 10) = 6 End If If Rad> 6 Then Sudoku_Games_Generator (rad, kolumn 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 Rad = 1 To 9 For Kolumn = 1 To 9 If Range ("C3"). Offset (RowPos - 1 + Row, ColumnPos - 1 + Column) .Value = tom Then If Sudoku_Games_Generator (rad, kolumn, 0) <> tom Then Range ("C3"). Offset (RowPos - 1 + Row, ColumnPos - 1 + Column) .Value = Sudoku_Games_Generator (rad, kolumn, 0) Check_Var = True End If End If Next Next
End Sub
Public Sub ReadyOrNot (Sudoku_Games_Generator)
For Rad = 1 To 9 For Kolumn = 1 To 9 For VÄRDE = 1 To 9 If Sudoku_Games_Generator (rad, kolumn VÄRDE) = 1 Then Antal = Antal + 1 värdeTal = VÄRDE End If Next If Antal = 1 Then Sudoku_Games_Generator (raden, kolumnen värdeTal) = 0 Sudoku_Games_Generator (rad, kolumn, 0) = värdeTal End If Antal = 0 Next Next
End Sub
Public Sub CheckQ2 (Sudoku_Games_Generator, rad, kolumn, Check_Var)
kvadrant = Sudoku_Games_Generator (rad, kolumn 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 (rad, kolumn, tal) = 1 Then Sudoku_Games_Generator (rad, kolumn, tal) = 0 Check_Var = True End If End If End If Next Next
End Sub
Public Sub CheckR2 (Sudoku_Games_Generator, rad, kolumn, 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 (rad, kolumn värdeTal) = 1 Then Sudoku_Games_Generator (rad, kolumn värdeTal) = 0 Check_Var = True End If End If Next
End Sub
Public Sub CheckC2 (Sudoku_Games_Generator, rad, kolumn, Check_Var)
For RowT = 1 To 9 If Sudoku_Games_Generator (RowT, kolumn, 0) <> tom Then värdeTal = Sudoku_Games_Generator (RowT, kolumn, 0) If Sudoku_Games_Generator (rad, kolumn värdeTal) = 1 Then Sudoku_Games_Generator (rad, kolumn, värdeTal) = 0 Check_Var = True End If End If Next
End Sub
Public Sub CheckQ2IN (Sudoku_Games_Generator, rad, kolumn, Check_Var)
kvadrant = Sudoku_Games_Generator (rad, kolumn 10)
For VÄRDE = 1 To 9 Unik = True If Sudoku_Games_Generator (rad, kolumn VÄRDE) = 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, VÄRDE) = 1 Then If Row = RowT And Kolumn = ColumnT Then Else Unik = False End If End If End If Next Next
If Unik = True Then Sudoku_Games_Generator (rad, kolumn, 0) = VÄRDE Check_Var = True For lups = 1 To 9 Sudoku_Games_Generator (rad, kolumn lups) = 0 Next End If End If Next
End Sub " Public Sub CheckR2IN (Sudoku_Games_Generator, rad, kolumn, Check_Var)
For VÄRDE = 1 To 9 Unik = True If Sudoku_Games_Generator (rad, kolumn VÄRDE) = 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, VÄRDE) = 1 Then If ColumnT <> Kolumn Then Unik = False End If End If Next If Unik = True Then Sudoku_Games_Generator (rad, kolumn, 0) = VÄRDE Check_Var = True For lups = 1 To 9 Sudoku_Games_Generator (rad, kolumn lups) = 0 Next End If End If Next
End Sub
Public Sub CheckC2IN (Sudoku_Games_Generator, rad, kolumn, Check_Var)
kvadrant = Sudoku_Games_Generator (rad, kolumn 10)
For VÄRDE = 1 To 9 Unik = True If Sudoku_Games_Generator (rad, kolumn VÄRDE) = 1 Then For RowT = 1 To 9 If Sudoku_Games_Generator (RowT, kolumn, 0) = VÄRDE Then Unik = False End If If Sudoku_Games_Generator (RowT, kolumn, VÄRDE) = 1 Then If RowT <> Rad Then Unik = False End If End If Next If Unik = True Then
Sudoku_Games_Generator (rad, kolumn, 0) = VÄRDE Check_Var = True For lups = 1 To 9 Sudoku_Games_Generator (rad, kolumn lups) = 0 Next End If End If Next
End Sub
Public Sub Gissa (Sudoku_Games_Generator, Check_Var, StartAllOver)
"Identifiera gissa bästa platsen
SlutSumma = 10 For Rad = 1 To 9 For Kolumn = 1 To 9 If Sudoku_Games_Generator (rad, kolumn, 0) = tom Then For lups = 1 To 9 Summa = summa + Sudoku_Games_Generator (rad, kolumn, lups) Next If summa <SlutSumma Then SlutRow = Row SlutColumn = Kolumn SlutSumma = summa End If summa = 0 End If Next Next " If SlutSumma <> 0 Then "Slumptal mellan 1 och 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, vila, start)
Dim R (9) Dim C (9)
For Värde = 1 To 9 For Rad = 1 To 9 Erase R For Kolumn = 1 To 9 If Sudoku_Games_Generator (rad, kolumn, 0) <> 0 Then R (Sudoku_Games_Generator (rad, kolumn, 0)) = R (Sudoku_Games_Generator (rad, kolumn, 0)) + 1 If R (Sudoku_Games_Generator (rad, kolumn, 0))> 1 Then Starta = True End If Next Next For kolumn2 = 1 To 9 Erase C For Row2 = 1 To 9 If Sudoku_Games_Generator (Row2, kolumn2, 0) <> 0 Then C (Sudoku_Games_Generator (Row2, kolumn2, 0)) = C (Sudoku_Games_Generator (Row2, kolumn2, 0)) + 1 If K (Sudoku_Games_Generator (Row2, kolumn2, 0))> 1 Then Starta = True End If Next Next Next
End Sub
Public Sub CheckReady (Sudoku_Games_Generator, ER)
For Rad = 1 To 9 For Kolumn = 1 To 9 Summan = Summan + Sudoku_Games_Generator (rad, kolumn, 0) If Sudoku_Games_Generator (rad, kolumn, 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 Antalet)
While rundor <> (Erase Antalet * 10) Randomize Rad = Int ((9 * RND) + 1) Randomize Kolumn = Int ((9 * RND) + 1) If Sudoku_Games_Generator (rad, kolumn, 0) <> tom Then Sudoku_Games_Generator (rad, kolumn, 0) = tom rundor = rundor + 1 End If Wend
End Sub
Ladda ner Excel-fil!Sudoku_Games_Generator.xls |