Home/Tutorials/How to Create an Excel Tetris Game
Intermediate

How to Create an Excel Tetris Game

Published on April 6, 2025

Creating a Tetris game in Excel is a complex project that requires combining VBA programming, cell formatting.....

Creating a Tetris game in Excel is a complex project that requires combining VBA programming, cell formatting, and event handling. Below is a step-by-step implementation guide with core code examples.

Step 1: Set Up the Game Interface

Create the Game Area:

  • Use cells B2:K21 as the play area (10 columns × 20 rows).
  • Format cells as squares (adjust column width and row height).
  • Set a dark gray background for empty cells.

Information Panel:

  • Use cell M2 to display the score.
  • Use cell M4 to preview the next block.

Step 2: VBA Core Code Module

' Define global variables in a module
Dim GameArea As Range
Dim CurrentShape As Variant
Dim CurrentPosition As Range
Dim Score As Integer
Dim NextShape As Variant

' Shape definitions (7 classic Tetris blocks)
Shapes = Array( _
    Array(1, 1, 1, 1),             ' I-block
    Array(1, 1, 1, 0, 1),          ' T-block
    Array(1, 1, 0, 1, 1),          ' O-block
    Array(1, 1, 1, 0, 0, 1),       ' L-block
    Array(1, 1, 1, 0, 0, 0, 1),    ' J-block
    Array(1, 1, 0, 0, 1, 1),       ' S-block
    Array(0, 1, 1, 1, 1, 0)        ' Z-block
)
      

Step 3: Game Initialization

Sub InitializeGame()
    Set GameArea = ThisWorkbook.Sheets("Sheet1").Range("B2:K21")
    GameArea.Interior.Color = RGB(40, 40, 40) ' Dark gray background
    Score = 0
    ThisWorkbook.Sheets("Sheet1").Range("M2") = Score
    GenerateNewShape
End Sub
      

Step 4: Block Generation and Controls

Sub GenerateNewShape()
    ' Randomly select a new shape
    Randomize
    Dim shapeIndex As Integer
    shapeIndex = Int(Rnd * 7)
    CurrentShape = Shapes(shapeIndex)
    
    ' Initial position at the top center
    Set CurrentPosition = GameArea.Cells(1, 5)
    DrawShape
End Sub

Sub MoveLeft()
    If CheckCollision(-1, 0) = False Then
        ClearShape
        Set CurrentPosition = CurrentPosition.Offset(0, -1)
        DrawShape
    End If
End Sub

Sub MoveRight()
    If CheckCollision(0, 1) = False Then
        ClearShape
        Set CurrentPosition = CurrentPosition.Offset(0, 1)
        DrawShape
    End If
End Sub

Sub RotateShape()
    ' Rotation matrix logic (needs implementation)
End Sub
      

Step 5: Collision Detection and Line Clearing

Function CheckCollision(offsetRow As Integer, offsetCol As Integer) As Boolean
    ' Check all blocks in the current shape
    For Each block In CurrentShape
        newRow = CurrentPosition.Row + block(0) + offsetRow
        newCol = CurrentPosition.Column + block(1) + offsetCol
        If newRow > 20 Or newCol < 1 Or newCol > 10 Then
            CheckCollision = True
            Exit Function
        End If
        If GameArea.Cells(newRow, newCol).Interior.Color <> RGB(40, 40, 40) Then
            CheckCollision = True
            Exit Function
        End If
    Next
    CheckCollision = False
End Function

Sub CheckFullLines()
    For row = 1 To 20
        If Application.CountA(GameArea.Rows(row)) = 10 Then
            ' Clear the line and update score
            GameArea.Rows(row).Interior.Color = RGB(40, 40, 40)
            Score = Score + 100
            ThisWorkbook.Sheets("Sheet1").Range("M2") = Score
            ' Shift rows above down
            If row > 1 Then
                GameArea.Rows("1:" & row - 1).Cut Destination:=GameArea.Rows("2:" & row)
            End If
        End If
    Next
End Sub
      

Step 6: Keyboard Controls (Worksheet Code)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.OnKey "{LEFT}", "MoveLeft"
    Application.OnKey "{RIGHT}", "MoveRight"
    Application.OnKey "{UP}", "RotateShape"
    Application.OnKey "{DOWN}", "MoveDownFast"
End Sub
      

Step 7: Game Loop (Using Application.OnTime)

Sub GameLoop()
    If CheckCollision(1, 0) Then
        LockShape()
        CheckFullLines()
        GenerateNewShape()
        If CheckCollision(0, 0) Then
            MsgBox "Game Over! Score: " & Score
            Exit Sub
        End If
    Else
        MoveDown
    End If
    Application.OnTime Now + TimeValue("00:00:01"), "GameLoop"
End Sub
      

Notes:

  • Enable macros (File > Options > Trust Center > Enable all macros).
  • Optimize cell formatting for smoother rendering.
  • Implement rotation logic with matrix transformations.
  • Set the game frame rate to 1-2 moves per second.

Tips for Success

Start with a simpler version and gradually add features. Testing each component separately will make debugging easier. Don't be afraid to experiment with different colors and effects to make your game visually appealing!

Related Tutorials

    Important Information

    Security Notice: Some of these files include macros that your Excel may block as a security precaution. We cannot take responsibility from any issue that would result from this action, we found that saving these files as a new .xlsm file was usually efficient to lift the restriction.

    Disclaimer: We are not responsible for any copyright infringement due to these games. If you have any questions, please contact us to delete.

    Excel Games Hub

    Provide excel games sharing, downloading and creation and other related content

    Share

    Share Excel Games Hub with your friends!

    © 2025 Excel Games Hub. All rights reserved.