基于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() 关闭

相关推荐
BestOrNothing_20152 小时前
C++零基础到工程实战(4.3.3):vector数组访问与遍历
c++·迭代器·stl·vector·动态数组
charlie1145141912 小时前
通用GUI编程技术——图形渲染实战(三十三)——Direct2D与Win32/GDI互操作:渐进迁移实战
c++·图形渲染·gui·win32
文祐2 小时前
C++类之虚函数表及其内存布局(一个子类继承一个父类)
开发语言·c++
墨尘笔尖4 小时前
最大最小值降采样算法的优化
c++·算法
glimix4 小时前
Word-Pop:使用C语言开发打单词游戏
c语言·游戏
YIN_尹5 小时前
【Linux系统编程】进程地址空间
linux·c++
EverestVIP5 小时前
C++中空类通常大小为1的原理
c++
网域小星球6 小时前
C++ 从 0 入门(六)|C++ 面试必知:运算符重载、异常处理、动态内存进阶(终极补充)
开发语言·c++·面试
晚会者荣6 小时前
红黑树的插入(有图)
c++
John.Lewis7 小时前
C++进阶(12)附加学习:STL之空间配置器(了解)
开发语言·c++·笔记