TizzyT

Some Sudoku App -TizzyT

Feb 14th, 2015
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 13.22 KB | None | 0 0
  1. Public Class Form1
  2.  
  3.     Private SelectedCell As Cell
  4.     Private Generator As New SudokuGen
  5.     Private Playing As Boolean = False
  6.     Private Rnd As New Random
  7.     Private CrntView As Byte = 0
  8.  
  9.     Private Sub AboutToolMenu(sender As Object, e As EventArgs) Handles AboutToolStripMenuItem.Click
  10.         MsgBox("SudokuGame v1.0 by TizzyT" & vbCrLf & "Built Feb 14, 2015. Freeware")
  11.     End Sub
  12.  
  13.     Private Sub D1_Click(sender As Button, e As MouseEventArgs) Handles _
  14.         D1.MouseDown, D2.MouseDown, D3.MouseDown, _
  15.         D4.MouseDown, D5.MouseDown, D6.MouseDown, _
  16.         D7.MouseDown, D8.MouseDown, D9.MouseDown
  17.         If e.Button = Windows.Forms.MouseButtons.Left Then
  18.             If SelectedCell IsNot Nothing Then SelectedCell.Text = sender.Text
  19.             Dim correct = 0
  20.             For Each c As Cell In Board.Controls
  21.                 If c.Value = c.Text Then correct += 1
  22.             Next
  23.             If correct = 81 Then
  24.                 For Each c As Cell In Board.Controls
  25.                     c.BackColor = Color.Beige
  26.                     c.Enabled = False
  27.                 Next
  28.                 Me.Text &= " (Solved)"
  29.             End If
  30.             ToggleView(0)
  31.         ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
  32.             ToggleView(0)
  33.             SelectedCell = Nothing
  34.         End If
  35.     End Sub
  36.  
  37.     Private Sub Cell_Click(sender As Cell, e As MouseEventArgs) Handles _
  38.         C1.MouseDown, C2.MouseDown, C3.MouseDown, _
  39.         C4.MouseDown, C5.MouseDown, C6.MouseDown, _
  40.         C7.MouseDown, C8.MouseDown, C9.MouseDown, _
  41.         C10.MouseDown, C11.MouseDown, C12.MouseDown, _
  42.         C13.MouseDown, C14.MouseDown, C15.MouseDown, _
  43.         C16.MouseDown, C17.MouseDown, C18.MouseDown, _
  44.         C19.MouseDown, C20.MouseDown, C21.MouseDown, _
  45.         C22.MouseDown, C23.MouseDown, C24.MouseDown, _
  46.         C25.MouseDown, C26.MouseDown, C27.MouseDown, _
  47.         C28.MouseDown, C29.MouseDown, C30.MouseDown, _
  48.         C31.MouseDown, C32.MouseDown, C33.MouseDown, _
  49.         C34.MouseDown, C35.MouseDown, C36.MouseDown, _
  50.         C37.MouseDown, C38.MouseDown, C39.MouseDown, _
  51.         C40.MouseDown, C41.MouseDown, C42.MouseDown, _
  52.         C43.MouseDown, C44.MouseDown, C45.MouseDown, _
  53.         C46.MouseDown, C47.MouseDown, C48.MouseDown, _
  54.         C49.MouseDown, C50.MouseDown, C51.MouseDown, _
  55.         C52.MouseDown, C53.MouseDown, C54.MouseDown, _
  56.         C55.MouseDown, C56.MouseDown, C57.MouseDown, _
  57.         C58.MouseDown, C59.MouseDown, C60.MouseDown, _
  58.         C61.MouseDown, C62.MouseDown, C63.MouseDown, _
  59.         C64.MouseDown, C65.MouseDown, C66.MouseDown, _
  60.         C67.MouseDown, C68.MouseDown, C69.MouseDown, _
  61.         C70.MouseDown, C71.MouseDown, C72.MouseDown, _
  62.         C73.MouseDown, C74.MouseDown, C75.MouseDown, _
  63.         C76.MouseDown, C77.MouseDown, C78.MouseDown, _
  64.         C79.MouseDown, C80.MouseDown, C81.MouseDown
  65.         If e.Button = Windows.Forms.MouseButtons.Left Then
  66.             SelectedCell = sender
  67.             ToggleView(1)
  68.         ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
  69.             sender.Text = String.Empty
  70.         End If
  71.     End Sub
  72.  
  73.     'Bring into view desired menu and move rest out of the way
  74.     Private Sub ToggleView(ByVal view As Byte)
  75.         Select Case view
  76.             Case 0 'Board
  77.                 Board.Left = 0
  78.                 InputPad.Left = 517
  79.                 NewGameMenu.Left = 517
  80.             Case 1 'Pad
  81.                 InputPad.Left = 0
  82.                 NewGameMenu.Left = 517
  83.                 Board.Left = 517
  84.             Case 2 'NewGame Menu
  85.                 NewGameMenu.Left = 0
  86.                 InputPad.Left = 517
  87.                 Board.Left = 517
  88.         End Select
  89.     End Sub
  90.  
  91.     Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
  92.         If Playing Then
  93.             Dim r As MsgBoxResult = MsgBox("Save the current game?", MsgBoxStyle.YesNoCancel)
  94.             If r = MsgBoxResult.Yes Then
  95.                 If Not SaveGame() Then
  96.                     MsgBox("Game save failed")
  97.                     Exit Sub
  98.                 End If
  99.             ElseIf r = MsgBoxResult.No Then
  100.                 Exit Sub
  101.             ElseIf r = MsgBoxResult.Cancel Then
  102.                 e.Cancel = True
  103.                 Exit Sub
  104.             End If
  105.             Me.Close()
  106.         End If
  107.     End Sub
  108.  
  109.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  110.         Me.Width = 532 'resize window to hid other menus
  111.     End Sub
  112.  
  113. #Region "Save/Load"
  114.     Private Function SaveGame() As Boolean
  115.         Try
  116.             Dim saving As New TBitArray(404)
  117.             Dim temp As New List(Of Boolean)
  118.             For i = 1 To 81
  119.                 Dim c As Cell = Board.Controls("C" & i)
  120.                 Select Case c.Text
  121.                     Case "" : temp.AddRange({False, True, False, False, True})
  122.                     Case "1" : If c.Given Then temp.AddRange({False, True, False, False, False}) Else _
  123.                         temp.AddRange({False, True, False, True, False})
  124.                     Case "2" : If c.Given Then temp.AddRange({False, False, True, True, True}) Else _
  125.                         temp.AddRange({False, True, False, True, True})
  126.                     Case "3" : If c.Given Then temp.AddRange({False, False, True, True, False}) Else _
  127.                         temp.AddRange({False, True, True, False, False})
  128.                     Case "4" : If c.Given Then temp.AddRange({False, False, True, False, True}) Else _
  129.                         temp.AddRange({False, True, True, False, True})
  130.                     Case "5" : If c.Given Then temp.AddRange({False, False, True, False, False}) Else _
  131.                         temp.AddRange({False, True, True, True, False})
  132.                     Case "6" : If c.Given Then temp.AddRange({False, False, False, True, True}) Else _
  133.                         temp.AddRange({False, True, True, True, True})
  134.                     Case "7" : If c.Given Then temp.AddRange({False, False, False, True, False}) Else _
  135.                         temp.AddRange({True, False, False, False, False})
  136.                     Case "8" : If c.Given Then temp.AddRange({False, False, False, False, True}) Else _
  137.                         temp.AddRange({True, False, False, False, True})
  138.                     Case "9" : If c.Given Then temp.AddRange({False, False, False, False, False}) Else _
  139.                         temp.AddRange({True, False, False, True, False})
  140.                 End Select
  141.             Next
  142.             For i = 0 To saving.Length - 1 : saving(i) = temp(i) : Next
  143.             Dim psh As String = Date.Now.ToString.Replace("/", "_").Replace(":", "_")
  144.             Dim dir As String = Application.StartupPath & "\Saved Games\"
  145.             If Not IO.Directory.Exists(dir) Then IO.Directory.CreateDirectory(dir)
  146.             IO.File.WriteAllBytes(dir & psh & ".sdk", saving.ToArray)
  147.             Return True
  148.         Catch ex As Exception
  149.             MsgBox(ex.Message)
  150.         End Try
  151.         Return False
  152.     End Function
  153.  
  154.     Public Function LoadGame(ByVal Location As String) As Boolean
  155.         Try
  156.             Dim loaded As New TBitArray(IO.File.ReadAllBytes(Location))
  157.             Dim temp As New List(Of Byte)
  158.             For i = 0 To (5 * 81) - 1 Step 5
  159.                 Dim value As Byte = 0
  160.                 If loaded(i) = True Then value += 16
  161.                 If loaded(i + 1) = True Then value += 8
  162.                 If loaded(i + 2) = True Then value += 4
  163.                 If loaded(i + 3) = True Then value += 2
  164.                 If loaded(i + 4) = True Then value += 1
  165.                 temp.Add(value)
  166.             Next
  167.             ResetBoard()
  168.             For i = 1 To 81
  169.                 Dim c As Cell = Board.Controls("C" & i)
  170.                 Select Case temp(i - 1)
  171.                     Case 0 : c.Value = 9 : c.Given = True
  172.                     Case 1 : c.Value = 8 : c.Given = True
  173.                     Case 2 : c.Value = 7 : c.Given = True
  174.                     Case 3 : c.Value = 6 : c.Given = True
  175.                     Case 4 : c.Value = 5 : c.Given = True
  176.                     Case 5 : c.Value = 4 : c.Given = True
  177.                     Case 6 : c.Value = 3 : c.Given = True
  178.                     Case 7 : c.Value = 2 : c.Given = True
  179.                     Case 8 : c.Value = 1 : c.Given = True
  180.                     Case 9 : c.Value = 0 : c.Given = False : c.Text = ""
  181.                     Case 10 : c.Value = 1 : c.Given = False : c.Text = "1"
  182.                     Case 11 : c.Value = 2 : c.Given = False : c.Text = "2"
  183.                     Case 12 : c.Value = 3 : c.Given = False : c.Text = "3"
  184.                     Case 13 : c.Value = 4 : c.Given = False : c.Text = "4"
  185.                     Case 14 : c.Value = 5 : c.Given = False : c.Text = "5"
  186.                     Case 15 : c.Value = 6 : c.Given = False : c.Text = "6"
  187.                     Case 16 : c.Value = 7 : c.Given = False : c.Text = "7"
  188.                     Case 17 : c.Value = 8 : c.Given = False : c.Text = "8"
  189.                     Case 18 : c.Value = 9 : c.Given = False : c.Text = "9"
  190.                 End Select
  191.             Next
  192.             Return True
  193.         Catch ex As Exception
  194.             MsgBox(ex.Message)
  195.         End Try
  196.         Return False
  197.     End Function
  198. #End Region
  199.  
  200.     Public Sub ResetBoard()
  201.         For Each c As Cell In Board.Controls
  202.             c.Value = 0
  203.             c.Text = ""
  204.             c.Given = False
  205.         Next
  206.     End Sub
  207.  
  208.     Private Sub NewGameMenuClick(sender As Object, e As EventArgs) Handles _
  209.         NewGameToolStripMenuItem.Click
  210.         If Playing Then
  211.             Dim r As MsgBoxResult = MsgBox("Save the current game?", MsgBoxStyle.YesNoCancel)
  212.             If r = MsgBoxResult.Yes Then
  213.                 If Not SaveGame() Then
  214.                     MsgBox("Game save failed")
  215.                     Exit Sub
  216.                 End If
  217.             ElseIf r = MsgBoxResult.Cancel Then
  218.                 Exit Sub
  219.             End If
  220.             ResetBoard()
  221.         End If
  222.         ToggleView(2)
  223.     End Sub
  224.  
  225.     Private Sub generateNewGame(ByVal Difficulty As Byte)
  226.         ResetBoard()
  227.         Dim CrntBoard(80) As Byte, Givens(80) As Boolean, range As Byte = 0
  228.         CrntBoard = Generator.Generate
  229.         For i = 1 To 81
  230.             Dim meh As Cell = Board.Controls("C" & i)
  231.             meh.Value = CrntBoard(i - 1)
  232.         Next
  233.         Select Case Difficulty
  234.             Case 0 : range = Rnd.Next(56, 71) : Me.Text = "Sudoku Game - Extremely Easy" 'Extremely Easy
  235.             Case 1 : range = Rnd.Next(51, 56) : Me.Text = "Sudoku Game - Very Easy" 'Very Easy
  236.             Case 2 : range = Rnd.Next(36, 51) : Me.Text = "Sudoku Game - Easy" 'Easy
  237.             Case 3 : range = Rnd.Next(31, 36) : Me.Text = "Sudoku Game - Medium" 'Medium
  238.             Case 4 : range = Rnd.Next(27, 31) : Me.Text = "Sudoku Game - Hard" 'Hard
  239.             Case 5 : range = Rnd.Next(22, 27) : Me.Text = "Sudoku Game - Very Hard" 'Very Hard
  240.             Case 6 : range = Rnd.Next(17, 22) : Me.Text = "Sudoku Game - Extremely Hard" 'Extremely Hard
  241.         End Select
  242.         For i = 0 To 80 'Set Givens
  243.             If i < range Then Givens(i) = True Else Givens(i) = False
  244.         Next
  245.         range = 0
  246.         For i = 1 To 81 * 9 'Randomize Givens
  247.             Dim prv As Byte = Rnd.Next(0, 81)
  248.             Dim state1 As Boolean = Givens(prv)
  249.             Givens(prv) = Givens(0)
  250.             Givens(0) = state1
  251.         Next
  252.         For Each c As Cell In Board.Controls 'Set Given States
  253.             c.BackColor = Color.White
  254.             If Givens(range) Then c.Given = True Else c.Enabled = True
  255.             range += 1
  256.         Next
  257.         ToggleView(0)
  258.         Playing = True
  259.         SaveGameToolStripMenuItem1.Enabled = True
  260.     End Sub
  261.  
  262.     Private Sub SaveGameMenu(sender As Object, e As EventArgs) Handles SaveGameToolStripMenuItem1.Click
  263.         SaveGame()
  264.     End Sub
  265.  
  266.     Private Sub LoadGameMenu(sender As Object, e As EventArgs) Handles LoadGameToolStripMenuItem1.Click
  267.         Dim meh As New OpenFileDialog
  268.         Dim dir As String = Application.StartupPath & "\Saved Games\"
  269.         If Not IO.Directory.Exists(dir) Then IO.Directory.CreateDirectory(dir)
  270.         meh.InitialDirectory = dir
  271.         Dim loading As DialogResult = meh.ShowDialog()
  272.         If loading = Windows.Forms.DialogResult.OK Then LoadGame(meh.FileName)
  273.         SaveGameToolStripMenuItem1.Enabled = True
  274.     End Sub
  275.  
  276. #Region "Difficulty Buttons"
  277.     Private Sub Dif0_Click(sender As Object, e As EventArgs) Handles Dif0.Click
  278.         generateNewGame(0)
  279.     End Sub
  280.     Private Sub Dif1_Click(sender As Object, e As EventArgs) Handles Dif1.Click
  281.         generateNewGame(1)
  282.     End Sub
  283.     Private Sub Dif2_Click(sender As Object, e As EventArgs) Handles Dif2.Click
  284.         generateNewGame(2)
  285.     End Sub
  286.     Private Sub Dif3_Click(sender As Object, e As EventArgs) Handles Dif3.Click
  287.         generateNewGame(3)
  288.     End Sub
  289.     Private Sub Dif4_Click(sender As Object, e As EventArgs) Handles Dif4.Click
  290.         generateNewGame(4)
  291.     End Sub
  292.     Private Sub Dif5_Click(sender As Object, e As EventArgs) Handles Dif5.Click
  293.         generateNewGame(5)
  294.     End Sub
  295.     Private Sub Dif6_Click(sender As Object, e As EventArgs) Handles Dif6.Click
  296.         generateNewGame(6)
  297.     End Sub
  298. #End Region
  299.  
  300. End Class
Advertisement
Add Comment
Please, Sign In to add comment