You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制台类谷歌恐龙游戏不同对象速度调整:恐龙速度恒定、障碍物增速

问题分析

你当前的实现用同一个speed变量控制全局帧的休眠时长,恐龙跳跃动画、障碍物移动、输入检测都绑定在同一个帧刷新频率上,所以修改speed值时二者速度会同步变化。

实现方案

要实现障碍物提速、恐龙速度恒定的效果,只需要把二者的刷新逻辑拆开即可,具体步骤如下:

  • 新增两个独立的控制变量:
    • 固定值的const int BASE_FRAME_DELAY = 20; 作为全局基础帧间隔,控制恐龙跳跃动画、输入检测的刷新频率,全程不变,保证恐龙移动速度恒定
    • 可变的int obstacle_move_delay = 100; 作为障碍物移动的时间阈值,随游戏进程逐步调小,实现障碍物加速
  • 新增障碍物移动计时器,单独统计障碍物的移动触发时机
  • 把原代码末尾的休眠参数替换为固定的BASE_FRAME_DELAY

修改后的核心代码参考:

// 新增全局变量
const int BASE_FRAME_DELAY = 20; // 全局基础帧间隔,固定不变
int obstacle_move_delay = 100; // 障碍物移动间隔,随游戏进度减小
int obstacle_timer = 0; // 障碍物移动计时器

while (1)
{
    // 原有恐龙跳跃逻辑完全保留,不需要修改
    if (GetAsyncKeyState(VK_SPACE) < 0 || action) // 检测用户是否按空格
    {
        if (!action) button = _getch();

        if (button == VK_SPACE) // 处理恐龙上下移动逻辑
        {
            action = 1;

            if (loop < 6)
            {
                std::queue<Position> tempQue = dinoPos;

                for (size_t i = 0; i < DINOSIZE; i++)
                {
                    setCursor(dinoPos.front().x, dinoPos.front().y); dinoPos.pop();
                    std::cout << " ";
                }

                for (size_t i = 0; i < DINOSIZE; i++)
                {
                    setCursor(tempQue.front().x, tempQue.front().y - 1);
                    tempQue.front().y -= 1;
                    dinoPos.push(tempQue.front());
                    tempQue.pop();
                    std::cout << "D";
                }
            }
            loop++;
            if (loop == 12)
            {
                loop = 0;
                action = 0;
            }
        }
    }

    // 新增障碍物移动逻辑
    obstacle_timer += BASE_FRAME_DELAY;
    if (obstacle_timer >= obstacle_move_delay) {
        // 此处放置你原有障碍物左移的代码
        obstacle_timer = 0;
    }

    // 玩家通过障碍物时,仅修改obstacle_move_delay实现障碍物加速,示例如下:
    // if (玩家通过障碍物判定成立) {
    //     obstacle_move_delay = max(20, obstacle_move_delay - 5);
    // }

    std::this_thread::sleep_for(std::chrono::milliseconds(BASE_FRAME_DELAY)); // 休眠改为固定值
}

内容的提问来源于stack exchange,提问作者covenant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 09:18:01