1. 程式人生 > >如何開發一個掃雷小遊戲?

如何開發一個掃雷小遊戲?

如何用C#開發一個掃雷小遊戲?

十分自豪的說,計算機程式設計就是變魔術,每一個coder都是一個魔術師。

初學C#的時候,我相信很多人都和我一樣,學會了基本語法,掌握了基本的資料結構,也見過了不少微軟提供的各種功能的官方函式。所有用來變魔術的道具、材料都有了,可為什麼還是覺得少了點什麼?

當你已經掌握了大多數程式設計知識,卻還是覺得無法獨立開發出一個實用程式的時候,你僅僅缺少一次試煉!你需要的只是扔掉書本,尋找一個能夠激起你濃厚興趣的切入點,然後排除萬難的實現一個相關的程式,並且儘量少的藉助“外力”。如果你喜歡玩遊戲,那麼自己動手寫一個小遊戲吧,想想都酷炫!

今天整理硬碟檔案的時候,不經意的發現了一個不起眼的資料夾:

“掃雷1.0”。這是個元老級的程式,在大二前的那個假期,遊戲和學習一直是我難以平衡的兩件事,慶幸的是我找到了突破口。藉著我對於遊戲的酷愛和執著,用了整整一個假期的時間寫下了這個如今看來幾天就能搞定的小程式“掃雷1.0”。這個程式對我的意義便是從學過程式設計到能夠程式設計的變化。

上面這段話寫給初入團隊學習程式設計的學弟,也寫給急於在找工作前提升實力的自己。其實是想說,在面對一個還沒有掌握的新技能時,要利用興趣尋找突破口進行實戰,總是想著它有多難永遠沒有和它較量一下來的有效。

再次看到這個程式,確實有點小激動,於是花了些時間整理了下當初的程式碼和思路。下面回到正題,本文介紹如何用C#開發一個掃雷小遊戲。如果你需要程式碼,可以到我的Github賬戶上下載:https://github.com/monkeyDemon/MineSweeping

需求分析

在寫一個程式前,首先要對你要實現的需求有著清晰的認識,理清各個需求間的邏輯。

對於一個已經存在的掃雷遊戲,我們不妨觀察一下一個真實的掃雷遊戲是怎樣玩的。觀察下面的兩個遊戲截圖。

由上面兩幅截圖可以分析出:

我們需要定義兩個最核心的模組:小方格Pane和放置所有小方格的整個雷區MineField。小方格要整齊的排列在雷區中,一部分小方格中被隨機的放置了地雷。

小方格的實現需求:

首先,小方格有三種狀態:

關閉狀態(初始狀態)

標記狀態(使用者右鍵標識有雷)

開啟狀態(使用者左鍵點選後的方格,無雷的情況下需要顯示周圍雷的個數)

於是定義列舉型別PaneState對應標識小方格狀態。

小方格Pane,主要需要以下三個屬性:

周圍雷的個數

本方格是否有雷

本方格的狀態PaneState

對於我們的簡單程式,小方格可以通過繼承Button來實現。

小方格主要需要以下三個方法:

標記有雷

開啟此方格

還原標記(已經被標記有雷的方格被再次右鍵點選)

按此框架可以實現小方格Pane類:

雷區的實現需求:

小方格全部部署於雷區,是雷區的子元件,所有需要多個方格聯動的方法都要在這裡實現。

首先是初始化方法Init

通過整齊排列方格LayoutPane和隨機佈雷LayMines來實現。

然後是獲取周圍雷數的方法GetAroundMineCount

玩家點選了沒有雷的小方格後需要顯示該方格周圍的雷數。

再然後是開啟周圍區域方法DisplayAround

當玩家點選的小方格周圍一大片區域都沒有雷時,應當幫他全部展開。這個方法的實現算是唯一有點難點的地方了,需要用到遞迴。

最後要實現一個展示整個雷區的方法DisplayALL

當玩家失敗時,向其展示整個雷區分佈。

主要方法已經描述,按此框架可以實現雷區MineField類:

程式展示

過多的細節就不做介紹了,一起來看下完成後的效果吧!