Puzzle Square - Original Concept
The goal of the program was to make things simple yet easy to understand and quickly changeable based on future ideas.
The seed of the idea came from seeing a light puzzle many years ago but I don't remember exactly what the game was called or how it worked. What I do remember was that You would press a button on its' screen and it would change the pattern shown on its' display. The object was to get all of the lights to turn on so you would "Win".
So I thought it would be fun to take the idea and make it into a simple "workable game" using Visual Basic under Microsoft Visual Studio 2012 Ultimate Software. I have written a lot of code using Microsoft Visual Studio 2003 as well as its' 2005 and 2008 versions. So part of this was to get familiar with the 2012 version of Microsoft Visual Studio.
Visual Basic (VB) was chosen because I write VB code quickly versus using C / C++ / C#. I do write some code in C++ / C# but that wasn't on my radar for this project.
Puzzle Square - From Concept to Working Code
First step on writing the program was deciding on a name using Visual Basic then doing the initial layout of only the 9 buttons on the screen.
So far so good.
Then put some minor code behind the 9 buttons so that when a button was pressed that it would pass its' value from 1 to 9 to a common routine called "
ChangeValuesBasedOnButtonPress" which would later be used to update the buttons based on the predefined pattern for that button as described in the detailed help form.
The first 2 colors were predetermined to be "Red" and "Yellow" respectively.
Started with "2 color" mode with "
SquareData" being set to "121212121" which equates to Red on every odd numbered square and Yellow on every even numbered square.
Next thing was to work on the code for
ChangeValuesBasedOnButtonPress so that the puzzle would change the colors to the next color for the 4 or 5 buttons
affected by the button just pressed. "
UpdateSquareValue" function rotates the selected values to the next color number for each affected square. If the
next color number is greater than the maximum number of colors selected in the "Color Modes" combobox, then that value gets reset to "1". (Red) Then once
all of the squares are updated for button pressed, then the
UpdateButtonColors Function is called which then updates the colors on the 9 buttons on the screen
AND determines if ALL the colors of all the buttons are the same which then shows a MessageBox saying "You WON!!!".
Private Sub UpdateButtonColors()
If InitializingFlag = True Then
Dim x As Integer = 0
Dim NewBackColor As Color = Color.Black
For i = 1 To 9
x = Val(Mid(SquareData, i, 1))
NewBackColor = ColorArray(x)
Select Case i
btnSelect1.BackColor = NewBackColor
btnSelect2.BackColor = NewBackColor
btnSelect3.BackColor = NewBackColor
btnSelect4.BackColor = NewBackColor
btnSelect5.BackColor = NewBackColor
btnSelect6.BackColor = NewBackColor
btnSelect7.BackColor = NewBackColor
btnSelect8.BackColor = NewBackColor
btnSelect9.BackColor = NewBackColor
If SquareData = "111111111" Or _
SquareData = "222222222" Or _
SquareData = "333333333" Or _
SquareData = "444444444" Then
Next added in the Randomization Code to randomly pick a number from 1 to 9 at the "Rerandomize:" label in the "
StartNewGame" function which then effective acts as if someone were to pick one of the 9 buttons to press. This occurs 101 times to give a pseudo random pattern.
Later decided on the 3rd and 4th colors of "Green" and "Blue" when "3 Color" and "4 Color" modes are chosen.
Game defaults to "2 Color" Mode when it first starts up ... then stays in that mode until you change the number of colors to any of these 3 values: 2 Color Mode,
3 Color Mode, or 4 Color Mode. When a Color Mode is changed, then the Puzzle Square is re-randomized.
Found that If I did not count the colors when randomizing the colors that you often didn't get all the colors used for the Color modes ... So I quickly modified the "
StartNewGame" Function to count the number of colors then if the minimum desired colors for each color used in the puzzle was not met to then "re-randomize" the puzzle until the minimum number of colors was met.
The randomizer seeding logic was copied as is from my original CodeProject code called "Star Trek for Windows". This randomizer logic uses the Current Date and
Current Time to insure better number randomization. Otherwise you will get the SAME puzzle when the program launches due to fact that the random number generator
was not randomized properly.
Added the "
InitializingFlag" flag close to the last thing so as to not update the puzzle while the randomization is being generated.
Last function added was the "Demo Mode" to Demonstrate how well the random number generation works.
- All generated puzzles ARE solvable.
Occasionally you may have to press the center square to solve the problem. Otherwise you may get "stuck" with a seemingly unsolvable puzzle.
2 color mode is very easy.
3 color mode is mediumly hard.
4 color mode is very challenging at times.
I played this game daily for 10 to 15 minutes over a period of 2 weeks or so to prove that each generated puzzle IS solvable.
- After you play the game quite a few times, you will "see" the patterns and it becomes much easier to solve in any of the 3 Selectable "Color Modes".
- There are many things that could be done to make this program more polished ... that I will leave up to you to decide.
The code is provided for you to play with as you decide.
The Main Form could be locked on its' size ... I missed that when I uploaded the code to this project.
Now go experiment and have fun!