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

 

Add your comment

Your name:
Subject:
Comment: