Introduction
Welcome back! With this installment we will mainly concentrate in determining whether or not three pictures form part of a winning line. We will also enable the facility to enter an amount of credits, and track them during gameplay.
How Does it Work?
A line is basically the row in which the matching pictures were found. It doesn’t have to be a straight line, it can be any variant. If you take 5 columns with 4 pictures each, you can have many possibilities, as explained in the first installment of this series. We need to determine which pictures are next to each other. Let us start with the ‘complicated’ stuff first… for a change!
Finding Matches
Create the following variables inside General Declarations :
Private LineCounter As Integer 'Count winning lines ( rows ) Private SelLines As Integer 'How many lines were selected Private MainLineCounter As Integer 'Count winning MAIN Lines - which can be skew, straight, zig-zag etc. Private Credits As Integer 'How many credits Private LineBet As Integer 'How much to bet per line Private Bet As Integer 'Total bet Private strBetSummary As String 'summarise lines + bet per line Private LineBetCounter As Integer = 0 'Limit bet per line
Now add the following sub procedure :
Private Sub CheckMainLines() 'Determine winning sequence for MAIN lines For i As Integer = 0 To 9 'loop through all images in arrImages array 'Line 1 '0 0 0 0 0 If Column1(0).Image Is arrImages(i) And Column2(0).Image Is arrImages(i) And _ Column3(0).Image Is arrImages(i) And Column4(0).Image Is arrImages(i) And _ Column5(0).Image Is arrImages(i) Then 'Check if neighbouring pictures are the same MessageBox.Show("Line 1 Match") 'Match - More matches are possible, but that will be done in Part 3 MainLineCounter += 1 'Increment MainLine counter - to indicate how many main lines have been struck 'Line 2 '1 1 1 1 1 ElseIf Column1(1).Image Is arrImages(i) And Column2(1).Image Is arrImages(i) And _ Column3(1).Image Is arrImages(i) And Column4(1).Image Is arrImages(i) And _ Column5(1).Image Is arrImages(i) Then MessageBox.Show("Line 2 Match") MainLineCounter += 1 'Line 3 '2 2 2 2 2 ElseIf Column1(2).Image Is arrImages(i) And Column2(2).Image Is arrImages(i) And _ Column3(2).Image Is arrImages(i) And Column4(2).Image Is arrImages(i) _ And Column5(2).Image Is arrImages(i) Then MessageBox.Show("Line 3 Match") MainLineCounter += 1 'Line 4 '3 3 3 3 3 ElseIf Column1(3).Image Is arrImages(i) And Column2(3).Image Is arrImages(i) And _ Column3(3).Image Is arrImages(i) And Column4(3).Image Is arrImages(i) And _ Column5(3).Image Is arrImages(i) Then MessageBox.Show("Line 4 Match") MainLineCounter += 1 'Line 5 '3 2 1 2 3 ElseIf Column1(3).Image Is arrImages(i) And Column2(2).Image Is arrImages(i) And _ Column3(1).Image Is arrImages(i) And Column4(2).Image Is arrImages(i) And _ Column5(3).Image Is arrImages(i) Then MessageBox.Show("Line 5 Match") MainLineCounter += 1 'Line 6 '0 1 2 1 0 ElseIf Column1(0).Image Is arrImages(i) And Column2(1).Image Is arrImages(i) And _ Column3(2).Image Is arrImages(i) And Column4(1).Image Is arrImages(i) And _ Column5(0).Image Is arrImages(i) Then MessageBox.Show("Line 6 Match") MainLineCounter += 1 'Line 7 '1 0 1 0 1 ElseIf Column1(1).Image Is arrImages(i) And Column2(0).Image Is arrImages(i) And _ Column3(1).Image Is arrImages(i) And Column4(0).Image Is arrImages(i) And _ Column5(1).Image Is arrImages(i) Then MessageBox.Show("Line 7 Match") MainLineCounter += 1 'Line 8 '2 3 2 3 2 ElseIf Column1(2).Image Is arrImages(i) And Column2(3).Image Is arrImages(i) And _ Column3(2).Image Is arrImages(i) And Column4(3).Image Is arrImages(i) And _ Column5(2).Image Is arrImages(i) Then MessageBox.Show("Line 8 Match") MainLineCounter += 1 'Line 9 '2 1 1 1 2 ElseIf Column1(2).Image Is arrImages(i) And Column2(1).Image Is arrImages(i) And _ Column3(1).Image Is arrImages(i) And Column4(1).Image Is arrImages(i) And _ Column5(2).Image Is arrImages(i) Then MessageBox.Show("Line 9 Match") MainLineCounter += 1 End If Next End Sub
There are hundreds of possible matches with our screen of twenty pictures, remember that. Now, with this sub, I am checking if all the matches for one full line have been found. In other words, I check to see if the pictures displayed correspond precisely with my built in lines. How? Let us take a look at how the columns and rows are formed. The pictures are organized according to Figure 1
Figure 1 – How Pictures are organized
Obviously arrays start counting at 0, so technically our pictures start at 0 and go on to 19. The lines look as follows :
Figure 2 – How our lines are organized
As you can see, the first four Main lines are straightforward in the fact that all of them have the same index in each different PictureBox array ( Column1 – Column 5 ). From line 5 onwards, I tried to create different patterns for the lines to follow. In real Video slot games, there are many more combinations, but this is just an example of how the logic works.
This sub deals with the Main lines. I call them Main lines, because they are worth the most. A full line needs to be identified in order for the line to win. In the sub I compare the pictures with a little keyword called Is. Remember in Part 1 I declared arrImages as Image? Well, it is because of this. It makes it easier to compare pictures this way, and you get the correct result each time; instead of using pixel detection and so forth, which may give unexpected results. We will work more with the Main Lines in Part 3 again. When a match is found, I increment the MainLineCounter variable to keep track of how many lines were struck.
The next two subs use the same principle. I just take it a step further to detect all possible matches. Add the CheckCols and CheckRows subs :
Private Sub CheckCols() 'Determine winning sequence for columns For i As Integer = 0 To 9 'Loop through arrImages If Column1(0).Image Is arrImages(i) And Column1(1).Image Is arrImages(i) _ And Column1(2).Image Is arrImages(i) Then 'Determine three matching neighbouring images MessageBox.Show("column 1 Match 1") 'Match - Two matches are possible 'No Column counter yet, just concetrating on the lines Now - Completed with Part 3 ElseIf Column1(1).Image Is arrImages(i) And Column1(2).Image Is arrImages(i) _ And Column1(3).Image Is arrImages(i) Then MessageBox.Show("column 1 Match 2") ElseIf Column2(0).Image Is arrImages(i) And Column2(1).Image Is arrImages(i) _ And Column2(2).Image Is arrImages(i) Then MessageBox.Show("column 2 Match 1") ElseIf Column2(1).Image Is arrImages(i) And Column2(2).Image Is arrImages(i) _ And Column2(3).Image Is arrImages(i) Then MessageBox.Show("column 2 Match 2") ElseIf Column3(0).Image Is arrImages(i) And Column3(1).Image Is arrImages(i) _ And Column3(2).Image Is arrImages(i) Then MessageBox.Show("column 3 Match 1") ElseIf Column3(1).Image Is arrImages(i) And Column3(2).Image Is arrImages(i) _ And Column3(3).Image Is arrImages(i) Then MessageBox.Show("column 3 Match 2") ElseIf Column4(0).Image Is arrImages(i) And Column4(1).Image Is arrImages(i) _ And Column4(2).Image Is arrImages(i) Then MessageBox.Show("column 4 Match 1") ElseIf Column4(1).Image Is arrImages(i) And Column4(2).Image Is arrImages(i) _ And Column4(3).Image Is arrImages(i) Then MessageBox.Show("column 4 Match 2") ElseIf Column5(0).Image Is arrImages(i) And Column5(1).Image Is arrImages(i) _ And Column5(2).Image Is arrImages(i) Then MessageBox.Show("column 5 Match 1") ElseIf Column5(1).Image Is arrImages(i) And Column5(2).Image Is arrImages(i) _ And Column5(3).Image Is arrImages(i) Then MessageBox.Show("column 5 Match 2") End If Next End Sub Private Sub CheckRows() 'Determine winning sequence for lines ( straight rows ) For i As Integer = 0 To 9 'Loop arrImages If Column1(0).Image Is arrImages(i) And Column2(0).Image Is arrImages(i) And _ Column3(0).Image Is arrImages(i) Then 'Determine similarity between neighbouring pictures MessageBox.Show("row 1 Match 1") 'Three matches are possible LineCounter += 1 ' Count each match distinctly ElseIf Column2(0).Image Is arrImages(i) And Column3(0).Image Is arrImages(i) _ And Column4(0).Image Is arrImages(i) Then MessageBox.Show("row 1 Match 2") LineCounter += 1 ElseIf Column3(0).Image Is arrImages(i) And Column4(0).Image Is arrImages(i) _ And Column5(0).Image Is arrImages(i) Then MessageBox.Show("row 1 Match 3") LineCounter += 1 ElseIf Column1(1).Image Is arrImages(i) And Column2(1).Image Is arrImages(i) _ And Column3(1).Image Is arrImages(i) Then MessageBox.Show("row 2 Match 1") LineCounter += 1 ElseIf Column2(1).Image Is arrImages(i) And Column3(1).Image Is arrImages(i) _ And Column4(1).Image Is arrImages(i) Then MessageBox.Show("row 2 Match 2") LineCounter += 1 ElseIf Column3(1).Image Is arrImages(i) And Column4(1).Image Is arrImages(i) _ And Column5(1).Image Is arrImages(i) Then MessageBox.Show("row 2 Match 3") LineCounter += 1 ElseIf Column1(2).Image Is arrImages(i) And Column2(2).Image Is arrImages(i) _ And Column3(2).Image Is arrImages(i) Then MessageBox.Show("row 3 Match 1") LineCounter += 1 ElseIf Column2(2).Image Is arrImages(i) And Column3(2).Image Is arrImages(i) _ And Column4(2).Image Is arrImages(i) Then MessageBox.Show("row 3 Match 2") LineCounter += 1 ElseIf Column3(2).Image Is arrImages(i) And Column4(2).Image Is arrImages(i) _ And Column5(2).Image Is arrImages(i) Then MessageBox.Show("row 3 Match 3") LineCounter += 1 ElseIf Column1(3).Image Is arrImages(i) And Column2(3).Image Is arrImages(i) _ And Column3(3).Image Is arrImages(i) Then MessageBox.Show("row 4 Match 1") LineCounter += 1 ElseIf Column2(3).Image Is arrImages(i) And Column3(3).Image Is arrImages(i) _ And Column4(3).Image Is arrImages(i) Then MessageBox.Show("row 4 Match 2") LineCounter += 1 ElseIf Column3(3).Image Is arrImages(i) And Column4(3).Image Is arrImages(i) _ And Column5(3).Image Is arrImages(i) Then MessageBox.Show("row 4 Match 3") LineCounter += 1 End If Next End Sub
We are now able to detect all matches. When a macth is found, a MessageBox will show, and the associated counter will increment. In Part 3, the MessageBoxes will be removed. Add the call to these three subs to tmrPause_Tick, which will now look like :
Private Sub tmrPause_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrPause.Tick '''''''''''''''''''''' ''Part 1 If Col <= 5 Then Col += 1 TimeCounter = 0 tmrPause.Enabled = False tmrSlots.Enabled = True Else Col = 1 TimeCounter = 0 tmrPause.Enabled = False tmrSlots.Enabled = False picSpin.Enabled = True Panel5.BackColor = Color.White picSpin.Image = My.Resources.SPIN ''''''''''''''''''''''''''''' CheckMainLines() 'Determine all matches CheckCols() CheckRows() End If End Sub