Skip to content

skywind3000/GameLib

Repository files navigation

GameLib.h

License: MIT C++ Standard Platform Header Only No Dependencies GCC 4.9+

给 C++ 初学者的游戏开发库 —— 单个头文件,零配置,拷贝即用。

学 C++ 最痛苦的是什么?几周下来只能在黑窗口里 cout 一行字。想用 SDL、SFML?光配环境就劝退一半人。GameLib 就是为了干掉这段痛苦:把 GameLib.h 丢进项目文件夹,写句 #include "GameLib.h",十行代码就能画出能用键盘操控的彩色圆。窗口、绘图、键盘、鼠标、精灵、声音、碰撞检测全都有,不需要下载 SDK,不需要配置路径,不需要链接任何库。

十行代码做个游戏

#include "GameLib.h"

int main()
{
    GameLib game;
    game.Open(640, 480, "My Game", true);

    int x = 320, y = 240;

    while (!game.IsClosed()) {
        if (game.IsKeyDown(KEY_LEFT))  x -= 3;
        if (game.IsKeyDown(KEY_RIGHT)) x += 3;
        if (game.IsKeyDown(KEY_UP))    y -= 3;
        if (game.IsKeyDown(KEY_DOWN))  y += 3;

        game.Clear(COLOR_BLACK);
        game.FillCircle(x, y, 15, COLOR_CYAN);
        game.DrawText(10, 10, "Up/Down/Left/Right to move!", COLOR_WHITE);
        game.Update();
        game.WaitFrame(60);
    }
    return 0;
}

快速上手

第一步 — 下载 GameLib.h,放到项目文件夹。

第二步 — 创建 main.cpp,写上方的代码。

第三步 — 编译运行:

g++ main.cpp -o game.exe -mwindows

Dev C++ 用户:新建项目 > 添加 main.cpp > 编译运行,完事。

不需要 -lgdi32 -lwinmm 等任何链接参数,所有依赖由库内动态加载,连参数 -mwindows 都是可选的(不加的话会有控制台窗口)。

为什么做这个?

市面上的游戏库(SDL、SFML、raylib)都很好,但对于刚接触 C++ 的初学者来说:

  • SDL 要配置头文件路径、链接十几个 dll,使用复杂
  • SFML 要用 CMake
  • raylib 需要懂线性代数,三维基础知识,熟练 C/C++,还需编译/安装。

GameLib 的目标是零门槛:把 GameLib.h 拷到项目文件夹,写一个 .cpp 文件,点编译,游戏就跑起来了。

它专门为 Dev C++(很多学校编程课在用的 IDE)设计,兼容其自带的 GCC 4.9.2 编译器。当然,任何支持 C++11 的 Windows 编译器都可以用。

特性亮点

  • 零配置 — 单头文件拷贝即用,无需安装/链接任何库,兼容 GCC 4.9.2(Dev C++)
  • 开箱绘图 — 点、线、矩形、圆、椭圆、三角(描边+填充),内置 8×8 像素字体,支持可缩放字体和 UTF-8
  • 精灵系统 — 整数 ID 管理,无需处理指针和资源释放,加载 PNG/JPG/BMP,帧动画/翻转/缩放/旋转/Alpha 混合
  • 键盘鼠标 — 按住/按下/松开检测,鼠标三键+滚轮,窗口失焦暂停
  • 声音 — WAV 音效 + MP3/MIDI 背景音乐,独立通道互不干扰
  • 碰撞检测 — 矩形重叠、圆碰撞、两点距离
  • Tilemap — 双层瓦片地图、视差滚动、只渲染可见区域,保存/载入 .glm 数据
  • 窗口缩放 — resizable 窗口自动拉伸,鼠标坐标自动映射回逻辑坐标
  • 场景管理 — 整数标识场景,switch 即可实现菜单→游戏→结算切换
  • 存档读写SaveInt/LoadInt 等一行代码存取,纯文本 key=value 格式
  • UI 控件 — Button、Checkbox、RadioBox、ToggleButton,即时模式零依赖
  • 跨平台 — SDL2 版 GameLib.SDL.h 支持 Linux/macOS/Web(详见 SDL2PORT.md)

适合做什么?

  • 太空射击 / 横版卷轴 / 俄罗斯方块 / 贪吃蛇 / 打砖块
  • 走迷宫 / 接水果 / 弹幕游戏
  • 回合制 RPG / 视觉小说 / 地图编辑器 / 画板程序
  • 课程作业演示(零配置交付)
  • 任何你想得到的 2D 游戏或互动程序

真实案例

使用 GameLib 制作的《Geometry Wars》游戏,玩起来精彩刺激,但 GIF 录屏效果损失太大,可以 点击试玩网页版 或者 访问源码

示例程序

examples/ 目录包含 15 个由浅入深的示例,每个兼容 Win32 和 SDL 两条产品线:

入门基础

示例 说明 学到什么
01_hello.cpp Hello World 游戏循环、窗口创建、文字绘制
02_movement.cpp 键盘移动 + 弹跳小球 键盘输入、GetDeltaTime、碰壁反弹
03_shapes.cpp 所有图形绘制展示 线、矩形、圆、椭圆、三角的描边与填充
04_paint.cpp 简易画板 鼠标输入、滚轮调笔刷、失焦暂停

精灵与声音

示例 说明 学到什么
05_sprites.cpp 精灵基础 + 帧动画 CreateSprite、方向动画
06_sound.cpp 声音播放演示 PlayBeep、PlayWAV、PlayMusic
07_shooting.cpp 简易射击 子弹发射、碰撞销毁

完整小游戏

示例 说明 学到什么
08_breakout.cpp 打砖块 碰撞检测、多对象管理
09_snake.cpp 贪吃蛇 DrawGrid/FillCell、状态机

Tilemap 与文字

示例 说明 学到什么
10_tilemap.cpp 双层视差卷轴 Tilemap、视差滚动
11_font_text.cpp 可缩放字体与 UI DrawTextFont、ShowMessage

高级特性

示例 说明 学到什么
12_sprite_transform.cpp 精灵缩放 + 旋转 DrawSpriteScaled/Rotated
13_clip_rect.cpp 裁剪矩形 SetClip/ClearClip
14_space_shooter.cpp 太空射击 综合实战
15_ui_controls.cpp UI 控件演示 Button、Checkbox、RadioBox

编译任意示例:

g++ -o 03_shapes.exe examples/03_shapes.cpp -mwindows

截图:03_shapes.cpp

截图:08_breakout.cpp

环境要求

Win32 主线:Windows 7+,任何 C++11 编译器(GCC 4.9+ / MSVC 2015+ / Clang),推荐 Dev C++、Visual Studio。

SDL 版:Linux/macOS/Windows,需要 SDL2 及可选扩展(详见 SDL2PORT.md)。

文档入口

资源推荐

想找游戏素材?试试这些:

协议

MIT License. 随便用。

About

Single-header C++ Game Library for Beginners — no SDL/DirectX/OpenGL, no setup, just include and play.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages