Код:
InitSprite()
InitKeyboard()

; Настройки игры
#WindowWidth = 400
#WindowHeight = 600
#PlayerWidth = 40
#PlayerHeight = 80
#ObstacleWidth = 40
#ObstacleHeight = 80
#Speed = 5

; Переменные
Global playerX = (#WindowWidth - #PlayerWidth) / 2
Global playerY = #WindowHeight - #PlayerHeight - 10
Global Dim obstacles(10, 2)
Global obstacleSpeed = 5
Global score = 0
Global gameOver.s = "Game Over"

; Функция инициализации игры
Procedure InitGame()
  For i = 0 To 10
    obstacles(i, 0) = Random(#WindowWidth - #ObstacleWidth)
    obstacles(i, 1) = -Random(#WindowHeight)
  Next
EndProcedure

; Функция отрисовки элементов
Procedure DrawGame()
  ; Очищаем экран
  ClearScreen(0)
  StartDrawing(ScreenOutput())
  ; Рисуем игрока
  Box(playerX, playerY, #PlayerWidth, #PlayerHeight, $0000ff)

  ; Рисуем препятствия
  For i = 0 To 10
    If obstacles(i, 1) >= 0  ; Проверяем, чтобы не рисовать за пределами экрана
      Box(obstacles(i, 0), obstacles(i, 1), #ObstacleWidth, #ObstacleHeight, $ff0000)
    EndIf
  Next
  
  ; Отображаем счет
  DrawText(10, 10, "Очки: " + Str(score))
  StopDrawing()
  ; Переключаем буферы
  FlipBuffers()
EndProcedure

; Функция проверки столкновений
Procedure CheckCollision()
  For i = 0 To 10
    If obstacles(i, 1) >= 0 And obstacles(i, 1) < #WindowHeight
      If playerX < obstacles(i, 0) + #ObstacleWidth And playerX + #PlayerWidth > obstacles(i, 0) And playerY < obstacles(i, 1) + #ObstacleHeight And playerY + #PlayerHeight > obstacles(i, 1)
        ProcedureReturn #True
      EndIf
    EndIf
  Next
  ProcedureReturn #False
EndProcedure

; Основной игровой цикл
OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, "Гонки", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),1,1,#WindowWidth,#WindowHeight)
InitGame()

While Not WindowEvent() = #PB_Event_CloseWindow
  ; Обработка ввода
  If ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Left) And playerX > 0
      playerX - #Speed
    ElseIf KeyboardPushed(#PB_Key_Right) And playerX < #WindowWidth - #PlayerWidth
      playerX + #Speed
    EndIf
  EndIf
  
  ; Движение препятствий
  For i = 0 To 10
    obstacles(i, 1) + obstacleSpeed
    If obstacles(i, 1) > #WindowHeight
      obstacles(i, 1) = -#ObstacleHeight
      obstacles(i, 0) = Random(#WindowWidth - #ObstacleWidth)
      score + 1  ; Увеличиваем счет при успешном избегании
    EndIf
  Next
  
  ; Проверка столкновений
  If CheckCollision()
    MessageRequester(gameOver, "Вы столкнулись!", #PB_MessageRequester_Ok)
    Break
  EndIf

  ; Отрисовка
  DrawGame()
  
  Delay(30)  ; Задержка для управления скоростью игры
Wend