日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

练手WPF(三)——扫雷小游戏的简易实现(中)

發布時間:2025/4/16 asp.net 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 练手WPF(三)——扫雷小游戏的简易实现(中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

八、隨機布雷

/// <summary> /// 隨機布地雷 /// </summary> /// <param name="mineNum">地雷數</param> private void SetRndMine(int mineNum) {for (int k = 0; k < mineNum; k++){int nullnum = 0;for (int j = 0; j < _gameLevel._colGrid; j++){for (int i = 0; i < _gameLevel._rowGrid; i++){if (_backData[j, i] == (int)BackState.BLANK)nullnum++;}}if (nullnum < 1)return;int index = rnd.Next(1, nullnum);nullnum = 0;for (int j = 0; j < _gameLevel._colGrid; j++){for (int i = 0; i < _gameLevel._rowGrid; i++){if (_backData[j, i] == 0){nullnum++;if (nullnum != index)continue;_backData[j, i] = (int)BackState.MINE; // 設置為地雷 }}}} } 這個方法是不是很熟悉,我們在2048游戲中用到過,這里就不再多說了。


九、設置地雷旁邊的格子標注的地雷數值
原理就是讀取地雷位置,然后分別給不是地雷的格子數值+1。 /// <summary> /// 設置地雷周圍格子雷數 /// </summary> private void SetCellMineNumber() {for (int y = 0; y < _gameLevel._colGrid; y++){for (int x = 0; x < _gameLevel._rowGrid; x++){if (_backData[y, x] == (int)BackState.MINE) // 遇到地雷則周圍8格分別+1 {if (x - 1 > -1 && y - 1 > -1 && _backData[y - 1, x - 1] != (int)BackState.MINE)_backData[y - 1, x - 1]++;if (y - 1 > -1 && _backData[y - 1, x] != (int)BackState.MINE)_backData[y - 1, x]++;if (y - 1 > -1 && x + 1 < _gameLevel._rowGrid && _backData[y - 1, x + 1] != (int)BackState.MINE)_backData[y - 1, x + 1]++;if (x - 1 > -1 && _backData[y, x - 1] != (int)BackState.MINE)_backData[y, x - 1]++;if (x + 1 < _gameLevel._rowGrid && _backData[y, x + 1] != (int)BackState.MINE)_backData[y, x + 1]++;if (y + 1 < _gameLevel._colGrid && x - 1 > -1 && _backData[y + 1, x - 1] != (int)BackState.MINE)_backData[y + 1, x - 1]++;if (y + 1 < _gameLevel._colGrid && _backData[y + 1, x] != (int)BackState.MINE)_backData[y + 1, x]++;if (y + 1 < _gameLevel._colGrid && x + 1 < _gameLevel._rowGrid && _backData[y + 1, x + 1] != (int)BackState.MINE)_backData[y + 1, x + 1]++;}}} }

?

十、設置背景區圖片組

循環讀取背景區數據,根據數值設置對應的圖片源。

private void SetBackCellImage() {BackCanvas.Children.Clear();for (int y=0; y<_gameLevel._colGrid; y++){for (int x=0; x<_gameLevel._rowGrid; x++){_backImage[y, x] = new Image();if (_backData[y, x] == (int)BackState.BLANK){_backImage[y, x].Source = ImageHelper.CutImage(_bmpSpace, new Int32Rect(0, 0, _cellSize.Width, _cellSize.Height));}else if (_backData[y, x] == (int)BackState.MINE){_backImage[y, x].Source = ImageHelper.CutImage(_bmpMine, new Int32Rect(0, 0, _cellSize.Width, _cellSize.Height));}else{for (int i = 0; i < 8; i++){if (_backData[y, x] == (i+1)){_backImage[y, x].Source = ImageHelper.CutImage(_bmpNum1_8, new Int32Rect(i * _cellSize.Width, 0, _cellSize.Width, _cellSize.Height));break;}}}_backImage[y, x].SetValue(Canvas.LeftProperty, x * (double)_cellSize.Width);_backImage[y, x].SetValue(Canvas.TopProperty, y * (double)_cellSize.Height);BackCanvas.Children.Add(_backImage[y, x]);}} }

?

十一、開始游戲準備

根據游戲級別分別調用隨機布雷、設置雷邊數值方法,同時添加背景圖片數組到游戲背景區。

private void ResetGame() {InitialGameState();InitGameData(_level);textBlockMineNum.Text = _gameLevel._mineNum.ToString();SetRndMine(_gameLevel._mineNum);SetCellMineNumber();SetBackCellImage(); }

將該方法添加到開始游戲菜單中,并計時器打開。

private void MenuGameStart_Click(object sender, RoutedEventArgs e) {ResetGame();_gameState = GameState.START;// 開始計時 _stopWatchGame.Start();_timerSetTimeText.Start(); }

重復點擊開始菜單,看看效果。

?

十二、調整游戲級別

根據菜單設置的當前級別值設置菜單選擇狀態。

/// <summary> /// 設置級別菜單狀態 /// </summary> /// <param name="level"></param> private void SetMenuLevelState(Level level) {switch (level){case Level.SIMPLE:MenuLowLevel.IsChecked = true;MenuMiddleLevel.IsChecked = false;MenuHighLevel.IsChecked = false;break;case Level.NORMAL:MenuLowLevel.IsChecked = false;MenuMiddleLevel.IsChecked = true;MenuHighLevel.IsChecked = false;break;case Level.HARD:MenuLowLevel.IsChecked = false;MenuMiddleLevel.IsChecked = false;MenuHighLevel.IsChecked = true;break;} } /// <summary> /// 初級級別菜單 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MenuLowLevel_Click(object sender, RoutedEventArgs e) {if (_level == Level.SIMPLE)return;if (MessageBox.Show("將用新難度級別重置游戲,確認要繼續嗎?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Asterisk)== MessageBoxResult.Yes){_level = Level.SIMPLE;SetMenuLevelState(_level);ResetGame();} }/// <summary> /// 中級級別菜單 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MenuMiddleLevel_Click(object sender, RoutedEventArgs e) {if (_level == Level.NORMAL)return;if (MessageBox.Show("將用新難度級別重置游戲,確認要繼續嗎?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Asterisk)== MessageBoxResult.Yes){_level = Level.NORMAL;SetMenuLevelState(_level);ResetGame();} }/// <summary> /// 高級級別菜單 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MenuHighLevel_Click(object sender, RoutedEventArgs e) {if (_level == Level.HARD)return;if (MessageBox.Show("將用新難度級別重置游戲,確認要繼續嗎?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Asterisk)== MessageBoxResult.Yes){_level = Level.HARD;SetMenuLevelState(_level);ResetGame();} }

?

十三、設置前景區圖片組

/// <summary> /// 設置前景圖片數組 /// </summary> private void SetForeCellImages() {ForeCanvas.Children.Clear();for (int y = 0; y < _gameLevel._colGrid; y++){for (int x = 0; x < _gameLevel._rowGrid; x++){if (_foreData[y, x] > (int)ForeState.NONE){_foreImage[y, x] = new Image();_foreImage[y, x].Source = ImageHelper.CutImage(_bmpForeground, new Int32Rect(0, 0, _cellSize.Width, _cellSize.Height));_foreImage[y, x].SetValue(Canvas.LeftProperty, x * (double)_cellSize.Width);_foreImage[y, x].SetValue(Canvas.TopProperty, y * (double)_cellSize.Height);ForeCanvas.Children.Add(_foreImage[y, x]);}}} }

在ResetGame()方法最后位置加入對該方法的調用。
?運行程序,看看效果。

轉載于:https://www.cnblogs.com/moonblogcore/p/10944619.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的练手WPF(三)——扫雷小游戏的简易实现(中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 蜜桃视频成人在线观看 | 欧美做爰爽爽爽爽爽爽 | 精品黄色 | 无码无遮挡又大又爽又黄的视频 | 性一交一乱一伧国产女士spa | www九九九 | 日本少妇全体裸体洗澡 | 久艹视频在线观看 | 狠狠爱夜夜爱 | 亚洲特级黄色片 | 国产在线观看免费视频软件 | 精品国产91久久久久久 | 中文字幕av网 | 久久久久人妻精品一区二区三区 | 国产在线日本 | 日本涩涩网站 | 亚洲高清在线观看视频 | 欧美888 | 中文久草 | 97成人人妻一区二区三区 | 啪啪精品 | 午夜精品极品粉嫩国产尤物 | 欧日韩不卡在线视频 | 秋霞国产午夜精品免费视频 | 毛片网 | 日本女优在线看 | 亚洲va久久久噜噜噜无码久久 | 成人av专区| 天天干中文字幕 | 秋霞精品 | 午夜国产福利 | 秋霞网一区二区三区 | 91视频三区 | 免费黄色网址在线观看 | 人人艹人人 | 日本一二三区视频在线 | 免费av电影网址 | 天天躁夜夜躁 | 欧美jizz18性欧美 | 国产成人精品无码免费看夜聊软件 | 国产一级免费av | 一级片播放| 无遮挡在线观看 | jizzjizz在线播放 | 国产精品一区二区久久久 | 九九视频免费观看 | 四虎色网 | 午夜资源站 | 色美av | 婷婷中文在线 | 少妇特黄a一区二区三区 | 国产精品第七页 | 黄色动漫免费在线观看 | av动漫网站 | 免费看片色 | 一二三在线视频 | 亚洲影视在线观看 | 天天操夜夜操狠狠操 | www.jizzjizz.com| 看全色黄大色黄大片女一次牛 | 精品国产免费观看 | 亚洲AV成人无码精电影在线 | 葵司在线视频 | 久久国产小视频 | 日本午夜视频在线观看 | 国产精品久久久久久妇女6080 | 国产精品久久久久久久久动漫 | 中文字幕视频免费 | 桃谷绘里香番号 | 杨贵妃颤抖双乳呻吟求欢小说 | 美女爱爱爱 | 特黄一区 | 亚洲一区二区三区四区在线 | 欧美黑人疯狂性受xxxxx喷水 | 精品无码三级在线观看视频 | 久久夜精| 国产成人一区二区在线 | 色悠悠在线视频 | 97麻豆视频 | 靠逼视频免费网站 | 国产精品久久久久久亚洲 | 成人夜色| 精品久久999 | 国产精品国产馆在线真实露脸 | 国产午夜精品久久久久 | 欧美精品片 | 老熟妇午夜毛片一区二区三区 | www日本com | 午夜av网 | 老司机午夜视频 | www.污视频 | 超碰日日干 | 欧美资源在线观看 | 黄色小说网站在线观看 | 亚洲一区二区日韩 | 天天干夜夜嗨 | 一个人在线观看www软件 | 疯狂做受xxxx国产 | 免费观看av网址 |