Giter Club home page Giter Club logo

gamepainter's Introduction

简介

这是一个基于 windows 平台的 2D 游戏/应用框架,由 C++ 编写的引擎层和 lua 编写的应用层构成。

引擎的编写应用了较多现代 C++ 特性,如使用各种 STL 容器、智能指针和 std::promise 等重建 windows 窗口编程模型,让窗口的创建和管理方式得以简化。在引擎中嵌入 Lua 解释器时,为了让 C++ 调用 Lua 函数的形式能够像引用原生函数一样简洁,使用变参模板、类型转发和函数重载等技巧,将 C/Lua 交互方式从原来的多行代码缩减为一行,封装的模板函数还支持直接传递字典和列表等高级数据结构。引擎的图形图像部分,充分应用了 windows GDI+ 的功能特性,绘图效率较高,且使用了双缓冲绘图技术,保证动画效果稳定、不闪屏。此外,整个 C++ 项目使用 gn/ninja 工具组织构建,编译速度快,且便于维护和扩展。

基于 C++ 引擎,用 Lua 编写了一个 2D RPG 游戏 Demo(使用了梦幻西游和传奇的游戏素材),这里应用了较多面向对象设计,使得场景中各个游戏元素能最大程度复用共性代码,程序结构和游戏世界实现了近似同构。

编译构建

有下列两种可选的编译构建方式,构建完成后,将GamePainter.exe移动到usage目录下运行,可以看到演示游戏画面,鼠标右键控制人物移动,左键点击 NPC 会弹出对话框。

使用 gn + ninja 构建

前置条件:

  • windows 环境
  • MSVC 构建工具及 windows SDK

gn 与 ninja 工具已经预置在 build 目录下,可直接执行以下命令:

build/gn gen -C out
build/ninja -C out

手动编译

前置条件:

  • windows 环境
  • clang/LLVM 工具集
  • MSVC 构建工具及 windows SDK

执行以下命令:

cd noumenon
clang++ main.cpp ui/win.cpp lua/lua_machine.cpp utils/*.cpp -o GamePainter.exe -Iui -Ilua -Iutils -Llua/bin -llua_static -luser32 -lgdi32 -lgdiplus -lwinmm -lImm32

如果您需要使用其他基于 MSVC 构建的三方库,请改用 clang-cl 编译,并添加恰当的 /MT/MD 选项,可避免 MSVC 运行时库相关冲突(如出现未解析符号告警)。

效果图

gamepainter's People

Contributors

likeusummer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.