Creating your own Tetris game with VB.NET - Part 3 | CodeGuru

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

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 […]

Written By
CodeGuru Staff
CodeGuru Staff
Apr 14, 2010
2 minute read
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
yet read the previous 2 parts of this article series, I suggest going through
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
start with the code directly.

Advertisement

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

Add the following declarations to your class
:

    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

Add the constructor

    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

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.