2303_80272031 2024-05-19 16:38 采纳率: 0%
浏览 15

如何修改EasyX贪吃蛇运行闪烁问题

贪吃蛇

EasyX写贪吃蛇运行界面闪烁很明显
可能是因为两次界面刷新时间过短的原因,但是在不破坏蛇的运行速度的情况下怎么去优化呢?

代码内容:

https://s2.loli.net/2024/05/19/lsDW4ijTObFp1J9.png

运行过程:

https://s2.loli.net/2024/05/19/nIhmuagTO6YfM3X.gif

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-19 16:38
    关注

    引自免费微信小程序:皆我百晓生

    为了减少EasyX环境下贪吃蛇游戏的界面闪烁,我们可以尝试增加每次刷新之间的等待时间。在你的代码中,可以通过在Sleep(10)函数中增加延迟的时间来实现这一目标。不过要注意的是,如果延迟时间过长,可能会导致游戏运行变慢。

    根据你的描述,目前的延迟是10毫秒。我们可以尝试将这个值稍微调大一些,比如增加到20或30毫秒,看看是否可以改善闪烁情况。这里提供了一个修改后的关键部分代码示例:

    #include <windows.h>
    #include "easyx.h"
    
    using namespace EasyX;
    
    int main()
    {
        int x = 3, y = 3;
        int dx = 0, dy = 0;
        bool flag = false;
        int food_x = rand() % 20 + 1, food_y = rand() % 20 + 1;
        int length = 1;
    
        while (true)
        {
            if (flag) Sleep(30); // 增加延迟至30毫秒
            else Sleep(10);   // 这里留着,用于游戏加速时恢复默认延迟
    
            cls();
    
            for (int i = 0; i < length; i++)
            {
                putpixel(x - i, y, RGB(255, 0, 0));
            }
    
            if (food_x == x && food_y == y)
            {
                food_x = rand() % 20 + 1;
                food_y = rand() % 20 + 1;
                length++;
            }
            else
            {
                putpixel(x - length + 1, y, RGB(255, 255, 255)); // 清除蛇尾
            }
    
            switch (_getch())
            {
            case 'w':
                if (dy != 1) dy = -1;
                break;
            case 's':
                if (dy != -1) dy = 1;
                break;
            case 'a':
                if (dx != 1) dx = -1;
                break;
            case 'd':
                if (dx != -1) dx = 1;
                break;
            }
    
            x += dx;
            y += dy;
    
            if (x < 1 || x > 20 || y < 1 || y > 20)
            {
                flag = true;
                break;
            }
    
            if (x == food_x && y == food_y)
            {
                food_x = rand() % 20 + 1;
                food_y = rand() % 20 + 1;
                length++;
            }
            else
            {
                putpixel(x - length + 1, y, RGB(255, 255, 255));
            }
    
            putpixel(food_x, food_y, RGB(0, 255, 0));
        }
    
        return 0;
    }
    

    这段代码首先检查了游戏是否已经结束(标志变量flag),如果是,则使用较长的延迟时间(30毫秒)。否则,保持原来的延迟时间(10毫秒)以便游戏在需要加速时能流畅进行。这样应该能有效减少界面闪烁。

    记得在实际应用中,你可能需要根据实际情况调整这个延迟时间,找到一个既能减少闪烁又不会影响游戏操作流畅度的最佳平衡点。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月19日

悬赏问题

  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥36 如何安全的迁移用户C盘用户文件(戴尔电脑)
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥20 手机截图相片分辨率降低一半