基于EGE19.01完成恐龙跳跃游戏-V00-C++使用EGE19.01这个轮子

C++ 多文件编程教学(纯控制台)

先说说什么是不要重复造轮子


"重复造轮子"的英文是"Reinventing the wheel",更准确的翻译是"重复发明轮子" 。大家都知道,圆形车轮是最好的选择,但如果你非要发明一种新形状的轮子,那就叫"重复发明轮子"。类比到IT行业,就是明知道你的项目不可能比前辈做得更好,却仍然坚持要做。比如一些框架、库、工具等等。

根据这个定义来看,为什么说**"不要重复造轮子"的原因就显而易见了**。这是一种严重拖慢项目进度和工作节奏的做法 。我们都知道程序员每天都要跟代码打交道。但一个成熟的轮子,这不是简简单单一两个程序员就能完成的工作。

放着成熟的轮子不使用,反而闷头造轮子。浪费时间都是小事儿,新造的轮子是否稳定,能否完成项目需求,在使用过程中会不会引起其他问题,这些都是未知数 。一旦因为这样的问题导致项目搁浅或者崩盘,那就不是造不造轮子的问题了,而是要不要找工作的问题了。
任何事物都有两面性,造轮子也不例外 。比如,现成的所有轮子都不能完美匹配我们的需求 ,那就只能自己在这些轮子的基础上造适合自己的轮子。这是无奈之举,但也会对个人的能力带来很大的提升。

除此之外,还有在学习过程中,单纯为了提升自己 。拿到一个轮子开始学着造,轮子就算做完也没指望能用在哪里,只是以此作为一个学习手段。这种学习方法无论是对于刚入行渴望提升技术的小白,还是希望在某些方面稍微精进一下的老手,都是极好的

DevC++中使用EGE这个轮子

DevC++中配置EGE的过程参考

DEV-C++和VsCode配合ege19.01项目

中的这个板块

EGE19这个库的用法

一、EGE 是什么

EGE 是一个C++ 图形库,可以让你用代码画出:窗口、线条、矩形、圆形、文字、图片、小游戏等。

二、必须会的 6 个基础函数(学生必背)

函数 作用
initgraph(width, height); 创建图形窗口
closegraph(); 关闭图形窗口
getch(); 暂停窗口,不让它一闪而过
setcolor(RED); 设置画笔颜色
line(x1,y1,x2,y2); 画直线
outtextxy(x,y,"文字"); 在窗口上输出文字

三、最简单入门程序:打开一个窗口

cpp 复制代码
#include <graphics.h>  // EGE 头文件

int main()
{
    // 1. 创建窗口:宽 640,高 480
    initgraph(640, 480);

    // 窗口会停在这里
    getch();

    // 关闭窗口
    closegraph();
    return 0;
}

四、基础案例 1:画线条 + 矩形 + 圆形

cpp 复制代码
#include <graphics.h>

int main()
{
    initgraph(640, 480);

    setcolor(RED);        // 红色画笔
    line(100,100, 300,100); // 画线

    setcolor(GREEN);
    rectangle(100,150, 300,250); // 画矩形

    setcolor(BLUE);
    circle(320,240, 50); // 画圆形

    getch();
    closegraph();
    return 0;
}

五、基础案例 2:窗口上显示文字

cpp 复制代码
#include <graphics.h>

int main()
{
    initgraph(640, 480);

    // 设置字体大小
    setfont(40, 0, "微软雅黑");

    // 在 (100,100) 位置输出文字
    outtextxy(100, 100, "Hello EGE!");
    outtextxy(100, 180, "欢迎来到图形编程");

    getch();
    closegraph();
    return 0;
}

需要注意的事情,在DevC++中,可以直接输出中文,而在VSCode中需要加宽字符



cpp 复制代码
// EGE图形库核心头文件,必须包含
#include <graphics.h>

// 宽字符支持头文件(用于处理中文等多字节字符)
#include <cwchar>

// 本地化头文件,用于解决中文显示乱码问题
#include <locale.h>

// 程序主函数,程序入口
int main()
{
    // ======================================
    // 【核心】设置编码为 UTF-8,解决中文乱码
    // 全程统一使用 UTF-8 编码,不报错、不乱码
    // ======================================
    setlocale(LC_ALL, ".UTF-8");

    // ======================================
    // 1. 初始化图形窗口
    // 参数:宽度 800,高度 400
    // ======================================
    initgraph(800, 400);

    // ======================================
    // 2. 设置窗口背景颜色为白色
    // ======================================
    setbkcolor(WHITE);

    // ======================================
    // 3. 清空屏幕,应用背景色
    // ======================================
    cleardevice();

    // ======================================
    // 4. 设置字体样式
    // 参数1:字体高度 40
    // 参数2:字体宽度 0(自动适配)
    // 参数3:字体名称:微软雅黑
    // 【注意】这里不使用 L,全程 UTF-8 兼容
    // ======================================
    setfont(40, 0, "微软雅黑");

    // ======================================
    // 5. 设置文字颜色为蓝色
    // ======================================
    setcolor(BLUE);

    // ======================================
    // 6. 在窗口指定坐标输出中文文本
    // 格式:outtextxy(x坐标, y坐标, "文字内容")
    // 直接写中文,无需 L 前缀,UTF-8 稳定显示
    // ======================================
    outtextxy(200, 100, "欢迎使用 EGE 图形库");
    outtextxy(200, 180, "全程 UTF-8 编码,无乱码");
    outtextxy(200, 260, "不报错、不炸编码、稳定运行");

    // ======================================
    // 等待用户按任意键,防止窗口一闪而过
    // ======================================
    getch();

    // ======================================
    // 关闭图形窗口,释放资源
    // ======================================
    closegraph();

    // 程序正常结束
    return 0;
}

