激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - 利用C#編寫掃雷游戲(附源碼)

利用C#編寫掃雷游戲(附源碼)

2022-03-07 13:30江湖逍遙 C#

掃雷游戲相信不用給大家過多介紹,大家基本都玩過,下面這篇文章主要給大家介紹了關于如何利用C#編寫掃雷游戲的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

翻看了下以前大學學習的一些小項目,突然發(fā)現(xiàn)有個項目比較有意思,覺得有必要把它分享出來。當然現(xiàn)在看來,里面有很多的不足之處,但因博主現(xiàn)在已經(jīng)工作,沒有時間再去優(yōu)化。這個項目就是利用c#編寫一個windows系統(tǒng)下的掃雷小游戲。

首先講下掃雷小游戲的玩法:

(1)掃雷就是要把所有非地雷的格子揭開即勝利;踩到地雷格子就算失敗。

(2)當點開的格子不是地雷區(qū)域的時候,該格子會顯示一個數(shù)字,該數(shù)字表示的含義就是該格子周邊有多少個地雷。

(3)同時點開的如果非地雷的格子,周邊連貫的非地雷區(qū)域都會自動被掃描打開,直到遇到旁邊有雷區(qū)的時候停止。

(4)當你判斷出格子是地雷的時候,你可以使用鼠標右鍵將該塊方格標記為雷區(qū)。當不確定的時候,你可標記個問號以待確定。

下面來說下我大學時候實現(xiàn)這個掃雷小游戲的思路:

(1)因為雷區(qū)是一個個格子聯(lián)合組成的,那我們可以使用winform程序自帶的系統(tǒng)按鈕控件button來實現(xiàn)雷區(qū)方格。

(2)代表雷區(qū)方格的button按鈕需要實現(xiàn)下面幾個事件:鼠標左鍵點擊掃雷事件,鼠標右鍵點擊標記雷區(qū)事件,鼠標右鍵點擊標記問號區(qū)域事件。

(3)為了更好的實現(xiàn)游戲的可玩性,增加一個自由設置地雷數(shù)量的小功能,可自行設置雷區(qū)包含的地雷數(shù)量,設置完成后,自動刷新界面,重新部署地雷。

(4)我們將雷區(qū)的方格存儲在一個全局的二維數(shù)組中,form窗體在初始化的時候,自動生成面板區(qū)域的button按鈕列表。

(5)為了實現(xiàn)每次玩游戲的時候,地雷分布不一致,我們在button列表生成后。隨機抽取出某些button按鈕作為地雷分布點,并記錄該button的雷區(qū)屬性為含有地雷。

(6)算法中的關鍵:遞歸算法計算雷區(qū)。當點擊某個方格的時候,如果該方格是雷區(qū),則直接game over,如果不是的話,則我們需要一個算法去計算旁邊區(qū)域的地雷數(shù)量,以及旁邊區(qū)域沒有地雷的區(qū)域,當沒有地雷的區(qū)域連成一片的時候,我們需要使用遞歸算法,去查找二維數(shù)組,找到對應的連片非雷區(qū),將之打開。

(7)如何設置方格的狀態(tài):當鼠標左鍵點擊的方塊區(qū)域非雷區(qū)的時候,我們將button按鈕的屬性設置為disabled即可呈現(xiàn)打開的狀態(tài)。當鼠標左鍵打開的方格是雷區(qū)時候,此時我們可以將所有地雷區(qū)域塊的button的背景圖設置為地雷圖片,并播放相應的爆炸音效,彈出游戲終止界面即可。當鼠標右鍵標記雷區(qū)或者待確定區(qū)域的時候,只需要更改button的背景圖即可。當然上述所有點擊操作,都得判斷button方格區(qū)域當前的狀態(tài)值:初始化狀態(tài)、已標記為待確定狀態(tài)、已標記為雷區(qū)。

游戲的最終效果圖如下:

利用C#編寫掃雷游戲(附源碼)

我們下面來剖析下幾個關鍵點,因為代碼量比較多,我就不全部詳細剖析了。

首先我們定義一個leibutton類,這個類繼承于系統(tǒng)控件button,增加x,y,youlei三個字段,x表示二維數(shù)組的第一個索引,y表示二維數(shù)組的第二個索引值,youlei用于標記button方塊區(qū)域按鈕的狀態(tài)(0表示無雷,1表示有雷)。同時我們使用button按鈕類自帶的一個tag屬性標記該方塊區(qū)域是否被翻開。

