找回密码
 立即注册
    查看: 5|回复: 0

    小赛车 前端封装

    [复制链接]

    326

    主题

    66

    回帖

    1466

    积分

    积分
    1466
    发表于 2025-3-1 20:37:46 | 显示全部楼层 |阅读模式
    1. -- 创建主窗口(横屏模式:1020x600)
    2. local win = GUI:Win_Create("Win_1", 0, 0, 1020, 600)

    3. -- 黑屏界面
    4. local blackScreen = GUI:Layout_Create(win, "BlackScreen", 0, 0, 1020, 600, true)
    5. GUI:Layout_setBackGroundColorType(blackScreen, 1)
    6. GUI:Layout_setBackGroundColor(blackScreen, "#000000")  -- 黑色背景

    7. -- 开始游戏按钮
    8. local btnStart = GUI:Button_Create(blackScreen, "BtnStart", 410, 350, "res/public/btn_normal_11.png")
    9. GUI:Button_setTitleText(btnStart, "开始游戏")

    10. -- 关闭游戏按钮
    11. local btnClose = GUI:Button_Create(blackScreen, "BtnClose", 410, 250, "res/public/btn_fubenan_01_1.png")
    12. GUI:Button_setTitleText(btnClose, "关闭游戏")

    13. -- 游戏区域
    14. local gameArea = GUI:Layout_Create(win, "GameArea", 0, 0, 1020, 600, true)
    15. GUI:Layout_setBackGroundColorType(gameArea, 1)
    16. GUI:Layout_setBackGroundColor(gameArea, "#000000")  -- 黑色背景
    17. GUI:setVisible(gameArea, false)  -- 初始隐藏游戏区域

    18. -- 赛道背景
    19. local track = GUI:Image_Create(gameArea, "Track", 0, 0, "res/public/lu.png")
    20. GUI:setContentSize(track, 1020, 600)  -- 设置背景大小

    21. -- 玩家赛车
    22. local car = GUI:Image_Create(gameArea, "Car", 480, 100, "res/public/car.png")
    23. GUI:setContentSize(car, 50, 50)  -- 设置赛车大小

    24. -- 障碍物
    25. local obstacles = {}
    26. local OBSTACLE_SPEED = 5  -- 障碍物下落速度
    27. local CAR_SPEED = 10      -- 赛车移动速度

    28. -- 得分
    29. local score = 0
    30. local scoreText = GUI:Text_Create(gameArea, "ScoreText", 500, 550, 24, "#ffffff", "得分: 0")  -- 修正文本创建

    31. -- 游戏状态
    32. local isGameOver = false

    33. -- 生成障碍物
    34. local function createObstacle()
    35.     local x = math.random(100, 920)  -- 随机生成障碍物的 X 坐标
    36.     local obstacle = GUI:Image_Create(gameArea, "Obstacle_" .. #obstacles + 1, x, 700, "res/public/zhangai.png")
    37.     GUI:setContentSize(obstacle, 50, 50)  -- 设置障碍物大小
    38.    SL:print("障碍物", GUI:getName(obstacle))
    39.     table.insert(obstacles, obstacle)
    40. end

    41. -- 更新障碍物位置
    42. local function updateObstacles()
    43.     for i = #obstacles, 1, -1 do
    44.       -- SL:print(#obstacles,GUI:getName(obstacles[i]))
    45.         local obstacle = obstacles[i]
    46.   
    47.         local pos = GUI:getPosition(obstacle)

    48.       
    49.        x,y = pos.x , pos.y
    50.        GUI:setPosition(obstacle, x, y-30)
    51.         -- 如果障碍物超出屏幕,移除
    52.         if y < -50 then
    53.             GUI:removeFromParent(obstacle)
    54.             table.remove(obstacles, i)
    55.             score = score + 1
    56.             GUI:Text_setString(scoreText, "得分: " .. score)
    57.         end

    58.         -- 碰撞检测
    59.         local carpos = GUI:getPosition(car)


    60.         carX,carY = carpos.x , carpos.y
    61.         if math.abs(x - carX) < 50 and math.abs(y - carY) < 50 then
    62.             isGameOver = true
    63.         end
    64.     end
    65. end

    66. -- 游戏循环
    67. local function gameLoop()
    68.     if isGameOver then
    69.        GUI:Text_setString(scoreText, "游戏结束! 得分: " .. score)

    70.         return
    71.     end

    72.     -- 更新障碍物
    73.     updateObstacles()

    74.     -- 生成新障碍物
    75.     if math.random(1, 20) == 1 then
    76.      
    77.         createObstacle()
    78.     end
    79. end

    80. -- 启动定时器
    81. local gameTimer = nil

    82. -- 开始游戏
    83. local function startGame()
    84.     GUI:setVisible(blackScreen, false)  -- 隐藏黑屏界面
    85.     GUI:setVisible(gameArea, true)      -- 显示游戏区域
    86.     isGameOver = false
    87.     score = 0
    88.     GUI:Text_setString(scoreText, "得分: 0")

    89.     -- 清空障碍物
    90.     for i = #obstacles, 1, -1 do
    91.         GUI:removeFromParent(obstacles[i])
    92.         table.remove(obstacles, i)
    93.     end

    94.     -- 启动游戏循环
    95.     gameTimer = GUI:schedule(win, gameLoop, 0.05)  -- 每 0.05 秒更新一次
    96. end

    97. -- 关闭游戏
    98. local function closeGame()
    99.     GUI:setVisible(blackScreen, true)  -- 显示黑屏界面
    100.     GUI:setVisible(gameArea, false)    -- 隐藏游戏区域
    101.     if gameTimer then
    102.         GUI:unSchedule(gameTimer)       -- 停止游戏循环
    103.         gameTimer = nil
    104.     end
    105. end

    106. -- 设置按钮点击事件
    107. GUI:addOnClickEvent(btnStart, startGame)
    108. GUI:addOnClickEvent(btnClose, closeGame)

    109. -- 键盘控制
    110. -- 左键:左移
    111. GUI:addKeyboardEvent("KEY_LEFT_ARROW", function()

    112.     local pos = GUI:getPosition(car)

    113.     -- GUI:setPosition(obstacle, x, y)
    114.    x,y = pos.x , pos.y


    115.     x = x - CAR_SPEED
    116.     if x < 100 then x = 100 end  -- 限制左边界
    117.     GUI:setPosition(car, x, y)
    118. end)

    119. -- 右键:右移
    120. GUI:addKeyboardEvent("KEY_RIGHT_ARROW", function()
    121.   local pos = GUI:getPosition(car)

    122.   -- GUI:setPosition(obstacle, x, y)
    123. x,y = pos.x , pos.y
    124.     x = x + CAR_SPEED
    125.     if x > 920 then x = 920 end  -- 限制右边界
    126.     GUI:setPosition(car, x, y)
    127. end)
    复制代码



    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则