使用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); 
               } 
           } 
       } 

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

倒计时我大概已经有了思路,也基本已经成型了,但连线还没想好怎么弄,有志同道合的朋友可以讨论下。 最后,如果感觉对您有所帮助,请帮忙推荐下……感谢! 源代码下载

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小文博客

蓝桥杯 C语言省赛 习题2 格子中输出

1234
来自专栏逍遥剑客的游戏开发

用OpenGL绘制地球

4889
来自专栏从流域到海域

Python 切片(Slice)

在实际开发中,经常遇到下面的需求:在线性表(数组)中提取若干个元素的操作,提取规则有很多,比如说提取前5个、提取后5个、提取奇数/偶数位元素等等。 ...

19010
来自专栏章鱼的慢慢技术路

Direct3D 11 Tutorial 7:Texture Mapping and Constant Buffers_Direct3D 11 教程7:纹理映射和常量缓冲区

在上一个教程中,我们为项目引入了照明。 现在我们将通过向我们的立方体添加纹理来构建它。 此外,我们将介绍常量缓冲区的概念,并解释如何使用缓冲区通过最小化带宽使用...

744
来自专栏落影的专栏

iOS开发-OpenGL ES入门教程1

前言 这里是一篇新手教程,环境是Xcode7+OpenGL ES 2.0,目标写一个OpenGL ES的hello world。 OpenGL ES系列教程在...

3069
来自专栏GIS讲堂

说说地图中的聚类

虽然Openlayers4会有自带的聚类效果,但是有些时候是不能满足我们的业务场景的,本文结合一些业务场景,讲讲地图中的聚类展示。

913
来自专栏章鱼的慢慢技术路

OpenGL中的二维编程——从简单的矩形开始

1744
来自专栏图形学与OpenGL

机械版CG 实验4 裁剪

了解二维图形裁剪的原理(点的裁剪、直线的裁剪、多边形的裁剪),利用VC+OpenGL实现直线的裁剪算法。

1291
来自专栏每日一篇技术文章

OpenGLES_实战04_教你绘制球体

写这篇文章主要给初学者一个绘制球体的思路,苹果给我们封装的类,帮助我们简化了不少代码,如果纯OpenGL 做这样一个练习代码量还是挺多的。

1201
来自专栏阿凯的Excel

【虐心】统计符合条件的不重复单元格个数

昨天有个网友在公众号留言问我~ 统计符合B列条件的A列不重复的计数(多个重复算一个) 我读了两边,领悟了他的问题,就是统计符合条件的另外一列的不重复单元格个数...

4524

扫码关注云+社区