项目目录结构

创建项目

在Visual Studio 2022中创建一个空白的项目,起名为:NumberMemoryGame。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(1)

创建游戏项目

命名规范

常规的变量、函数以及文件名等命名规范不再赘述,这里主要说一下项目中变量和函数的命名规范。

由于C语言没有命名空间的概念,所以在定义变量、函数的时候要避免与系统、第三方类库以及自身项目里的变量、函数重名,否则会出现难以预料的bug,本项目采取了增加前缀的措施来确保不会重名。

前缀构成:项目名首字母 文件名 表意函数名,中间用下划线连接,比如:NMG_view_init()。

目录结构

根据上一篇文章中提到的模块拆分,我们建立具体的源文件、头文件与之对应。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(2)

项目目录结构

下面简单介绍一下每个文件的作用:

编程模式

MVC

以上文件目录结构创建好后,我们就往面向对象的编程思路上去靠拢,首选是常用的MVC模式:

笔者GUI开发经验不多,再加上C语言自身的一些问题,很难去按照严格意义上的MVC模式去开发,但是我们的编程思想要向MVC看齐。

如果不理清关系、把逻辑分层、模块拆分开来,直接上手开发的话肯定会无从下手,而且过程会出现难以控制的bug,日后维护也很困难。

实例

下面来简单看一个实例,我们来实现排行榜这个模块的功能。

首先定义好数据模型,前期先加两个字段,后期实际开发中再去扩展。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(3)

定义排行榜数据模型

然后,在控制器中实现业务逻辑——做底层数据和外层视图的桥梁。排行榜模块功能很简单,前期就做两个功能:展示和更新。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(4)

排行榜模块的控制器

不过,在控制器中,并没有直接去数据库(当前项目的文件系统)去直接读写数据,而是又加了一个文件data.cpp专门去读写数据库,这样做能让底层的数据分离更加彻底,使得程序逻辑更加清晰。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(5)

文件读写模块

注意到,这里有些函数只是做了定义(输入和输出),这点上一篇文章提到过:先把逻辑走通,回头再完善具体的功能性的函数。

初步的窗口布局

效果

由于要整理开发教程的步骤,所以整体进度上受点影响,今天先把初步的窗口布局实现以下,效果如下。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(6)

初步窗口布局

左侧就是游戏区了,目前已经划分好了棋盘,接下来就是把数字随机到棋盘格子里去,然后再接收玩家的鼠标点击事件,挑战成功则开启下一关,直至全部通关,基本上游戏的闭环就完成了。

右侧是功能区,主要是计时、排行榜、功能设置三块。

EasyX的使用

咱们项目的重点是通过EasyX来完成GUI开发,下面就来简单看一下EasyX的使用方法。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(7)

主函数

在主函数里调用,NMG_game_init()游戏初始化函数,然后在NMG_game_init()里调用NMG_view_init()视图初始化函数。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(8)

游戏初始化函数

至于为何要嵌套一层调用,这个就是我们上面提到的要使用MVC模式编程。这里的函数还有要完善的地方,到时候代码会变多,就能显现出MVC的优点了。

c语言怎么通过gui绘制窗口(C语言GUI编程之数字记忆游戏)(9)

视图模块

在视图里简单实现一下窗口布局,EasyX主要就是在这里发挥它的作用的。

总结

OK,到这一步我们游戏开发的基本框架算是搭建好了,接下来需要开发游戏的核心玩法了。

如果你对C语言的GUI编程感兴趣的话,请持续关注本系列文章,有建议意见欢迎留言或私信。

PS:需要源码的话请留言,人数多的话我就把项目推到GitHub上去供大家参考。

,