
























最近小孩在学 C++(信奥),学了堆语法以后不知道干嘛,学了一年也只会对着黑窗口打印内容,正反馈太弱了,不像其他语言,学个几天就能做出漂亮的东西来,恰巧他对开发游戏感兴趣,我扫了一眼现在 C++ 的游戏开发框架,都太复杂了,SDL 概念琐碎,SFML 使用麻烦,所以我写了个针对初学者的游戏库,只有一个头文件 GameLib.h 零依赖,拷贝到代码目录 include 就能用,十行代码就能出个小 demo:

本着简化一切的思想,使用起来比 PyGame 还要简单:
#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;
}
就这么几行代码,没有 SDL 里反锁的像素格式,消息机制,各种乱七八糟 SDL_ 开头的对象,也没有初始化就需要 500 行代码的 DirectX 那么麻烦,所有复杂的东西藏起来,只留下做游戏的乐趣。
编译:
g++ main.cpp -o game.exe
不需要加任何编译参数,很多初学者连命令行编译都不懂(比如我家小孩),只会直接在 DevC++ 里点编译+运行,让他们像用其他库一样添加一些类似 -ld3d9x 之类编译参数,可能直接就劝退一大群人,因此这个库完全使用默认编译参数,所有依赖都是动态库自己手工加载。
运行就能用方向键控制小球移动:

几行代码迅速看到反馈。
为什么做这个库呢?
市面上的游戏库(SDL、SFML、raylib)都很好,但对于刚接触 C++ 的初学者来说:
GameLib 的目标是零门槛:把 GameLib.h 拷到项目文件夹,写一个 .cpp 文件,点编译,游戏就跑起来了。
它专门为 Dev C++(很多学校编程课在用的 IDE)设计,兼容其自带的 GCC 4.9.2 编译器。当然,任何支持 C++11 的 Windows 编译器都可以用。
(点击下面展开更多)
特性一览
零配置:
开箱即用的绘图:
精灵系统:
键盘和鼠标:
声音:
游戏工具:
Tilemap 系统:
快速上手
第一步:下载
把 GameLib.h 放到你的项目文件夹里。
第二步: 写代码
创建一个 main.cpp:
#include "GameLib.h"
int main() {
GameLib game;
game.Open(800, 600, "Hello GameLib", true);
while (!game.IsClosed()) {
game.Clear(COLOR_DARK_BLUE);
game.DrawTextScale(200, 250, "Hello, World!", COLOR_GOLD, 3);
game.DrawText(280, 320, "Press ESC to exit", COLOR_GRAY);
if (game.IsKeyPressed(KEY_ESCAPE)) break;
game.Update();
game.WaitFrame(60);
}
return 0;
}
第三步:编译运行
Dev C++:新建项目 > 添加 main.cpp > 编译运行。
或者命令行:
g++ -o game.exe main.cpp -mwindows
就行了。
随机星空
再来个有点视觉效果的例子,随机星空:
#include "GameLib.h"
int main() {
GameLib game;
game.Open(800, 600, "Starfield", true);
// 生成 200 颗星星
int sx[200], sy[200], speed[200];
uint32_t colors[] = {COLOR_WHITE, COLOR_LIGHT_GRAY, COLOR_YELLOW, COLOR_CYAN};
for (int i = 0; i < 200; i++) {
sx[i] = GameLib::Random(0, 799);
sy[i] = GameLib::Random(0, 599);
speed[i] = GameLib::Random(1, 5);
}
while (!game.IsClosed()) {
game.Clear(COLOR_BLACK);
for (int i = 0; i < 200; i++) {
sx[i] -= speed[i];
if (sx[i] < 0) {
sx[i] = 800;
sy[i] = GameLib::Random(0, 599);
}
game.SetPixel(sx[i], sy[i], colors[speed[i] % 4]);
}
game.DrawText(250, 290, "Press ESC to exit", COLOR_GRAY);
if (game.IsKeyPressed(KEY_ESCAPE)) break;
game.Update();
game.WaitFrame(60);
}
return 0;
}
就这么简单,运行效果(点击播放 GIF 动画):

几行代码就能有看得见摸得着的东西,正反馈远远强过黑窗口打印文字。
这个 GameLib.h 适合开发哪些类型的游戏呢?
更多例子请访问项目主页:
https://github.com/skywind3000/GameLib
里面有 15 个例子程序,包括类似《打砖块》 ,《太空射击》之类游戏的代码:

一步一步教你从:窗口控制,键盘鼠标交互,图形绘制,精灵,音乐,卷轴等覆盖各个 GameLib.h 的功能点。
欢迎学会了 C++ 语法想做点什么的同学尝试。
![]()
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。