初学WPF,做一款小游戏练习一下
生活随笔
收集整理的這篇文章主要介紹了
初学WPF,做一款小游戏练习一下
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以前做項目的時候有用過Silverlight,最近了解了一下WPF,做了一款簡單的小游戲來練手,希望能和大家多多交流。
想法:最強大腦 牛人多多,對色彩的分辨更是讓人目瞪口呆,于是我就想到做一個小游戲,簡單一點,做網格狀的色塊,中間穿插一塊不同顏色但是又非常相近的顏色塊,點擊該顏色塊即為通關,進入下一關,下一關的色塊數量+1,直到到達一個差不多的關卡后不再+1;
效果如圖
說做就做,新建工程,開始實現,首先準備好一組顏色相近的顏色代碼,百度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 };相關代碼
/// <summary>/// 游戲 找色差 實例/// </summary>public partial class MainWindow : Window{private int level = 2; //當前關卡private double cavWidth = 0; //容器寬度、寬高一樣private double btnWidth = 0; //色塊寬高const int maxLevel = 8; //最大關卡//顏色數組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的定時器使用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 對象的事件( 超過計時器間隔時發生)dTimer.Tick += new EventHandler(dTimer_Tick);//設置時間:TimeSpan(時, 分, 秒)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); //不一樣的那個lblLevel.Content = string.Format("第 {0} 關", 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++){//向容器中添加一個色塊(按鈕)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};//隨機生成的色塊編號,顏色換成相近顏色,當點擊該色塊表示找出差異,進入游戲下一關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>/// 計時/// </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("時間到,還未完成游戲,是否繼續?", "Game Over", MessageBoxButton.YesNo);if (result == MessageBoxResult.Yes){level = 2;Load(); //重置游戲}else{this.Close();}}tmNum--;}/// <summary>/// 點擊不同顏色的色塊時觸發/// </summary>/// <param name="sender"></param>/// <param name="e"></param>void btn_Click(object sender, RoutedEventArgs e){cavContent.Children.Clear();//達到最大關卡時數量不在增多,否則每次多一排一列色塊if (level <= maxLevel){level = level + 1;}Load();}/// <summary>/// 取隨機數/// </summary>/// <param name="maxNum">0-最大區間</param>/// <returns></returns>public int GetRandomNum(int maxNum){Random radom = new Random();return radom.Next(maxNum);}}
?
轉載于:https://www.cnblogs.com/chmc/p/5135725.html
總結
以上是生活随笔為你收集整理的初学WPF,做一款小游戏练习一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Let's Encrypt(开源SSL证
- 下一篇: asp.net ajax控件工具集 Au