基于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 分钟前
【深度学习RL】DQN:深度强化学习的里程碑——让AI从像素中学会玩Atari游戏
论文阅读·人工智能·深度学习·游戏·transformer
一只旭宝3 分钟前
【C++入门精讲13】异常处理
c++
计算机安禾14 分钟前
【c++面向对象编程】第5篇:类与对象(四):赋值运算符重载
java·前端·c++
样例过了就是过了18 分钟前
LeetCode热题100 颜色分类
c++·算法·leetcode
ZPC821019 分钟前
C++ 跨平台 UDP 收发测试程序
c++·算法·机器人
hanbr23 分钟前
C++ 类型转换与异常处理全解析
开发语言·c++
ym_xixi25 分钟前
《类和对象》—— 构造函数与析构函数总结
前端·c++·算法
凯瑟琳.奥古斯特28 分钟前
丑数II C++三指针解法(力扣264)
数据结构·c++·算法·leetcode·职场和发展
YYYing.29 分钟前
【C++项目之高并发内存池 (四)】三层缓存的空间回收流程详解
c++·笔记·缓存·高并发·内存池
小小de风呀29 分钟前
de风——【从零开始学C++】(六):模板初阶
开发语言·c++