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

项目目录结构

创建项目

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

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

创建游戏项目

命名规范

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

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

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

目录结构

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

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

项目目录结构

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

  • 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绘制窗口(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上去供大家参考。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页