天天看點

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

作者:程式員魯大廚

項目目錄結構

建立項目

在Visual Studio 2022中建立一個空白的項目,起名為:NumberMemoryGame。

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

建立遊戲項目

命名規範

正常的變量、函數以及檔案名等命名規範不再贅述,這裡主要說一下項目中變量和函數的命名規範。

由于C語言沒有命名空間的概念,是以在定義變量、函數的時候要避免與系統、第三方類庫以及自身項目裡的變量、函數重名,否則會出現難以預料的bug,本項目采取了增加字首的措施來確定不會重名。

字首構成:項目名首字母+檔案名+表意函數名,中間用下劃線連接配接,比如:NMG_view_init()。

目錄結構

根據上一篇文章中提到的子產品拆分,我們建立具體的源檔案、頭檔案與之對應。

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

項目目錄結構

下面簡單介紹一下每個檔案的作用:

  • 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程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

排行榜子產品的控制器

不過,在控制器中,并沒有直接去資料庫(目前項目的檔案系統)去直接讀寫資料,而是又加了一個檔案data.cpp專門去讀寫資料庫,這樣做能讓底層的資料分離更加徹底,使得程式邏輯更加清晰。

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

檔案讀寫子產品

注意到,這裡有些函數隻是做了定義(輸入和輸出),這點上一篇文章提到過:先把邏輯走通,回頭再完善具體的功能性的函數。

初步的視窗布局

效果

由于要整理開發教程的步驟,是以整體進度上受點影響,今天先把初步的視窗布局實作以下,效果如下。

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

初步視窗布局

左側就是遊戲區了,目前已經劃分好了棋盤,接下來就是把數字随機到棋盤格子裡去,然後再接收玩家的滑鼠點選事件,挑戰成功則開啟下一關,直至全部通關,基本上遊戲的閉環就完成了。

右側是功能區,主要是計時、排行榜、功能設定三塊。

EasyX的使用

咱們項目的重點是通過EasyX來完成GUI開發,下面就來簡單看一下EasyX的使用方法。

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

主函數

在主函數裡調用,NMG_game_init()遊戲初始化函數,然後在NMG_game_init()裡調用NMG_view_init()視圖初始化函數。

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

遊戲初始化函數

至于為何要嵌套一層調用,這個就是我們上面提到的要使用MVC模式程式設計。這裡的函數還有要完善的地方,到時候代碼會變多,就能顯現出MVC的優點了。

C語言GUI程式設計之數字記憶遊戲——項目目錄結構和初步的視窗布局

視圖子產品

在視圖裡簡單實作一下視窗布局,EasyX主要就是在這裡發揮它的作用的。

總結

OK,到這一步我們遊戲開發的基本架構算是搭建好了,接下來需要開發遊戲的核心玩法了。

如果你對C語言的GUI程式設計感興趣的話,請持續關注本系列文章,有建議意見歡迎留言或私信。

PS:需要源碼的話請留言,人數多的話我就把項目推到GitHub上去供大家參考。

繼續閱讀