项目目录结构

创建项目

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图

创建游戏项目

命名规范

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

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

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

目录结构

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图1

项目目录结构

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

main.cpp是项目的入口文件,主函数main()就定义在这里两个头文件:config.h定义一些常量,models.h定义项目里用到的数据结构模型data.cpp,文件读写模块,就是项目里用到的文件数据库game.cpp,游戏模块,控制整个游戏进程和交互rank.cpp,排行榜模块,排行榜的展示以及更新settings.cpp,设置模块,游戏设置中心timer.cpp,计时器模块,计时和展示,作为排行榜的依据views.cpp,窗口显示模块,控制整个项目的UI初始化、显示、更新等

编程模式

MVC

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

Model,定义在models.h中,管理所有抽象化对象的数据结构模型View,视图,相当于浏览器,只管展示视图,尽量不要参与业务逻辑的编码Controller,控制器,控制视图的数据展示以及用户和视图交互背后的逻辑处理

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

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

实例

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

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图2

定义排行榜数据模型

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图3

排行榜模块的控制器

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图4

文件读写模块

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

初步的窗口布局

效果

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图5

初步窗口布局

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

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

EasyX的使用

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图6

主函数

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图7

游戏初始化函数

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

C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局插图8

视图模块

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

总结

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

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

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

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: