tft每日頭條

 > 遊戲

 > c語言怎麼通過gui繪制窗口

c語言怎麼通過gui繪制窗口

遊戲 更新时间:2024-12-03 02:54:57
項目目錄結構

創建項目

在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上去供大家參考。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved