Код:
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