c#(WPF)实现连连看

       其实c#实现简单的练练看是很简单的,主要目的就是熟悉一些控件和函数吧。首先需要用到的是Grid布局,因为这是个网格布局,正好和连连看的布局一致。至于想设计多大看你自己。在WPF中我们写控件可以利用Xaml和直接用代码写,这就看个人喜好了。但是出于练习,我还是没有直接拖出控件,而是用代码写。

            for (i = 0; i < n; i++)
            {
                RowDefinition row = new RowDefinition();
                LLK_Background.RowDefinitions.Add(row);
                ColumnDefinition col = new ColumnDefinition();
                LLK_Background.ColumnDefinitions.Add(col);
            }

这段代码是用来设置布局的,其中RowDefinition是设置行,ColumnDefinition是设置列的,这里我们要明白一点,可以在Xaml中写的都是可以在代码中new出来的。其中Grid的布局是大家平分这个网格,横向的横向平分,纵向的纵向平分。

       然后我们需要学会的就是动态的生成控件,因为我们假设连连看是7*7的那么就要49个Image的控件,如果手动的话。。。。。

            //动态生成图片
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    imageName = rand.Next(1, 8);
                    Image image = new Image();
                    image.Source = new BitmapImage(new Uri("MyPicture/" + imageName.ToString() + ".bmp", UriKind.Relative));
                    image.Name = "image" + imageName.ToString();
                    //image.Stretch = Stretch.Fill;;
                    Grid.SetRow(image, i);
                    Grid.SetColumn(image, j);
                    LLK_Background.Children.Add(image);
                    image.MouseDown += image_MouseDown;                   
                }
            }

其中image.Source的意思是从指定的路径获取图片,注意路径中式用/来进入文件的。image.Name是为了后面方便来判断两幅图画是否相同的辅助变量,不过我们在操纵控件的时候一般也是通过名字来进行的。并且注意这个image的设置,右侧的字符串不能有非数字和字母的字符,否则会报错,而且最好不要让数字.ToString()放前面,不然也会报错,还有里面呆上image这个字符串。(具体错误原因我目前也没弄懂。)注意注释的那一句,因为我们在加载图片上去的时候会发现,有一些空白在图片之前,那是因为Image有个自动对齐功能,会自动调整图片的大小,让所有图片对齐。如果我们不需要这个那么就可以设置Stretch这个属性。后面的Grid那两个函数直接顾名思义就知道了。然后就是吧Iimage这图片加入到Grid中。最后一句话是给每张图片添加一个鼠标点击的事件。这里我们要注意的是:

      在WPF写的代码中加时间就和找属性一样,可以直接用打一点(.)来联想出来,然后按 Tab键就可以了自动添加函数了。下面是要随机添加图片到网格中。:

Random rand = new Random();
int imageName;

然后在循环中配合rand.Next()函数就行,其中Next函数有重载的:

Next(int min,int max);意思是返回的随机数大于等于min小于max,

Next();                        直接产生随机数,没有限制,可以用求余数来完成上面的功能。

        void image_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //throw new NotImplementedException();
            if (count == 0)
            {
                count++;
                Before = ((Image)sender);
            }
            else
            {
                count = 0;
                string Now = ((Image)sender).Name;
                if (Before.Name == Now && Before != (Image)sender)
                {
                    ((Image)sender).Visibility = System.Windows.Visibility.Collapsed;
                    Before.Visibility = System.Windows.Visibility.Collapsed;
                }
            }
        }

这个就是每张图片的点击事件,实现很简单,连连看的逻辑就是点击的两个图片一样,那么久消除就行了,那么这里就是一个简单的判断是否相等的逻辑就行了。这里注意sender这个参数,每个事件函数中都有,因为这个参数代表的是控件,但是由于不知道是什么控件被点击了,所以用了一个公共的父类Object,这就是多态。

--------------------------------------------------------我是分割线--------------------------------------------------------------

控件杂记:

1.常用的控件属性:

    1>.Visibility:是否可见,注意这里不可见选取的是collapse,而不是Hidden。

    2>.IsEnable:是否可用

    3>.backGround背景颜色的设置,ForeGround前景颜色,比如字的颜色

    4>.isReadOnly文本用来只读的属性

    5>.TextWrapping:(wrap)代表可以滚动

2.c#中不可以为null的值的类型,可以写成
int?   a = null;
DateTime?   b = null;
也就是加一个问号就可以,其中有好多控件的事件函数中可能会用到这个

3.radioButton分组:

GroupName = “”(组的名字)相同的组成员是一个名字


4.ProgressBar:进度条
Maximum:最大值
Minimum: 最小值
value:当前值
IsInDeterminate:不确定模式,进度条一直显示在读条状态

猜你喜欢

转载自blog.csdn.net/c_living/article/details/79844361
今日推荐