Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Class Form1
- Private SelectedCell As Cell
- Private Generator As New SudokuGen
- Private Playing As Boolean = False
- Private Rnd As New Random
- Private CrntView As Byte = 0
- Private Sub AboutToolMenu(sender As Object, e As EventArgs) Handles AboutToolStripMenuItem.Click
- MsgBox("SudokuGame v1.0 by TizzyT" & vbCrLf & "Built Feb 14, 2015. Freeware")
- End Sub
- Private Sub D1_Click(sender As Button, e As MouseEventArgs) Handles _
- D1.MouseDown, D2.MouseDown, D3.MouseDown, _
- D4.MouseDown, D5.MouseDown, D6.MouseDown, _
- D7.MouseDown, D8.MouseDown, D9.MouseDown
- If e.Button = Windows.Forms.MouseButtons.Left Then
- If SelectedCell IsNot Nothing Then SelectedCell.Text = sender.Text
- Dim correct = 0
- For Each c As Cell In Board.Controls
- If c.Value = c.Text Then correct += 1
- Next
- If correct = 81 Then
- For Each c As Cell In Board.Controls
- c.BackColor = Color.Beige
- c.Enabled = False
- Next
- Me.Text &= " (Solved)"
- End If
- ToggleView(0)
- ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
- ToggleView(0)
- SelectedCell = Nothing
- End If
- End Sub
- Private Sub Cell_Click(sender As Cell, e As MouseEventArgs) Handles _
- C1.MouseDown, C2.MouseDown, C3.MouseDown, _
- C4.MouseDown, C5.MouseDown, C6.MouseDown, _
- C7.MouseDown, C8.MouseDown, C9.MouseDown, _
- C10.MouseDown, C11.MouseDown, C12.MouseDown, _
- C13.MouseDown, C14.MouseDown, C15.MouseDown, _
- C16.MouseDown, C17.MouseDown, C18.MouseDown, _
- C19.MouseDown, C20.MouseDown, C21.MouseDown, _
- C22.MouseDown, C23.MouseDown, C24.MouseDown, _
- C25.MouseDown, C26.MouseDown, C27.MouseDown, _
- C28.MouseDown, C29.MouseDown, C30.MouseDown, _
- C31.MouseDown, C32.MouseDown, C33.MouseDown, _
- C34.MouseDown, C35.MouseDown, C36.MouseDown, _
- C37.MouseDown, C38.MouseDown, C39.MouseDown, _
- C40.MouseDown, C41.MouseDown, C42.MouseDown, _
- C43.MouseDown, C44.MouseDown, C45.MouseDown, _
- C46.MouseDown, C47.MouseDown, C48.MouseDown, _
- C49.MouseDown, C50.MouseDown, C51.MouseDown, _
- C52.MouseDown, C53.MouseDown, C54.MouseDown, _
- C55.MouseDown, C56.MouseDown, C57.MouseDown, _
- C58.MouseDown, C59.MouseDown, C60.MouseDown, _
- C61.MouseDown, C62.MouseDown, C63.MouseDown, _
- C64.MouseDown, C65.MouseDown, C66.MouseDown, _
- C67.MouseDown, C68.MouseDown, C69.MouseDown, _
- C70.MouseDown, C71.MouseDown, C72.MouseDown, _
- C73.MouseDown, C74.MouseDown, C75.MouseDown, _
- C76.MouseDown, C77.MouseDown, C78.MouseDown, _
- C79.MouseDown, C80.MouseDown, C81.MouseDown
- If e.Button = Windows.Forms.MouseButtons.Left Then
- SelectedCell = sender
- ToggleView(1)
- ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
- sender.Text = String.Empty
- End If
- End Sub
- 'Bring into view desired menu and move rest out of the way
- Private Sub ToggleView(ByVal view As Byte)
- Select Case view
- Case 0 'Board
- Board.Left = 0
- InputPad.Left = 517
- NewGameMenu.Left = 517
- Case 1 'Pad
- InputPad.Left = 0
- NewGameMenu.Left = 517
- Board.Left = 517
- Case 2 'NewGame Menu
- NewGameMenu.Left = 0
- InputPad.Left = 517
- Board.Left = 517
- End Select
- End Sub
- Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
- If Playing Then
- Dim r As MsgBoxResult = MsgBox("Save the current game?", MsgBoxStyle.YesNoCancel)
- If r = MsgBoxResult.Yes Then
- If Not SaveGame() Then
- MsgBox("Game save failed")
- Exit Sub
- End If
- ElseIf r = MsgBoxResult.No Then
- Exit Sub
- ElseIf r = MsgBoxResult.Cancel Then
- e.Cancel = True
- Exit Sub
- End If
- Me.Close()
- End If
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Me.Width = 532 'resize window to hid other menus
- End Sub
- #Region "Save/Load"
- Private Function SaveGame() As Boolean
- Try
- Dim saving As New TBitArray(404)
- Dim temp As New List(Of Boolean)
- For i = 1 To 81
- Dim c As Cell = Board.Controls("C" & i)
- Select Case c.Text
- Case "" : temp.AddRange({False, True, False, False, True})
- Case "1" : If c.Given Then temp.AddRange({False, True, False, False, False}) Else _
- temp.AddRange({False, True, False, True, False})
- Case "2" : If c.Given Then temp.AddRange({False, False, True, True, True}) Else _
- temp.AddRange({False, True, False, True, True})
- Case "3" : If c.Given Then temp.AddRange({False, False, True, True, False}) Else _
- temp.AddRange({False, True, True, False, False})
- Case "4" : If c.Given Then temp.AddRange({False, False, True, False, True}) Else _
- temp.AddRange({False, True, True, False, True})
- Case "5" : If c.Given Then temp.AddRange({False, False, True, False, False}) Else _
- temp.AddRange({False, True, True, True, False})
- Case "6" : If c.Given Then temp.AddRange({False, False, False, True, True}) Else _
- temp.AddRange({False, True, True, True, True})
- Case "7" : If c.Given Then temp.AddRange({False, False, False, True, False}) Else _
- temp.AddRange({True, False, False, False, False})
- Case "8" : If c.Given Then temp.AddRange({False, False, False, False, True}) Else _
- temp.AddRange({True, False, False, False, True})
- Case "9" : If c.Given Then temp.AddRange({False, False, False, False, False}) Else _
- temp.AddRange({True, False, False, True, False})
- End Select
- Next
- For i = 0 To saving.Length - 1 : saving(i) = temp(i) : Next
- Dim psh As String = Date.Now.ToString.Replace("/", "_").Replace(":", "_")
- Dim dir As String = Application.StartupPath & "\Saved Games\"
- If Not IO.Directory.Exists(dir) Then IO.Directory.CreateDirectory(dir)
- IO.File.WriteAllBytes(dir & psh & ".sdk", saving.ToArray)
- Return True
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- Return False
- End Function
- Public Function LoadGame(ByVal Location As String) As Boolean
- Try
- Dim loaded As New TBitArray(IO.File.ReadAllBytes(Location))
- Dim temp As New List(Of Byte)
- For i = 0 To (5 * 81) - 1 Step 5
- Dim value As Byte = 0
- If loaded(i) = True Then value += 16
- If loaded(i + 1) = True Then value += 8
- If loaded(i + 2) = True Then value += 4
- If loaded(i + 3) = True Then value += 2
- If loaded(i + 4) = True Then value += 1
- temp.Add(value)
- Next
- ResetBoard()
- For i = 1 To 81
- Dim c As Cell = Board.Controls("C" & i)
- Select Case temp(i - 1)
- Case 0 : c.Value = 9 : c.Given = True
- Case 1 : c.Value = 8 : c.Given = True
- Case 2 : c.Value = 7 : c.Given = True
- Case 3 : c.Value = 6 : c.Given = True
- Case 4 : c.Value = 5 : c.Given = True
- Case 5 : c.Value = 4 : c.Given = True
- Case 6 : c.Value = 3 : c.Given = True
- Case 7 : c.Value = 2 : c.Given = True
- Case 8 : c.Value = 1 : c.Given = True
- Case 9 : c.Value = 0 : c.Given = False : c.Text = ""
- Case 10 : c.Value = 1 : c.Given = False : c.Text = "1"
- Case 11 : c.Value = 2 : c.Given = False : c.Text = "2"
- Case 12 : c.Value = 3 : c.Given = False : c.Text = "3"
- Case 13 : c.Value = 4 : c.Given = False : c.Text = "4"
- Case 14 : c.Value = 5 : c.Given = False : c.Text = "5"
- Case 15 : c.Value = 6 : c.Given = False : c.Text = "6"
- Case 16 : c.Value = 7 : c.Given = False : c.Text = "7"
- Case 17 : c.Value = 8 : c.Given = False : c.Text = "8"
- Case 18 : c.Value = 9 : c.Given = False : c.Text = "9"
- End Select
- Next
- Return True
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- Return False
- End Function
- #End Region
- Public Sub ResetBoard()
- For Each c As Cell In Board.Controls
- c.Value = 0
- c.Text = ""
- c.Given = False
- Next
- End Sub
- Private Sub NewGameMenuClick(sender As Object, e As EventArgs) Handles _
- NewGameToolStripMenuItem.Click
- If Playing Then
- Dim r As MsgBoxResult = MsgBox("Save the current game?", MsgBoxStyle.YesNoCancel)
- If r = MsgBoxResult.Yes Then
- If Not SaveGame() Then
- MsgBox("Game save failed")
- Exit Sub
- End If
- ElseIf r = MsgBoxResult.Cancel Then
- Exit Sub
- End If
- ResetBoard()
- End If
- ToggleView(2)
- End Sub
- Private Sub generateNewGame(ByVal Difficulty As Byte)
- ResetBoard()
- Dim CrntBoard(80) As Byte, Givens(80) As Boolean, range As Byte = 0
- CrntBoard = Generator.Generate
- For i = 1 To 81
- Dim meh As Cell = Board.Controls("C" & i)
- meh.Value = CrntBoard(i - 1)
- Next
- Select Case Difficulty
- Case 0 : range = Rnd.Next(56, 71) : Me.Text = "Sudoku Game - Extremely Easy" 'Extremely Easy
- Case 1 : range = Rnd.Next(51, 56) : Me.Text = "Sudoku Game - Very Easy" 'Very Easy
- Case 2 : range = Rnd.Next(36, 51) : Me.Text = "Sudoku Game - Easy" 'Easy
- Case 3 : range = Rnd.Next(31, 36) : Me.Text = "Sudoku Game - Medium" 'Medium
- Case 4 : range = Rnd.Next(27, 31) : Me.Text = "Sudoku Game - Hard" 'Hard
- Case 5 : range = Rnd.Next(22, 27) : Me.Text = "Sudoku Game - Very Hard" 'Very Hard
- Case 6 : range = Rnd.Next(17, 22) : Me.Text = "Sudoku Game - Extremely Hard" 'Extremely Hard
- End Select
- For i = 0 To 80 'Set Givens
- If i < range Then Givens(i) = True Else Givens(i) = False
- Next
- range = 0
- For i = 1 To 81 * 9 'Randomize Givens
- Dim prv As Byte = Rnd.Next(0, 81)
- Dim state1 As Boolean = Givens(prv)
- Givens(prv) = Givens(0)
- Givens(0) = state1
- Next
- For Each c As Cell In Board.Controls 'Set Given States
- c.BackColor = Color.White
- If Givens(range) Then c.Given = True Else c.Enabled = True
- range += 1
- Next
- ToggleView(0)
- Playing = True
- SaveGameToolStripMenuItem1.Enabled = True
- End Sub
- Private Sub SaveGameMenu(sender As Object, e As EventArgs) Handles SaveGameToolStripMenuItem1.Click
- SaveGame()
- End Sub
- Private Sub LoadGameMenu(sender As Object, e As EventArgs) Handles LoadGameToolStripMenuItem1.Click
- Dim meh As New OpenFileDialog
- Dim dir As String = Application.StartupPath & "\Saved Games\"
- If Not IO.Directory.Exists(dir) Then IO.Directory.CreateDirectory(dir)
- meh.InitialDirectory = dir
- Dim loading As DialogResult = meh.ShowDialog()
- If loading = Windows.Forms.DialogResult.OK Then LoadGame(meh.FileName)
- SaveGameToolStripMenuItem1.Enabled = True
- End Sub
- #Region "Difficulty Buttons"
- Private Sub Dif0_Click(sender As Object, e As EventArgs) Handles Dif0.Click
- generateNewGame(0)
- End Sub
- Private Sub Dif1_Click(sender As Object, e As EventArgs) Handles Dif1.Click
- generateNewGame(1)
- End Sub
- Private Sub Dif2_Click(sender As Object, e As EventArgs) Handles Dif2.Click
- generateNewGame(2)
- End Sub
- Private Sub Dif3_Click(sender As Object, e As EventArgs) Handles Dif3.Click
- generateNewGame(3)
- End Sub
- Private Sub Dif4_Click(sender As Object, e As EventArgs) Handles Dif4.Click
- generateNewGame(4)
- End Sub
- Private Sub Dif5_Click(sender As Object, e As EventArgs) Handles Dif5.Click
- generateNewGame(5)
- End Sub
- Private Sub Dif6_Click(sender As Object, e As EventArgs) Handles Dif6.Click
- generateNewGame(6)
- End Sub
- #End Region
- End Class
Advertisement
Add Comment
Please, Sign In to add comment