• 使用WPF教你一步一步实现连连看(三)


    这次首先对以前的结构进行了调整:

    第一步:把MyButton按钮的属性独立成一个类,放在一个单独的MyButton.cs中,把图片的初始化也放到里面。

    调整代码如下:

    public class MyButton : Button
        {
            //图片的名称,用于判断两个按钮是否为同一个
            public int Flag { get; set; }

            //Button所在行
            public int RowNum { get; set; }

            //所在列
            public int ColNum { get; set; }

            public MyButton(int flag, int romNum, int colNum)
            {
                this.Flag = flag;
                this.RowNum = romNum;
                this.ColNum = colNum;

                if (flag != 0)
                {
                    Image img = new Image();
                    img.Source = new BitmapImage(new Uri(@"images" + flag + ".png", UriKind.Relative));
                    this.Content = img;
                }
            }
        }

    第二步:将设置随机数独立成MyRandom.cs,这里将图片个数等一些属性都设置成了可变的,调整内容如下

    public class MyRandom 
       { 
           private int Count;  //产生多少个数字 
           private int Amount; //产生几份 
           private int Max;    //最大数(不包含) 
           private int Min;    //最小数 
           /// <summary> 
           /// 
           /// </summary> 
           /// <param name="count">产生多少个数字</param> 
           /// <param name="amount">产生几份(须为count的约数)</param> 
           /// <param name="min">最小数</param> 
           /// <param name="max">最大数(不包含)</param> 
           public MyRandom(int count, int amount, int min, int max) 
           { 
               if (count % amount != 0) 
                   throw new Exception("count须为amount的整数倍"); 
               if (min > max) 
                   throw new Exception("min必须小于等于max"); 
               Count = count; 
               Amount = amount; 
               Max = max; 
               Min = min; 
           } 
           public List<int> Get() 
           { 
               Random rand = new Random(); 
               List<int> ran = new List<int>(); 
               for (int n = 0; n < Count / Amount; n++) 
                   ran.Add(rand.Next(Min, Max)); 
               for (int i = 1; i < Amount; i++) 
               { 
                   List<int> temp = new List<int>(); 
                   temp.AddRange(ran); 
                   for (int n = 0; n < Count / Amount; n++) 
                   { 
                       int r = rand.Next(0, temp.Count); 
                       ran.Insert(rand.Next(0, ran.Count), temp[r]); 
                       temp.RemoveAt(r); 
                   } 
               } 
               return ran; 
           } 
       } 

    第三步:对Add方法进行了调整,为了方便理解将变量i,j,调整为r,c(对应行列),同时根据上述变化做了其他一些调整,内容如下:

    MyButton[,] maps = new MyButton[10, 10]; 
          
           int Count; 
           public void Add() 
           { 
               for (int i = 0; i < 10; i++) 
               { 
                   RowDefinition rowDef = new RowDefinition(); 
                   GridGame.RowDefinitions.Add(rowDef);
    
                   ColumnDefinition colDef = new ColumnDefinition(); 
                   GridGame.ColumnDefinitions.Add(colDef); 
               } 
               Count = 8;
    
               Amount = 32; 
               List<int> ran = (new MyRandom(64, 2, 1, Count)).Get(); 
               for (int r = 0; r < 10; r++) 
               { 
                   for (int c = 0; c < 10; c++) 
                   { 
                       MyButton btn;
    
                       if (r == 0 || r == 9 || c == 0 || c == 9) 
                       { 
                           btn = new MyButton(0, r, c); 
                           btn.Visibility = System.Windows.Visibility.Hidden; 
                       } 
                       else 
                           btn = new MyButton((int)ran[(r - 1) * 8 + c - 1], r, c);
    
                       btn.Click += btn_Click;
    
                       maps[r, c] = btn;
    
                       Grid.SetColumn(btn, c); 
                       Grid.SetRow(btn, r ); 
                       GridGame.Children.Add(btn); 
                   } 
               } 
           } 


             好了,到目前为止,我们得到了一个可以玩的连连看了。这一篇虽然比起上一篇没有多大的进度,只是对结构进行了调整,代码进行了优化。这样结构也稍微清晰了许多,也便于理解。

    倒计时我大概已经有了思路,也基本已经成型了,但连线还没想好怎么弄,有志同道合的朋友可以讨论下。

    最后,如果感觉对您有所帮助,请帮忙推荐下……感谢!

    源代码下载

  • 相关阅读:
    常用SQL语句
    H5内嵌原生app
    github 从一个仓库换到另一个仓库
    vue使用install函数把组件做成插件方便全局调用
    git 支持tree命令
    vue---vue2.x自定义plugin,给vue添加全局方法,原型上增加全局方法
    vue 生命周期函数
    登录拦截设置白名单-坑
    vue
    vue实现滚动条滚到相应高度触发动画的操作
  • 原文地址:https://www.cnblogs.com/smiler/p/3213575.html
Copyright © 2020-2023  润新知