Creating a Video Slot game with VB.NET Part 2 - Gameplay
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


Comments
There are no comments yet. Be the first to comment!