具體定義如下:

利用C#編寫掃雷游戲(附源碼)

然后我們在窗體對象form類中定義一些常用的變量之類,如下圖,都有相應注釋

利用C#編寫掃雷游戲(附源碼)

下面我們來看下生成button的二維數(shù)組,即生成雷區(qū)的button列表。我們需要在form中添加groupbox組件,然后將動態(tài)生成的button列表添加到這個groupbox組件中。生成button的二維數(shù)組方法體如下:

利用C#編寫掃雷游戲(附源碼)

生成完button列表后,我們就開始部署地雷了,地雷隨機部署到button列表中,部署地雷的方法如下:

利用C#編寫掃雷游戲(附源碼)

到了這一步,我們就應該將雷區(qū)的界面渲染出來了,這時候我們可以將上面兩個方法放入窗體的form_load事件中即可渲染出游戲界面。如下所示

利用C#編寫掃雷游戲(附源碼)

我們繼續(xù),下面寫掃雷的算法,當鼠標左鍵點開某個方格的時候,如果該方格不是雷區(qū),那我們需要計算該方格周邊的地雷數(shù)量,計算方法如下:

利用C#編寫掃雷游戲(附源碼)

下面是個遞歸計算的核心算法,非常關鍵。當我們點開的方格非雷區(qū)的時候,周邊連片的非雷區(qū)的方格塊會被打開。這一塊的核心算法參考下列代碼,row表示行,col表示列

利用C#編寫掃雷游戲(附源碼)

下面我們來添加鼠標的點擊事件,我這邊采用的是bt_mouseup事件來處理。點擊后,我們首先判斷游戲是否結束,如果沒結束,則進行下列操作,獲取到被點擊的按鈕的x,y值以及點擊事件按下的鍵值(判斷按下的是鼠標左鍵還是右鍵)。x,y值獲取到了,我們就可以到button二維數(shù)組中找到對應元素。

利用C#編寫掃雷游戲(附源碼)

假如點擊的是鼠標左鍵,則我們進行掃雷操作,具體的代碼如下:

利用C#編寫掃雷游戲(附源碼)

如果按下的是鼠標右鍵,則是標記方塊是雷區(qū)或者待確定區(qū)域,具體代碼如下:

利用C#編寫掃雷游戲(附源碼)

最后再給出一個判斷是否掃雷完畢的方法。

利用C#編寫掃雷游戲(附源碼)

掃雷游戲的設計大概到此結束,中間還有很多可以優(yōu)化的地方,比如將掃雷的邏輯代碼抽離form類獨立出來等,這些都靠讀者自行去優(yōu)化了。

附上博主源碼下載的百度云鏈接,需要代碼學習的可自行下載研究:本地下載

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/xu-yi/p/10047375.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品一区免费在线观看 | 国产毛片网 | 久久手机在线视频 | 国产做爰全免费的视频黑人 | 成人午夜在线免费观看 | 久久久久久久久久一本门道91 | 在线看免费的a | 欧美精品一区自拍a毛片在线视频 | 999av视频| 依依成人精品视频 | 色妞妞视频 | 欧美一级淫片免费播放口 | 国产亚洲小视频 | 午夜激情视频免费 | 成人免费观看在线视频 | 欧美一区二区精品夜夜嗨 | 久久久久久久久久综合 | 竹内纱里奈和大战黑人 | 91精品国产91久久久久久不卞 | 亚洲一区二区不卡视频 | 欧美视频国产精品 | 成人啪啪色婷婷久 | 国产精品久久久久久久久久东京 | 国产午夜免费不卡精品理论片 | 9999免费视频 | 黄色免费播放网站 | 视频一区二区中文字幕 | 一本大道av| 成人做爰s片免费看网站 | 国产亚洲精品久久久久婷婷瑜伽 | 一区二区三区欧洲 | 一级做人爱c黑人影片 | 久久精品中文字幕一区 | 久久精品中文字幕一区二区 | 沉沦的校花奴性郑依婷c到失禁 | 久久亚洲春色中文字幕久久 | 中国美女一级黄色大片 | 91av99| 欧美一区成人 | 午夜视频在线 | 毛片免费看的 |