Module TestKonsoli

    Private NewX, NewY, X, Y As Integer
    Private BadGuyX, BadGuyY As Integer

    Public Sub Main()
        ' Tworzymy okno z 50 kolumnami i 20 wierszami
        Console.SetWindowSize(50, 20)
        Console.SetBufferSize(50, 20)

        ' Konfigurujemy okno
        Console.Title = "Przesuń wesołą buźkę"
        Console.CursorVisible = False
        Console.BackgroundColor = ConsoleColor.DarkBlue
        Console.Clear()

        ' Wyświetlamy ikonę
        Console.ForegroundColor = ConsoleColor.Yellow
        Console.SetCursorPosition(X, Y)
        Console.Write("☺")

        ' Odczytujemy naciśnięcia klawiszy
        Dim KeyPress As ConsoleKey
        Do
            KeyPress = Console.ReadKey().Key

            ' Jeśli jest to klawisz strzałki, zmieniamy pozycję buźki
            Select Case KeyPress
                Case ConsoleKey.LeftArrow
                    NewX -= 1
                Case ConsoleKey.RightArrow
                    NewX += 1
                Case ConsoleKey.UpArrow
                    NewY -= 1
                Case ConsoleKey.DownArrow
                    NewY += 1
            End Select

            MoveToPosition()

        Loop While KeyPress <> ConsoleKey.Escape

        ' Przywracamy zwykłe ustawienia konsoli
        Console.ResetColor()
        Console.Clear()
    End Sub

    Private Sub MoveToPosition()
        ' Sprawdzamy, czy użytkownik nie próbuje wyjść poza ekran
        If NewX = Console.WindowWidth Or NewX < 0 Or _
          NewY = Console.WindowHeight Or NewY < 0 Then
            ' Przywracamy poprzednie położenie
            NewY = Y
            NewX = X
            Console.Beep()
        Else
            ' Rysujemy buźkę w nowym położeniu
            Console.MoveBufferArea(X, Y, 1, 1, NewX, NewY)
            ' Rysujemy ślad
            Console.SetCursorPosition(X, Y)
            Console.Write("*")
            X = NewX
            Y = NewY
            Console.SetCursorPosition(0, 0)
        End If
    End Sub

End Module
