初學WPF,需要一個小程序來鍛鍊自己,而貪吃蛇是每一個小白(包括我自己)必學的經典案例,此文就來介紹一下,接近完美的貪吃蛇是如何製作的 . . .
學習源於趙慶明老師的課程(騰訊課堂)
此文將只對遊戲重要的部分進行講解, 完整源碼可在 GitHub 中查看:
效果效果如下:
其中這個遊戲是有聲音(吃到東西的聲音,遊戲結束讀取分數的聲音). . .
各種音效可到 愛給網 中下載,完全免費 . . .
比如吃東西的聲音、遊戲結束的聲音(沒有進入高分榜、進入高分榜等)各種各樣的聲音 . . .
讓遊戲變的更加有趣 . . .
.
這個程序的核心部分就是 蛇的移動
、高分榜
、語音合成
(XML 文件的讀取與存入) . . .
蛇的移動有兩種方式:
- 真正的移動(每一節蛇身 移動到前一節蛇身的位置)
- 障眼法(蛇其實沒有移動)
此文將使用障眼法來對蛇的移動進行操作,那麼這個障眼法移動蛇是如何工作的呢?
下面這個圖將解釋這個障眼法原理:
圖中 1, 2, 3 表示的分別是:
- 刪除蛇的尾巴
- 將蛇頭變成蛇身的顏色
- 添加新的蛇頭
我們只需要反覆的進行上面的操作,就可以造成蛇移動的假象 . . .
遊戲核心部分詳解
-
UI 界面我們採用
Canvas
進行佈局,因爲它可以進行絕對定位
,可以利用元素的座標將元素放在界面的任何地方:
對 Canvas進行 佈局,訪問他的名字(GameArea進行操作) . . . -
遊戲地圖部分(那些小格子):
-
畫蛇:
這個方法調用的比較頻繁,因爲蛇每移動一次,這個方法就要調用一次 . . .
方法解析:當我們使用障眼法插入一上新蛇頭時,這個蛇頭還沒添加到地圖之中,所以我們在畫蛇的方法之中,需要判斷一下,並且判斷顏色(蛇頭與蛇身不一樣) . . . -
蛇的移動(核心部分):
每一行代碼都加以註釋 . . . -
蛇的其它操作在此處就不寫了,主要就是一些細節上的實現,並不是太複雜 . . .
比如下面的這些方法實現:
- 遊戲結束的判斷
- 蛇吃到食物的判斷
- 更新遊戲分數
- 開始新的遊戲
- 畫出食物
- 鍵盤按下改變蛇的方向
- 遊戲的暫停
-
高分榜(對 XML文件的操作):
第一方法是將高分榜中的數據保存到 XML文件之中,Xml文件的 序列化操作,取前五名 . . .
第二方法是將 XML文件中的數據加載到程序之中,Xml文件的 反序列化操作 . . .
第三方法是將一個數據添加到高分榜之中,並進行逆序排列 . . . -
語音合成部分:
在遊戲結束的時候,我們判斷這個分數是否進入了高分榜,如何進入則利用語音合成報出分數:
.
源碼在 GitHub之中,大家可以自己查閱 ^ _ ^ . . .