一.掃雷游戲項目設計
1.文件結構設計
首先我們要先定義三個文件
①test.c //文件中寫游戲的測試邏輯?
②game.c //文件中寫游戲中函數的實現等
③game.h //文件中寫游戲需要的數據類型和函數聲明等
2.掃雷游戲的主體結構
使?控制臺實現經典的掃雷游戲
?游戲可以通過菜單實現繼續玩或者退出游戲
?掃雷的棋盤是9*9的格子
?默認隨機布置10個雷
?可以排查雷
?如果位置不是雷,就顯?周圍有?個雷
?如果位置是雷,就炸死游戲結束
?把除10個雷之外的所有?雷都找出來,排雷成功,游戲結束
我們期待的游戲的界面應該是:
①初始界面
②排雷界面
?③排雷失敗界面
?
?3.面臨的問題
因為我們需要在9*9的棋盤上布置雷的信息和排查雷,我們首先想到的就是創建?個9*9的數組來存放信息。
①返回雷的個數的越界的問題
當我們選定一個坐標時,如(x,y)我們想要得到(x,y)坐標周圍8個坐標雷的總數
?
?所以,我們不得不考慮以下越界訪問的問題
?為了解決以上問題,我可以將9*9棟棋盤擴大為11*11,這樣就解決了棋盤越界的問題,如下圖
?但注意:初始化棋盤時,11*11的格子都要進行初始化。
②保存雷的信息與顯示雷的信息
繼續分析,我們在棋盤上布置了雷,棋盤上雷的信息(1)和?雷的信息(0),假設我們排查了某?個位置后,這個坐標處不是雷,這個坐標的周圍有1個雷,那我們需要將排查出的雷的數量信息記錄存儲,并打印出來,作為排雷的重要參考信息的。那這個雷的個數信息存放在哪?呢?如果存放在布置雷的數組中,這樣雷的信息和雷的個數信息就可能或產?混淆和打印上的困難
這里我們采用另外?種方案,我們專?給?個棋盤(對應?個數組mine)存放布置好的雷的信息,再給另外?個棋盤(對應另外?個數組show)存放排查出的雷的信息。這樣就互不?擾了,把雷布置到mine數組,在mine數組中排查雷,排查出的數據存放在show數組,并且打印show數組的信息給后期排查參考。
show數組開始時初始化為字符 '*',為了保持兩個數組的類型?致,可以使?同?套函數處理,mine數組最開始也初始化為字符'0',布置雷改成'1'。
?布置雷的mine棋盤
?
?顯示雷的show棋盤
?
二.掃雷游戲的簡單模擬實現
1.game.h
?以上代碼是掃雷游戲開發。代碼包含常用庫引入及標準命名空間使用聲明。通過宏定義設置棋盤行列及雷數等參數。還聲明了一系列函數,涵蓋棋盤初始化、打印、布雷、統計雷數以及掃雷等功能,為實現完整掃雷游戲邏輯搭建了基本框架。
?
2. game.cpp
?實現掃雷游戲中棋盤初始化和打印功能。?InitBoard? 函數通過雙重循環,將指定字符填充到棋盤二維數組對應位置,完成初始化。?PrintBoard? 函數先輸出游戲標題,再用循環按行列格式打印棋盤元素,同時打印行列索引,方便玩家查看,為游戲交互提供基礎展示。
?
? ? ? ? ? 實現掃雷游戲中布雷和統計雷數功能。?SetMine? 函數利用 ?rand? 函數生成隨機坐標,在棋盤數組上隨機放置地雷(用 ?'1'? 表示),直到達到設定雷數。(?EASY_COUNT?)。?GetMineCount? 函數通過計算目標坐標周圍八個格子的字符數值總和并做相應轉換,統計出周圍雷的數量,為玩家判斷提供依據。
?以上是雷游戲核心邏輯的代碼。?FindMine? 函數負責游戲流程:
?①玩家循環輸入坐標,程序先檢查坐標合法性及是否已排查。
?②若坐標對應格子有雷(?a[x][y] == '1'? ),游戲結束并顯示雷區。
?③無雷時,調用 ?GetMineCount? 統計周圍雷數并顯示在顯示棋盤 ?b? 上,成功排查一格 ?win? 計數加一。
?④當排查格子數達到總格子數減去雷數(?win == ROW * COL - EASY_COUNT? ),玩家勝利并顯示雷區。 代碼通過這些邏輯實現了掃雷游戲基本交互和勝負判定。
?
3.test.cpp
?測試掃雷游戲的代碼片段。?menu? 函數輸出游戲菜單,提供 “退出(0)” 和 “開始游戲(1)” 選項。?game? 函數則是游戲核心流程,先定義存放雷和顯示信息的二維字符數組,接著調用 ?InitBoard? 分別將其初始化為全 ?'0'? 和全 ?'*'? ,再通過 ?PrintBoard? 打印初始棋盤,然后調用 ?SetMine? 布置地雷,最后調用 ?FindMine? 讓玩家開始排查地雷,逐步推進游戲進程。
?構建掃雷游戲的主邏輯框架。 test ?函數中,先設置隨機數種子,隨后通過 do - while ?循環展示游戲菜單,獲取玩家輸入。利用 switch ?語句判斷輸入,0代表退出游戲,1則調用 game ?函數開啟游戲,輸入錯誤時給予提示并要求重新輸入。 main ?函數通過 clock ?函數記錄游戲開始和結束時間,計算并輸出游戲總耗時,為玩家提供完整的游戲交互和時間統計功能。
?