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