六、基础案例 3:彩色背景 + 文字

cpp 复制代码
#include <graphics.h>

int main()
{
    initgraph(640, 480);

    setbkcolor(WHITE);    // 白色背景
    cleardevice();        // 刷新背景

    setcolor(BLACK);
    setfont(35, 0, "黑体");
    outtextxy(120, 200, "这是我的第一个EGE程序");

    getch();
    closegraph();
    return 0;
}

七、基础案例 4:移动的小球(最简单动画)

cpp 复制代码
// 包含 EGE 图形库头文件(必须有,才能使用画图函数)
#include <graphics.h>

// 主函数:程序入口
int main()
{
    // 1. 初始化图形窗口,宽度 640,高度 480
    initgraph(640, 480);

    // 小球的初始坐标 x(横向)、y(纵向)
    int x = 50, y = 240;

    // 2. 死循环:不断刷新画面,形成动画
    while (1)
    {
        // 设置背景颜色为白色
        setbkcolor(WHITE);
        // 清空屏幕,用背景色刷新整个窗口
        cleardevice();

        // 设置画笔颜色为红色
        setcolor(RED);
        // 画一个圆形:圆心 (x,y),半径 30
        circle(x, y, 30);

        // 让小球每次向右移动 2 个像素
        x += 2;
        // 暂停 10 毫秒,控制移动速度
        Sleep(10);
    }

    // 下面两行理论上不会执行,因为上面是死循环
    // 关闭图形窗口
    closegraph();
    // 程序正常结束
    return 0;
}

八、基础案例5:根据WASD移动的小球

cpp 复制代码
// 包含 EGE 图形库头文件(必须有,才能使用画图函数)
#include <graphics.h>

// 主函数:程序入口
int main()
{
    // 1. 初始化图形窗口,宽度 640,高度 480
    initgraph(640, 480);

    // 小球的初始坐标 x(横向)、y(纵向)
    int x = 50, y = 240;
    // 小球每次移动的速度
    int speed = 5;

    // 2. 死循环:不断刷新画面,形成动画
    while (1)
    {
        // ==========================================
        // 【键盘检测】获取用户按下的键
        // ==========================================
        if (kbhit()) { // 如果有按键被按下
            char key = getch(); // 获取按键字符

            // W:向上移动(y 减小)
            if (key == 'w' || key == 'W') {
                y -= speed;
            }
            // S:向下移动(y 增大)
            else if (key == 's' || key == 'S') {
                y += speed;
            }
            // A:向左移动(x 减小)
            else if (key == 'a' || key == 'A') {
                x -= speed;
            }
            // D:向右移动(x 增大)
            else if (key == 'd' || key == 'D') {
                x += speed;
            }
        }

        // ==========================================
        // 绘制画面
        // ==========================================
        // 设置背景颜色为白色
        setbkcolor(WHITE);
        // 清空屏幕,用背景色刷新整个窗口
        cleardevice();

        // 设置画笔颜色为红色
        setcolor(RED);
        // 画一个圆形:圆心 (x,y),半径 30
        circle(x, y, 30);

        // 暂停 10 毫秒,控制画面刷新率
        Sleep(10);
    }

    // 关闭图形窗口
    closegraph();
    // 程序正常结束
    return 0;
}

九、5 条超简规则

  1. 必须写 #include <graphics.h>
  2. 必须先 initgraph 创建窗口
  3. 画图前可以用 setcolor 设置颜色
  4. 最后用 getch() 让窗口停留
  5. 结束用 closegraph() 关闭

相关推荐
-许平安-2 小时前
MCP项目笔记六(PluginsLoader)
c++·笔记·raii·plugin system
呜喵王阿尔萨斯2 小时前
argc & argv
c语言·c++
Vect__3 小时前
std::bind和lambda的使用
c++
她叫我大水龙3 小时前
MSYS2的C/C++,python2,python3编译环境安装脚本
c语言·c++
宵时待雨4 小时前
C++笔记归纳17:哈希
数据结构·c++·笔记·算法·哈希算法
charlie1145141914 小时前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(2) —— HAL 库获取、启动文件坑位与目录搭建
linux·开发语言·c++·stm32·单片机·学习·嵌入式
问好眼4 小时前
《算法竞赛进阶指南》0x05 排序-1.电影
c++·算法·排序·信息学奥赛
CoderCodingNo4 小时前
【GESP】C++八级考试大纲知识点梳理 (6) 图论算法:最小生成树与最短路
c++·算法·图论
.YM.Z4 小时前
C++入门——缺省参数,函数重载,引用,inline函数,nullptr的介绍和使用
开发语言·c++