# Creating your own Tetris game with VB.NET – Part 3

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

## Introduction

If you have been following this series up to this point, I know what you are
thinking: When are we going to start with the physical shapes and game play?
Well, wait no more 🙂  In this part of my series, I am going to cover the
whole creation of all the shapes, and the game playing methods. if you haven’t
them now, as this part is where everything happens!

## Logic / Explanation

As mentioned in the first part, Tetris makes use of tetrominoes. A tetromino, also spelled tetramino or
tetrimino, is a geometric shape composed of four squares, connected
orthogonally. This is a particular type of
polyomino, just like
dominoes and
pentominoes. Sometimes the term is generalized to apply to configurations of
four orthogonally connected cubes.  There are seven possible shapes :

 Shape Picture I O T L J S Z

We are going to create these shapes now.  We will also make each shape
move and change, so that each shape behaves as it should, in any other Tetris
game.  With the help of pressing some keys during game play, the shapes
must be flipped over, or turned, but more on that a little bit later, we should
create the shapes first, so let us now start.

We do not need to change or add anything on our Form’s design, so we can

## Coding

The first thing we have to do is to create our Shapes class.  Add a new
class to your project, and name it clsTetShapes

### clsTetShapes

:

```    Public rctShape() As Rectangle 'Shape

Public blnMoving As Boolean 'Is The Shape Moving
Private blnIsNextShape As Boolean = False 'Image In The Next Shape Window

Private intStartX As Integer 'Starting Horz Loc
Private intCurrShape As Integer = 1 'Current Shape
Private intCurrShapePos As Integer = 1 'Shape Location
Private intBlockX(4) As Integer 'Each Part Of Tetri, Horz
Private intBlockY(4) As Integer 'Each part Of Tetri, Vert
Private intXPos(4) As Integer 'Starting Horz Loc
Private intPanelWidth As Integer 'Panel Width
Private intPanelHeight As Integer 'Panel height```

These variables are used throughout the class. The width & height of the drawing area(s), the size of the shapes are all stored in the above variables

```    Public Sub New(ByVal intShapeType As Integer, ByVal intScreenW As Integer, ByVal intScreenH As Integer, ByVal blnNextShape As Boolean)

intStartX = CInt((intScreenW - 1) / 2) 'Start In Center Of X Axis

intPanelWidth = intScreenW 'Canvas Width
intPanelHeight = intScreenH 'Canvas Height

blnIsNextShape = blnNextShape ' Is The Next Shape Shown

intCurrShape = intShapeType 'Set Current Shape

ShapeStart() 'Call To ShapeStart Gives Initial values To All Blocks Of All Shapes

End Sub```

In the constructor, we obtain the width of our game area, get a random shape, and calls the ShapeStart sub procedure which basically creates our shapes

The next sub procedure, Build is used to build the four blocks of each shape, depending on which shape we are busy with, enter the following:

```    Private Sub Build(ByVal intShapeType As Integer)

rctShape = New Rectangle(4) {} 'Each Block Of Shape

'Create 4 Blocks 10 x 10
rctShape(0) = New Rectangle(intBlockX(0), intBlockY(0), 10, 10)
rctShape(1) = New Rectangle(intBlockX(1), intBlockY(1), 10, 10)
rctShape(2) = New Rectangle(intBlockX(2), intBlockY(2), 10, 10)
rctShape(3) = New Rectangle(intBlockX(3), intBlockY(3), 10, 10)

End Sub```

We utilise the rctShape array, and give each of the four blocks a starting value