Can you see why this isn't drawing correctly? 

Option Explicit On
Option Strict On

Imports System.IO
Imports System.Text.Json
Imports System.Text.Json.Serialization
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Media
Imports System.ComponentModel

Public Class frmGame
    ' Property to receive the room file path from frmDesigner
    Public Property RoomFilePath As String
    Private SelectedMusic As String

    ' Constants for grid layout
    Private Const INDENT As Integer = 20
    Private Const WALL_THICKNESS As Integer = 10

    ' Variables for grid size
    Private SQCOUNTX As Integer
    Private SQCOUNTY As Integer

    ' Variables for square sizes
    Private SQSizeX As Integer
    Private SQSizeY As Integer

    ' Variables for wall and floor styles
    Private wallsHatchStyle As HatchStyle
    Private wallsColor1 As Color
    Private wallsColor2 As Color
    Private floorsHatchStyle As HatchStyle
    Private floorsColor1 As Color
    Private floorsColor2 As Color

    ' Arrays to store walls and items
    Private verticalWalls()() As Boolean
    Private horizontalWalls()() As Boolean
    Private placedItems()() As String
    Private verticalWallItems()() As String
    Private horizontalWallItems()() As String
    Private floorsUseEdgeStyle()() As Boolean

    ' Image resources
    Private imageDictionary As New Dictionary(Of String, Image)
    Private animatedImages As New List(Of Image)

    ' Animation timer
    Private animationTimer As Timer

    ' Flag to indicate when the room data is loaded
    Private isRoomDataLoaded As Boolean = False

    Private musicPlayer As SoundPlayer

    ' Paths
    Private ReadOnly projectDir As String = GetProjectDirectory()
    Private ReadOnly ImagesFolder As String = Path.Combine(projectDir, "Data", "Images")
    Private ReadOnly musicFolder As String = Path.Combine(projectDir, "Data", "Music")

    ' Class to represent the simple room data
    Public Class SimpleRoomData
        Public Property GridSizeX As Integer
        Public Property GridSizeY As Integer

        ' Properties to save colors and styles
        Public wallsHatchStyleValue As Integer
        Public wallsColor1Argb As Integer
        Public wallsColor2Argb As Integer
        Public floorsHatchStyleValue As Integer
        Public floorsColor1Argb As Integer
        Public floorsColor2Argb As Integer

        ' Arrays to save wall states
        Public verticalWalls()() As Boolean
        Public horizontalWalls()() As Boolean

        ' Arrays to save placed items
        Public placedItems()() As PlacedItemData
        Public verticalWallItems()() As PlacedItemData
        Public horizontalWallItems()() As PlacedItemData

        ' Arrays to save floor edge styles
        Public floorsUseEdgeStyle()() As Boolean

        ' Property to save the selected music
        Public SelectedMusic As String

        ' Property to save the level name
        Public LevelName As String
    End Class

    ' PlacedItemData class to represent placed items
    Public Class PlacedItemData
        Public Property ImageKey As String
    End Class

    ' Event handler for form load
    Private Sub frmGame_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Load the room data from file
        If Not String.IsNullOrEmpty(RoomFilePath) AndAlso File.Exists(RoomFilePath) Then
            LoadRoomFromFile(RoomFilePath)
        Else
            MessageBox.Show("Room file not found.")
            Me.Close()
            Return
        End If

        ' Initialize images and animations
        InitializeImages()

        ' Start the animation timer
        animationTimer = New Timer() With {.Interval = 100}
        AddHandler animationTimer.Tick, AddressOf OnAnimationTick
        animationTimer.Start()

        ' Force picTest to repaint
        picTest.Invalidate()
    End Sub

    ' Method to load the room data from file
    Private Sub LoadRoomFromFile(filePath As String)
        Try
            Dim options As New JsonSerializerOptions With {
                .IncludeFields = True
            }
            Dim jsonString As String = File.ReadAllText(filePath)
            Dim roomData As SimpleRoomData = JsonSerializer.Deserialize(Of SimpleRoomData)(jsonString, options)

            If roomData Is Nothing Then
                MessageBox.Show("Error: Failed to deserialize room data.")
                Return
            End If

            ' Ensure images are loaded before restoring state
            InitializeImages()

            ' Restore room data
            RestoreRoomData(roomData)
        Catch ex As Exception
            MessageBox.Show("Error loading room: " & ex.ToString())
        End Try
    End Sub

    Private Sub PlaySelectedMusic()
        If musicPlayer IsNot Nothing Then
            ' Stop any currently playing music
            musicPlayer.Stop()
            musicPlayer.Dispose()
            musicPlayer = Nothing
        End If

        If Not String.IsNullOrEmpty(SelectedMusic) Then
            Dim musicFilePath As String = Path.Combine(musicFolder, SelectedMusic & ".wav")
            If File.Exists(musicFilePath) Then
                Try
                    musicPlayer = New SoundPlayer(musicFilePath)
                    ' Set LoadCompleted event handler to play music on repeat
                    AddHandler musicPlayer.LoadCompleted, AddressOf MusicLoadCompleted
                    musicPlayer.LoadAsync()
                Catch ex As Exception
                    MessageBox.Show("Error playing music: " & ex.Message)
                End Try
            Else
                MessageBox.Show("Selected music file not found: " & SelectedMusic)
            End If
        End If
    End Sub

    Private Sub MusicLoadCompleted(sender As Object, e As AsyncCompletedEventArgs)
        If musicPlayer IsNot Nothing Then
            musicPlayer.PlayLooping()
        End If
    End Sub

    ' Method to restore room data from the loaded SimpleRoomData object
    Private Sub RestoreRoomData(roomData As SimpleRoomData)
        Try
            ' Restore grid sizes
            SQCOUNTX = roomData.GridSizeX
            SQCOUNTY = roomData.GridSizeY

            ' Restore colors and styles
            wallsHatchStyle = CType(roomData.wallsHatchStyleValue, HatchStyle)
            wallsColor1 = Color.FromArgb(roomData.wallsColor1Argb)
            wallsColor2 = Color.FromArgb(roomData.wallsColor2Argb)
            floorsHatchStyle = CType(roomData.floorsHatchStyleValue, HatchStyle)
            floorsColor1 = Color.FromArgb(roomData.floorsColor1Argb)
            floorsColor2 = Color.FromArgb(roomData.floorsColor2Argb)

            ' Restore walls and items
            verticalWalls = roomData.verticalWalls
            If verticalWalls Is Nothing OrElse verticalWalls.Length <> SQCOUNTX + 1 Then
                InitializeVerticalWalls()
            End If

            horizontalWalls = roomData.horizontalWalls
            If horizontalWalls Is Nothing OrElse horizontalWalls.Length <> SQCOUNTX Then
                InitializeHorizontalWalls()
            End If

            floorsUseEdgeStyle = roomData.floorsUseEdgeStyle
            If floorsUseEdgeStyle Is Nothing OrElse floorsUseEdgeStyle.Length <> SQCOUNTX - 1 Then
                InitializeFloorsUseEdgeStyle()
            End If

            ' Restore placed items
            placedItems = RestorePlacedItems(roomData.placedItems)
            If placedItems Is Nothing OrElse placedItems.Length <> SQCOUNTX - 1 Then
                InitializePlacedItems()
            End If

            verticalWallItems = RestorePlacedItems(roomData.verticalWallItems)
            If verticalWallItems Is Nothing OrElse verticalWallItems.Length <> SQCOUNTX + 1 Then
                InitializeVerticalWallItems()
            End If

            horizontalWallItems = RestorePlacedItems(roomData.horizontalWallItems)
            If horizontalWallItems Is Nothing OrElse horizontalWallItems.Length <> SQCOUNTX - 1 Then
                InitializeHorizontalWallItems()
            End If

            ' Restore level name and selected music
            SelectedMusic = roomData.SelectedMusic
            lblName.Text = roomData.LevelName
            PlaySelectedMusic()

            ' Set flag indicating room data is loaded
            isRoomDataLoaded = True

            ' Refresh the game picture
            picTest.Invalidate()
        Catch ex As Exception
            MessageBox.Show("Error restoring room data: " & ex.ToString())
        End Try
    End Sub

    Private Function RestorePlacedItems(data As PlacedItemData()()) As String()()
        If data Is Nothing Then
            Return Nothing
        End If

        Dim lengthOuter As Integer = data.Length
        Dim restoredItems As String()() = New String(lengthOuter - 1)() {}

        For x As Integer = 0 To lengthOuter - 1
            If data(x) IsNot Nothing Then
                Dim lengthInner As Integer = data(x).Length
                restoredItems(x) = New String(lengthInner - 1) {}
                For y As Integer = 0 To lengthInner - 1
                    If data(x)(y) IsNot Nothing Then
                        restoredItems(x)(y) = data(x)(y).ImageKey
                    Else
                        restoredItems(x)(y) = Nothing
                    End If
                Next
            Else
                ' Initialize with empty array if data(x) is Nothing
                restoredItems(x) = New String(SQCOUNTY - 1) {}
                For y As Integer = 0 To SQCOUNTY - 1
                    restoredItems(x)(y) = Nothing
                Next
            End If
        Next
        Return restoredItems
    End Function

    Private Sub InitializeVerticalWalls()
        verticalWalls = New Boolean(SQCOUNTX)() {}
        For x As Integer = 0 To SQCOUNTX
            verticalWalls(x) = New Boolean(SQCOUNTY - 1) {}
            For y As Integer = 0 To SQCOUNTY - 1
                verticalWalls(x)(y) = True ' Default to True for walls
            Next
        Next
    End Sub

    Private Sub InitializeHorizontalWalls()
        horizontalWalls = New Boolean(SQCOUNTX - 1)() {}
        For x As Integer = 0 To SQCOUNTX - 1
            horizontalWalls(x) = New Boolean(SQCOUNTY) {}
            For y As Integer = 0 To SQCOUNTY
                horizontalWalls(x)(y) = True ' Default to True for walls
            Next
        Next
    End Sub

    Private Sub InitializePlacedItems()
        placedItems = New String(SQCOUNTX - 1)() {}
        For x As Integer = 0 To SQCOUNTX - 1
            placedItems(x) = New String(SQCOUNTY - 1) {}
            For y As Integer = 0 To SQCOUNTY - 1
                placedItems(x)(y) = Nothing
            Next
        Next
    End Sub

    Private Sub InitializeVerticalWallItems()
        verticalWallItems = New String(SQCOUNTX)() {}
        For x As Integer = 0 To SQCOUNTX
            verticalWallItems(x) = New String(SQCOUNTY - 1) {}
            For y As Integer = 0 To SQCOUNTY - 1
                verticalWallItems(x)(y) = Nothing
            Next
        Next
    End Sub

    Private Sub InitializeHorizontalWallItems()
        horizontalWallItems = New String(SQCOUNTX - 1)() {}
        For x As Integer = 0 To SQCOUNTX - 1
            horizontalWallItems(x) = New String(SQCOUNTY) {}
            For y As Integer = 0 To SQCOUNTY
                horizontalWallItems(x)(y) = Nothing
            Next
        Next
    End Sub

    Private Sub InitializeFloorsUseEdgeStyle()
        floorsUseEdgeStyle = New Boolean(SQCOUNTX - 1)() {}
        For x As Integer = 0 To SQCOUNTX - 1
            floorsUseEdgeStyle(x) = New Boolean(SQCOUNTY - 1) {}
            For y As Integer = 0 To SQCOUNTY - 1
                floorsUseEdgeStyle(x)(y) = False
            Next
        Next
    End Sub

    ' Method to initialize images and animations
    Private Sub InitializeImages()
        Try
            imageDictionary("picBlock1") = Image.FromFile(Path.Combine(ImagesFolder, "Block.png"))
            imageDictionary("picBaddy1") = Image.FromFile(Path.Combine(ImagesFolder, "Baddy 1 anim.gif"))
            imageDictionary("picBaddy2") = Image.FromFile(Path.Combine(ImagesFolder, "Baddy 2 anim.gif"))
            imageDictionary("picBaddy3") = Image.FromFile(Path.Combine(ImagesFolder, "Baddy3.gif"))
            imageDictionary("picBaddy4") = Image.FromFile(Path.Combine(ImagesFolder, "Baddy4.gif"))
            imageDictionary("picBall") = Image.FromFile(Path.Combine(ImagesFolder, "Ball.gif"))
            imageDictionary("picBlockSwitch") = Image.FromFile(Path.Combine(ImagesFolder, "BlockSwitch.png"))
            imageDictionary("picBomb") = Image.FromFile(Path.Combine(ImagesFolder, "Bomb.gif"))
            imageDictionary("picCoin") = Image.FromFile(Path.Combine(ImagesFolder, "Coin.gif"))
            imageDictionary("picFinish") = Image.FromFile(Path.Combine(ImagesFolder, "Finish.gif"))
            imageDictionary("picFlipper1") = Image.FromFile(Path.Combine(ImagesFolder, "Flipper1.gif"))
            imageDictionary("picFlipper2") = Image.FromFile(Path.Combine(ImagesFolder, "Flipper2.gif"))
            imageDictionary("picFlipper3") = Image.FromFile(Path.Combine(ImagesFolder, "Flipper3.gif"))
            imageDictionary("picFlipper4") = Image.FromFile(Path.Combine(ImagesFolder, "Flipper4.gif"))
            imageDictionary("picGate") = Image.FromFile(Path.Combine(ImagesFolder, "Gate.gif"))
            imageDictionary("picKey") = Image.FromFile(Path.Combine(ImagesFolder, "Key.gif"))
            imageDictionary("picLazer1") = Image.FromFile(Path.Combine(ImagesFolder, "Lazer1.gif"))
            imageDictionary("picLazer2") = Image.FromFile(Path.Combine(ImagesFolder, "Lazer2.gif"))
            imageDictionary("picWarp") = Image.FromFile(Path.Combine(ImagesFolder, "Warp.gif"))
            imageDictionary("picWarp2") = Image.FromFile(Path.Combine(ImagesFolder, "Warp2.gif"))
            imageDictionary("picStart") = Image.FromFile(Path.Combine(ImagesFolder, "Guy.gif"))
            imageDictionary("picBlockStopper1") = Image.FromFile(Path.Combine(ImagesFolder, "Debris1.png"))
            ' Add other images similarly...

            ' List of image keys that are animated
            Dim animatedImageKeys As String() = {
                "picBaddy1", "picBaddy2", "picBaddy3", "picBaddy4",
                "picLazer1", "picLazer2", "picFlipper1", "picFlipper2",
                "picFlipper3", "picFlipper4", "picCoin", "picGate",
                "picKey", "picFinish", "picBall", "picBomb",
                "picWarp", "picWarp2", "picStart"
            }

            ' Add images that require animation to the animatedImages list
            For Each imgKey In animatedImageKeys
                If imageDictionary.ContainsKey(imgKey) Then
                    Dim img As Image = imageDictionary(imgKey)
                    animatedImages.Add(img)
                    ImageAnimator.Animate(img, AddressOf OnFrameChanged)
                End If
            Next
        Catch ex As Exception
            MessageBox.Show("Error loading images: " & ex.Message)
        End Try
    End Sub

    ' Event handler for animation timer tick
    Private Sub OnAnimationTick(sender As Object, e As EventArgs)
        For Each img In animatedImages
            ImageAnimator.UpdateFrames(img)
        Next
        picTest.Invalidate()
    End Sub

    ' Event handler for image frame change (required by ImageAnimator)
    Private Sub OnFrameChanged(o As Object, e As EventArgs)
        ' Required but can be left empty
    End Sub

    Private Sub picTest_Paint(sender As Object, e As PaintEventArgs) Handles picTest.Paint
        If Not isRoomDataLoaded Then
            Return
        End If

        ' Fill the entire background with the walls' hatch style and colors
        Using backgroundBrush As New HatchBrush(wallsHatchStyle, wallsColor1, wallsColor2)
            e.Graphics.FillRectangle(backgroundBrush, picTest.ClientRectangle)
        End Using

        ' Calculate square sizes based on the current size of picTest
        CalculateSquareSizes(picTest.ClientSize.Width, picTest.ClientSize.Height)

        e.Graphics.SmoothingMode = SmoothingMode.None

        ' Draw the game grid, walls, and items
        DrawGrid(e.Graphics)
    End Sub

    ' Method to calculate square sizes based on control size
    Private Sub CalculateSquareSizes(clientWidth As Integer, clientHeight As Integer)
        SQSizeX = (clientWidth - 2 * INDENT - (SQCOUNTX + 1) * WALL_THICKNESS) \ SQCOUNTX
        SQSizeY = (clientHeight - 2 * INDENT - (SQCOUNTY + 1) * WALL_THICKNESS) \ SQCOUNTY
    End Sub

    ' Method to draw the grid, walls, and items
    Private Sub DrawGrid(g As Graphics)
        Dim xOrigin As Integer = INDENT
        Dim yOrigin As Integer = INDENT

        ' Draw floor squares
        For x As Integer = 0 To SQCOUNTX - 1
            For y As Integer = 0 To SQCOUNTY - 1
                Dim floorRect As New Rectangle(
                    xOrigin + x * (SQSizeX + WALL_THICKNESS) + WALL_THICKNESS \ 2,
                    yOrigin + y * (SQSizeY + WALL_THICKNESS) + WALL_THICKNESS \ 2,
                    SQSizeX,
                    SQSizeY
                )

                If floorsUseEdgeStyle IsNot Nothing AndAlso floorsUseEdgeStyle.Length > x AndAlso
                   floorsUseEdgeStyle(x) IsNot Nothing AndAlso floorsUseEdgeStyle(x).Length > y AndAlso
                   floorsUseEdgeStyle(x)(y) Then

                    ' Draw with wall's hatch style and colors (edge style)
                    Using floorBrush As New HatchBrush(wallsHatchStyle, wallsColor1, wallsColor2)
                        g.FillRectangle(floorBrush, floorRect)
                    End Using
                Else
                    ' Draw with floor's hatch style and colors
                    Using floorBrush As New HatchBrush(floorsHatchStyle, floorsColor1, floorsColor2)
                        g.FillRectangle(floorBrush, floorRect)
                    End Using
                End If
            Next
        Next

        ' Draw wall intersections
        For x As Integer = 0 To SQCOUNTX
            For y As Integer = 0 To SQCOUNTY
                Dim intersectionRect As New Rectangle(
                    xOrigin + x * (SQSizeX + WALL_THICKNESS) - WALL_THICKNESS \ 2,
                    yOrigin + y * (SQSizeY + WALL_THICKNESS) - WALL_THICKNESS \ 2,
                    WALL_THICKNESS,
                    WALL_THICKNESS
                )
                Using wallBrush As New HatchBrush(wallsHatchStyle, wallsColor1, wallsColor2)
                    g.FillRectangle(wallBrush, intersectionRect)
                End Using
            Next
        Next

        ' Draw vertical walls or floor
        For x As Integer = 0 To SQCOUNTX
            For y As Integer = 0 To SQCOUNTY - 1
                Dim wallRect As New Rectangle(
                    xOrigin + x * (SQSizeX + WALL_THICKNESS) - WALL_THICKNESS \ 2,
                    yOrigin + y * (SQSizeY + WALL_THICKNESS) + WALL_THICKNESS \ 2,
                    WALL_THICKNESS,
                    SQSizeY
                )

                If x >= 0 AndAlso x < verticalWalls.Length AndAlso
                   verticalWalls(x) IsNot Nothing AndAlso
                   y >= 0 AndAlso y < verticalWalls(x).Length Then

                    If verticalWalls(x)(y) Then
                        ' Draw wall
                        Using wallBrush As New HatchBrush(wallsHatchStyle, wallsColor1, wallsColor2)
                            g.FillRectangle(wallBrush, wallRect)
                        End Using
                    Else
                        ' Draw floor
                        Using floorBrush As New HatchBrush(floorsHatchStyle, floorsColor1, floorsColor2)
                            g.FillRectangle(floorBrush, wallRect)
                        End Using
                    End If
                End If
            Next
        Next

        ' Draw horizontal walls or floor
        For x As Integer = 0 To SQCOUNTX - 1
            For y As Integer = 0 To SQCOUNTY
                Dim wallRect As New Rectangle(
                    xOrigin + x * (SQSizeX + WALL_THICKNESS) + WALL_THICKNESS \ 2,
                    yOrigin + y * (SQSizeY + WALL_THICKNESS) - WALL_THICKNESS \ 2,
                    SQSizeX,
                    WALL_THICKNESS
                )

                If x >= 0 AndAlso x < horizontalWalls.Length AndAlso
                   horizontalWalls(x) IsNot Nothing AndAlso
                   y >= 0 AndAlso y < horizontalWalls(x).Length Then

                    If horizontalWalls(x)(y) Then
                        ' Draw wall
                        Using wallBrush As New HatchBrush(wallsHatchStyle, wallsColor1, wallsColor2)
                            g.FillRectangle(wallBrush, wallRect)
                        End Using
                    Else
                        ' Draw floor
                        Using floorBrush As New HatchBrush(floorsHatchStyle, floorsColor1, floorsColor2)
                            g.FillRectangle(floorBrush, wallRect)
                        End Using
                    End If
                End If
            Next
        Next

        ' Draw items on the floor squares
        DrawItems(g)

        ' Draw items on the walls
        DrawWallItems(g)
    End Sub

    ' Method to draw items on floor squares
    Private Sub DrawItems(g As Graphics)
        If placedItems Is Nothing Then Return

        For x As Integer = 0 To placedItems.Length - 1
            If placedItems(x) IsNot Nothing Then
                For y As Integer = 0 To placedItems(x).Length - 1
                    Dim imageKey As String = placedItems(x)(y)
                    If Not String.IsNullOrEmpty(imageKey) AndAlso imageDictionary.ContainsKey(imageKey) Then
                        Dim img As Image = imageDictionary(imageKey)
                        Dim xPos As Integer = INDENT + x * (SQSizeX + WALL_THICKNESS) + WALL_THICKNESS \ 2
                        Dim yPos As Integer = INDENT + y * (SQSizeY + WALL_THICKNESS) + WALL_THICKNESS \ 2
                        Dim destRect As New Rectangle(xPos, yPos, SQSizeX, SQSizeY)

                        ' Draw the item
                        g.DrawImage(img, destRect)
                    End If
                Next
            End If
        Next
    End Sub

    ' Method to draw items on walls
    Private Sub DrawWallItems(g As Graphics)
        ' Draw vertical wall items
        If verticalWallItems IsNot Nothing Then
            For x As Integer = 0 To verticalWallItems.Length - 1
                If verticalWallItems(x) IsNot Nothing Then
                    For y As Integer = 0 To verticalWallItems(x).Length - 1
                        Dim imageKey As String = verticalWallItems(x)(y)
                        If Not String.IsNullOrEmpty(imageKey) AndAlso imageDictionary.ContainsKey(imageKey) Then
                            Dim img As Image = imageDictionary(imageKey)
                            ImageAnimator.UpdateFrames(img)
                            Dim wallX As Integer = INDENT + x * (SQSizeX + WALL_THICKNESS) - (WALL_THICKNESS \ 2)
                            Dim wallY As Integer = INDENT + y * (SQSizeY + WALL_THICKNESS) + (WALL_THICKNESS \ 2)
                            Dim wallWidth As Integer = WALL_THICKNESS
                            Dim wallHeight As Integer = SQSizeY

                            ' Keep original image width, stretch height
                            Dim newWidth As Integer = img.Width
                            Dim newHeight As Integer = wallHeight

                            ' Center horizontally
                            Dim centeredX As Integer = wallX + (wallWidth - newWidth) \ 2

                            Dim drawRect As New Rectangle(centeredX, wallY, newWidth, newHeight)
                            g.DrawImage(img, drawRect)
                        End If
                    Next
                End If
            Next
        End If

        ' Draw horizontal wall items
        If horizontalWallItems IsNot Nothing Then
            For x As Integer = 0 To horizontalWallItems.Length - 1
                If horizontalWallItems(x) IsNot Nothing Then
                    For y As Integer = 0 To horizontalWallItems(x).Length - 1
                        Dim imageKey As String = horizontalWallItems(x)(y)
                        If Not String.IsNullOrEmpty(imageKey) AndAlso imageDictionary.ContainsKey(imageKey) Then
                            Dim img As Image = imageDictionary(imageKey)
                            ImageAnimator.UpdateFrames(img)
                            Dim wallX As Integer = INDENT + x * (SQSizeX + WALL_THICKNESS) + (WALL_THICKNESS \ 2)
                            Dim wallY As Integer = INDENT + y * (SQSizeY + WALL_THICKNESS) - (WALL_THICKNESS \ 2)
                            Dim wallWidth As Integer = SQSizeX
                            Dim wallHeight As Integer = WALL_THICKNESS

                            ' Stretch width, keep original image height
                            Dim newWidth As Integer = wallWidth
                            Dim newHeight As Integer = img.Height

                            ' Center vertically
                            Dim centeredY As Integer = wallY + (wallHeight - newHeight) \ 2

                            Dim drawRect As New Rectangle(wallX, centeredY, newWidth, newHeight)
                            g.DrawImage(img, drawRect)
                        End If
                    Next
                End If
            Next
        End If
    End Sub

    ' Helper method to get the project directory
    Private Function GetProjectDirectory() As String
        Dim dir As DirectoryInfo = New DirectoryInfo(Application.StartupPath)
        For i As Integer = 1 To 4 ' Adjust this number based on your directory structure
            If dir.Parent IsNot Nothing Then
                dir = dir.Parent
            End If
        Next
        Return dir.FullName
    End Function

    ' Ensure that the animation timer is disposed when the form closes
    Private Sub frmGame_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        If animationTimer IsNot Nothing Then
            animationTimer.Stop()
            animationTimer.Dispose()
            animationTimer = Nothing
        End If

        If musicPlayer IsNot Nothing Then
            musicPlayer.Stop()
            musicPlayer.Dispose()
            musicPlayer = Nothing
        End If
    End Sub

    Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
        Me.Close()
    End Sub
End Class

Public Class SimpleRoomData
    ' Existing properties...
    Public WallsHatchStyleValue As Integer
    Public WallsColor1Argb As Integer
    Public WallsColor2Argb As Integer
    Public FloorsHatchStyleValue As Integer
    Public FloorsColor1Argb As Integer
    Public FloorsColor2Argb As Integer
    Public VerticalWalls()() As Boolean
    Public HorizontalWalls()() As Boolean
    Public PlacedItems()() As String
    Public VerticalWallItems()() As String
    Public HorizontalWallItems()() As String
    Public FloorsUseEdgeStyle()() As Boolean

    ' Add these new properties:
    Public LevelName As String
    Public SelectedMusic As String
End Class