Warning - can waste a lot of grey matter!
Introduction
The rules of the game will be immediately obvious to anyone who has done Soduku. Basically, the grid is divided into 16 quadrants, and each row, column, and quadrant must contain one and only one of each of the 16 possible colours.
You can select or unselect colours from the 16 possibilities for the current cell using the left mouse button. If you know that a given cell can only contain one colour, there is a right-mouse shortcut menu to select a colour. Also, there is an option on that menu to clear a cell back to all 16 possibilities if (when) you get it wrong.
Grids can be saved and loaded to an XML file (with the extension .xhx) and there is one example included.
This program demonstrates using flag values (integers defined as powers of two) to set or unset bits in a 32 bit integer.
<Flags()> _
Public Enum CellPossibleValues
CellValue_0 = &H1
CellValue_1 = &H2
CellValue_2 = &H4
CellValue_3 = &H8
CellValue_4 = &H10
CellValue_5 = &H20
CellValue_6 = &H40
CellValue_7 = &H80
CellValue_8 = &H100
CellValue_9 = &H200
CellValue_A = &H400
CellValue_B = &H800
CellValue_C = &H1000
CellValue_D = &H2000
CellValue_E = &H4000
CellValue_F = &H8000
End Enum
These values are then added to or removed from the cell's possible values, using boolean operations:
Public Sub SetValue(ByVal value As CellPossibleValues)
CellValue = _CellValue Or value
End Sub
Public Sub UnsetValue(ByVal Value As CellPossibleValues)
CellValue = _CellValue And (&HFFFF - Value)
End Sub