Now, we're going to add multiple coins and walls to the game, to give it some kind of completeness.
First, we'll add support for multiple coins.  Of course, we need some kind of list of coins.  We can use another
arraylist for the coins, and use a For loop or a For Each loop to check all of the coins.

Dim Coins As ArrayList
'Holds the list of coins for this level.
Coins as the arraylist will hold the coins. Coins will be added to it as initialization, and removed while the player collects them. Now, instead of setting the single coin in the Form's Load event procedure (shown below):
Coin = New Rectangle(200, 550, COINSIZE, COINSIZE)
We can add the new coin rectangles to the coins arraylist.
Coins = New ArrayList(100)

Coins.Add(New Rectangle(200, 530, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(100, 440, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(116, 440, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(132, 440, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(260, 355, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(230, 365, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(240, 510, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(20, 490, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(280, 400, COINSIZE, COINSIZE))
Coins.Add(New Rectangle(200, 498, COINSIZE, COINSIZE))
'Ten coins going into the coins arraylist.
Remember that we could use a point for the coin. We're only using a rectangle so that we can use collision detection with the .IntersectsWith rectangle method. Right now, we have to put all of the coin positions in manually, but eventually, we'll be able to do that from a file. Now, we need to make the character interact with the coins. Probably by now, you realize the main scheme behind adding support for another feature: Ω Create the declarations for it. Ω Instantiate it. Ω Allow the player to interact with it. Ω Draw it. Now, the player interacts with the coins whenever he moves, which is in the CharacterMovement sub. So this:
        If Coin.IntersectsWith(PlayerLoc) Then
            Coin = Coin.Empty
            'Make the coin rectangle empty to indicate that we do not need to draw it.
        End If
Becomes this:
For LV = 0 To Coins.Count - 1
  Coin = DirectCast(Coins(LV), Rectangle)
  If Coin.IntersectsWith(PlayerLoc) Then
    Coin = Rectangle.Empty
    'Set this coin to be an empty rectangle, it is collected.
    Coins(LV) = Coin
  End If
Next
Notice that since the coin is a structure and not a class reference, the newly updated coin has to be reassigned to the coins arraylist. Now, the coins need to be drawn onto the form (which is in the Artwork sub). This:
        If Not Coin.IsEmpty Then
            GFX.DrawImage(CoinBmp, Coin.X, Coin.Y, New Rectangle((Anim Mod COINFRAMECOUNT) * COINSIZE, 0, COINSIZE, COINSIZE), GraphicsUnit.Pixel)
            'Draws our spinning coin onto the form.
        End If
Becomes this:
For Each Coin In Coins
  If Not Coin.IsEmpty Then
    GFX.DrawImage(CoinBmp, Coin.X, Coin.Y, <font color=#0000FF>New</font> Rectangle((Anim <font color=#0000FF>Mod</font> COINFRAMECOUNT) * COINSIZE, 0, COINSIZE, COINSIZE), GraphicsUnit.Pixel)
    'Draw the coin.  Since anim increases, the coin will animation because of the mod and multiply for the first left argument.
  End If
Next
And that should add lots of collectible coins on the form.
If Not IsJumping Then   'Cannot jump if already jumping.
  IsJumping = True
  'The jump is initialized.
  If GoDown Then
    PlayerVeloc = LOWJUMPVELOCITY
    'Low jump made when down key is pressed.
  Else
    PlayerVeloc = SBARINITIALVELOCITY
    'Use space bar initial velocity.
  End If
End If
That's the way to fix the double jumping bug that I just discovered, by adding the if(!isjumping) block in the Keydown event handler. Also, don't forget that you can speed up the whole game by setting the timer interval to ~50.
Now, we do the same thing we did for coins with the walls. Declarations:
Dim Walls As Arraylist
'The walls for this level.
Instantiation, replace:
        Wall = Rectangle.FromLTRB(185, 415, 210, 465)
        'Wall is initialized.
with:
Walls = New Arraylist(100)
'The list of walls is set up.
Walls.Add(Rectangle.FromLTRB(225, 415, 275, 465))
Walls.Add(Rectangle.FromLTRB(320, 480, 350, LANDHEIGHT))
Walls.Add(Rectangle.FromLTRB(350, 520, 380, LANDHEIGHT))
'And three walls are added.
Allow interaction, by replacing:
                If PlayerLoc.IntersectsWith(Wall) Then
                    ElseIf PlayerVeloc > 0 Then
                        'If player is falling, then the player will land on the wall.
                        IsJumping = False
                        'Stop the jump.
                        LeftEnd = Wall.Left : RightEnd = Wall.Right
                        'Set the endpoints.
                        AnimCycler = 0
                        'Reset the cycler.
                        PlayerLoc.Offset(0, Wall.Top - PlayerLoc.Bottom)
                        'Position the player to stand on this wall.
                    Else
                        'The player has jumped up into the wall.
                        PlayerLoc.Offset(0, Wall.Bottom - PlayerLoc.Top)
                        'Move the player to under the wall.
                        PlayerVeloc = 0
                        'Make the player start falling down.
                    End If
                End If
with the same thing, except with the foreach loop injected in and a few elses moved around:
Else
  For Each Wall In Walls

                    ElseIf PlayerVeloc > 0 Then
                        'If player is falling, then the player will land on the wall.
                        IsJumping = False
                        'Stop the jump.
                        LeftEnd = Wall.Left : RightEnd = Wall.Right
                        'Set the endpoints.
                        AnimCycler = 0
                        'Reset the cycler.
                        PlayerLoc.Offset(0, Wall.Top - PlayerLoc.Bottom)
                        'Position the player to stand on this wall.
                    Else
                        'The player has jumped up into the wall.
                        PlayerLoc.Offset(0, Wall.Bottom - PlayerLoc.Top)
                        'Move the player to under the wall.
                        PlayerVeloc = 0
                        'Make the player start falling down.
                    End If
                End If
  Next
End If
Also, don't forget the left and right collisions need to be fixed as well, and since they are in an else if block, the else if block needs to be altered.
Else
  For Each Wall In Walls
    If Playerloc.IntersectsWith(Wall) Then
      PlayerLoc.Offset(Wall.Left - PlayerLoc.Right, 0)
      'Move player back to left edge of wall.
    End If
  Next
  If PlayerLoc.Left > RightEnd AndAlso Not IsJumping Then
    IsJumping = True
    PlayerVeloc = 0
    'Falling from the edge of platform.
  End If
Remember to make the similar change in the GoRight if block.
Else
  For Each Wall In Walls
    If PlayerLoc.IntersectsWith(Wall)
      PlayerLoc.Offset(Wall.Right - PlayerLoc.Left, 0)
      'Move the player back to the right edge of this wall.
    End If
  Next
  If PlayerLoc.Right < LeftEnd AndAlso Not IsJumping
    IsJumping = True
    'Falling off the edge of a platform.
    PlayerVeloc = 0
    'Free-fall.
  End If
And then, for displaying all of the walls, replace:
            GFX.FillRectangle(Brushes.Chocolate, Wall)
            GFX.DrawRectangle(Pens.BurlyWood, Wall)
            'This will draw the wall onto the form.
With:
        For Each Wall In Walls
            GFX.FillRectangle(Brushes.Chocolate, Wall)
            GFX.DrawRectangle(Pens.BurlyWood, Wall)
            'This will draw the wall onto the form.
        Next
And now, you should have fully active walls on the form. Thanks to ralphzehunter for realizing that I accidentally saved the C# version of this episode over the VB version.