初学WPF,做一款小游戏练习一下
生活随笔
收集整理的這篇文章主要介紹了
初学WPF,做一款小游戏练习一下
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以前做項(xiàng)目的時(shí)候有用過Silverlight,最近了解了一下WPF,做了一款簡單的小游戲來練手,希望能和大家多多交流。
想法:最強(qiáng)大腦 牛人多多,對色彩的分辨更是讓人目瞪口呆,于是我就想到做一個(gè)小游戲,簡單一點(diǎn),做網(wǎng)格狀的色塊,中間穿插一塊不同顏色但是又非常相近的顏色塊,點(diǎn)擊該顏色塊即為通關(guān),進(jìn)入下一關(guān),下一關(guān)的色塊數(shù)量+1,直到到達(dá)一個(gè)差不多的關(guān)卡后不再+1;
效果如圖
說做就做,新建工程,開始實(shí)現(xiàn),首先準(zhǔn)備好一組顏色相近的顏色代碼,百度HTML顏色代碼,隨便選取,越相鄰顏色色差越小。
1 private string[][] colors = new string[][] { 2 new string[2]{"#7B7B7B","#8E8E8E"} , 3 new string[2]{"#FF5151","#ff7575"} , 4 new string[2]{"#ffaad5","#FFC1E0"} , 5 new string[2]{"#DCB5FF","#E6CAFF"} , 6 new string[2]{"#79FF79","#93FF93"} , 7 new string[2]{"#97CBFF","#ACD6FF"} , 8 new string[2]{"#FFFF93","#FFFFAA"} , 9 new string[2]{"#B766AD","#C07AB8"} , 10 new string[2]{"#B7FF4A","#C2FF68"} 11 };相關(guān)代碼
/// <summary>/// 游戲 找色差 實(shí)例/// </summary>public partial class MainWindow : Window{private int level = 2; //當(dāng)前關(guān)卡private double cavWidth = 0; //容器寬度、寬高一樣private double btnWidth = 0; //色塊寬高const int maxLevel = 8; //最大關(guān)卡//顏色數(shù)組private string[][] colors = new string[][] {new string[2]{"#7B7B7B","#8E8E8E"} ,new string[2]{"#FF5151","#ff7575"} ,new string[2]{"#ffaad5","#FFC1E0"} ,new string[2]{"#DCB5FF","#E6CAFF"} ,new string[2]{"#79FF79","#93FF93"} ,new string[2]{"#97CBFF","#ACD6FF"} ,new string[2]{"#FFFF93","#FFFFAA"} ,new string[2]{"#B766AD","#C07AB8"} ,new string[2]{"#B7FF4A","#C2FF68"}};//WPF的定時(shí)器使用DispatcherTimer類對象private System.Windows.Threading.DispatcherTimer dTimer = null;private int tmNum = 30;public MainWindow(){InitializeComponent();Load();}private void Load(){if (dTimer != null){dTimer.Stop();}else{//TimerdTimer = new DispatcherTimer();//注:此處 Tick 為 dTimer 對象的事件( 超過計(jì)時(shí)器間隔時(shí)發(fā)生)dTimer.Tick += new EventHandler(dTimer_Tick);//設(shè)置時(shí)間:TimeSpan(時(shí), 分, 秒)dTimer.Interval = new TimeSpan(0, 0, 1);}//啟動 DispatcherTimer對象dTime。dTimer.Start();tmNum = 30;lblTime.Content = string.Format("剩余{0}秒", tmNum);cavWidth = cavContent.Width;btnWidth = cavWidth / level;int otherIndex = GetRandomNum(level * level); //不一樣的那個(gè)lblLevel.Content = string.Format("第 {0} 關(guān)", level - 1);string[] strs = colors[GetRandomNum(colors.Length)];string colorBtnBg = strs[0];for (int i = 0; i < level; i++){for (int j = 0; j < level; j++){//向容器中添加一個(gè)色塊(按鈕)Button btn = new Button(){Margin = new Thickness(btnWidth * i, btnWidth * j, 0, 0),Background = new SolidColorBrush((Color)System.Windows.Media.ColorConverter.ConvertFromString(colorBtnBg)),BorderThickness = new Thickness(1),BorderBrush = Brushes.Black,Width = btnWidth,Height = btnWidth};//隨機(jī)生成的色塊編號,顏色換成相近顏色,當(dāng)點(diǎn)擊該色塊表示找出差異,進(jìn)入游戲下一關(guān)if (otherIndex == i * level + j){btn.Background = new SolidColorBrush((Color)System.Windows.Media.ColorConverter.ConvertFromString(strs[1]));btn.Click += btn_Click;}cavContent.Children.Add(btn);}}}/// <summary>/// 計(jì)時(shí)/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void dTimer_Tick(object sender, EventArgs e){lblTime.Content = string.Format("剩余{0}秒", tmNum);if (tmNum < 10){lblTime.Foreground = Brushes.Red;}if (tmNum <= 0){dTimer.Stop();MessageBoxResult result = MessageBox.Show("時(shí)間到,還未完成游戲,是否繼續(xù)?", "Game Over", MessageBoxButton.YesNo);if (result == MessageBoxResult.Yes){level = 2;Load(); //重置游戲}else{this.Close();}}tmNum--;}/// <summary>/// 點(diǎn)擊不同顏色的色塊時(shí)觸發(fā)/// </summary>/// <param name="sender"></param>/// <param name="e"></param>void btn_Click(object sender, RoutedEventArgs e){cavContent.Children.Clear();//達(dá)到最大關(guān)卡時(shí)數(shù)量不在增多,否則每次多一排一列色塊if (level <= maxLevel){level = level + 1;}Load();}/// <summary>/// 取隨機(jī)數(shù)/// </summary>/// <param name="maxNum">0-最大區(qū)間</param>/// <returns></returns>public int GetRandomNum(int maxNum){Random radom = new Random();return radom.Next(maxNum);}}
?
轉(zhuǎn)載于:https://www.cnblogs.com/chmc/p/5135725.html
總結(jié)
以上是生活随笔為你收集整理的初学WPF,做一款小游戏练习一下的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Let's Encrypt(开源SSL证
- 下一篇: 设计模式之笔记--简单工厂模式(Simp