使用WPF教你一步一步实现连连看(一)
第一步:
问题,怎样动态的建立一个10*10的grid(布局)
for (int i = 0; i < 10; i++)
{
RowDefinition rowDef = new RowDefinition();
GridGame.RowDefinitions.Add(rowDef);
ColumnDefinition colDef = new ColumnDefinition();
GridGame.ColumnDefinitions.Add(colDef);
}
第二步:
问题,怎样将button放到上边那个布局中(这个是我查资料才知道的,一般都是用Grid在前台布局)
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
Button btn = new Button(); btn.Content = i + "," + j;
Grid.SetColumn(btn, j);
Grid.SetRow(btn, i); GridGame.Children.Add(btn);
}
}
效果如图1
第三步:
问题3,怎样将Button的内容换成随机图片呢?
Random random = new Random(); for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
int imgName = random.Next(, );//生成一个>=1,<10的随机数 Image img = new Image();
img.Source = new BitmapImage(new Uri("images/" + imgName + ".png", UriKind.Relative)); Button btn = new Button();
btn.Content = img; Grid.SetColumn(btn, j);
Grid.SetRow(btn, i); GridGame.Children.Add(btn);
}
}
效果如图
这里需要注意一点,不要把Random random = new Random();这句放到循环里面,不然会变成这样
图
第四步:
上面我们已经完成了LLK的布局,下面咱们实现Button的点击事件,并实现点击
两个相同背景的button进行消除。问题又来,我们怎么判断两个button是相同背景呢。
我们来重写Button,给它增加几个属性:
public class MyButton : Button
{
//button标示,用于判断两个按钮是否为同一个
public int Flag { get; set; } //Button所在行
public int RowNum { get; set; } //所在列
public int ColNum { get; set; } public MyButton(int flag,int rowNum,int colNum)
{
this.Flag = flag;
this.RowNum = romNum;
this.ColNum = colNum;
}
}
好了,有了判断依据,我们就可以写点击事件了
MyButton btn1;
MyButton btn2;
int ClickCount = ;
void btn_Click(object sender, RoutedEventArgs e)
{
++ClickCount;
if (ClickCount == )
{
btn1 = sender as MyButton;
}
else if(ClickCount==)
{
btn2 = sender as MyButton; if (btn1 != null && btn2 != null)
{
if (btn1.Flag == btn2.Flag&&!(btn1.ColNum==btn2.ColNum&&btn1.RowNum==btn2.RowNum))
{
btn1.Visibility = Visibility.Hidden;
btn2.Visibility = Visibility.Hidden;
} }
btn1 =null;
btn2 = null;
ClickCount = ;
}
}
好了,我们现在完成了最基本点击消除功能
运行效果如下:
完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace llk
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Add();
}
public void Add()
{
Random random = new Random(); for (int i = ; i < ; i++)
{
RowDefinition rowDef = new RowDefinition();
GridGame.RowDefinitions.Add(rowDef); ColumnDefinition colDef = new ColumnDefinition();
GridGame.ColumnDefinitions.Add(colDef);
} for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
int imgName = random.Next(, );//生成一个>=1,<21的随机数 Image img = new Image();
img.Source = new BitmapImage(new Uri("images/" + imgName + ".png", UriKind.Relative)); MyButton btn = new MyButton(imgName,i,j);
btn.Content = img;
btn.Click += btn_Click;
Grid.SetColumn(btn, j);
Grid.SetRow(btn, i); GridGame.Children.Add(btn);
}
}
} MyButton btn1;
MyButton btn2;
int ClickCount = ;
void btn_Click(object sender, RoutedEventArgs e)
{
++ClickCount;
if (ClickCount == )
{
btn1 = sender as MyButton;
}
else if(ClickCount==)
{
btn2 = sender as MyButton; if (btn1 != null && btn2 != null)
{
if (btn1.Flag == btn2.Flag&&!(btn1.ColNum==btn2.ColNum&&btn1.RowNum==btn2.RowNum))
{
btn1.Visibility = Visibility.Hidden;
btn2.Visibility = Visibility.Hidden;
} }
btn1 =null;
btn2 = null;
ClickCount = ;
}
} }
public class MyButton : Button
{
//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.RomNum = romNum;
this.ColNum = colNum;
}
}
}
是不是很简单啊,下一步我们加入规则算法……
----- 未完待续……------
另外谁能告诉我怎么上传源代码吗,直接发出来太占篇幅了……
哈,知道怎么上传了,现把图片发一下,资源图片,便于你们试验用……
使用WPF教你一步一步实现连连看(一)的更多相关文章
- 使用WPF教你一步一步实现连连看
使用WPF教你一步一步实现连连看(一) 第一步: 问题,怎样动态的建立一个10*10的grid(布局) for (int i = 0; i < 10; i++){ RowDefinition r ...
- 一步一步教你如何在linux下配置apache+tomcat(转)
一步一步教你如何在linux下配置apache+tomcat 一.安装前准备. 1. 所有组件都安装到/usr/local/e789目录下 2. 解压缩命令:tar —vxzf 文件名(. ...
- 一步一步教你将普通的wifi路由器变为智能广告路由器
一步一步教你将普通的wifi路由器变为智能广告路由器 相信大家对WiFi智能广告路由器已经不再陌生了,现在很多公共WiFi上网,都需要登录并且验证,这也就是WiFi广告路由器的最重要的功能.大致就是下 ...
- 一步一步教你使用Git
一步一步教你使用Git 互联网给我们带来方便的同时,也时常让我们感到困惑.随便搜搜就出一大堆结果,然而总是有大量的重复和错误.小妖发出的内容,都是自己实测过的,有问题请留言. 现在,你已经安装了Git ...
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app 转载 作者:jrainlau 链接:https://segmentfault.com/a/1190000005844155 ...
- Ace教你一步一步做Android新闻客户端(一)
复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...
- 一步一步教你实现iOS音频频谱动画(二)
如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第一篇:一步一步教你实现iOS音频频谱动画(一) 本文是系列文章中的第二篇,上篇讲述了音频播放和频谱数据计算,本篇讲 ...
- 一步一步教你实现iOS音频频谱动画(一)
如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第二篇:一步一步教你实现iOS音频频谱动画(二) 基于篇幅考虑,本次教程分为两篇文章,本篇文章主要讲述音频播放和频谱 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布
之前的章节我们介绍了如何通过dapr发起一个服务调用,相信看过前几章的小伙伴已经对dapr有一个基本的了解了,今天我们来聊一聊dapr的另外一个功能--订阅发布 目录:一.通过Dapr实现一个简单的基 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr
目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务电 ...
随机推荐
- kbmmw中向服务器端传递对象的一种简单方式
运行环境:delphi 10.2+kbmmw 5.6.20 在kbmmw 的老版本中,要向服务器传送一个本地的对象,一般都需要进行一些转换,例如通过序列化的方式. 在新版的kbmmw中这一切都变的很简 ...
- nginx简单权限配置
一.指定ip段 location / { allow 172.17.0.1/24; deny all; } 二.指定认证账户 location / { auth_basic "please ...
- IOS内存管理详解
一. 基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空 ...
- JAVA 8 主要新特性 ----------------(二)版本中数据结构的修改浅析
一.版本中数据结构的修改浅析1.HashMap.HashSet.ConcurrentHashMap的数据结构发生变化 (1)HashMap简介(结构:哈希表+链表) HashMap存储的数据是无序的, ...
- 通过MFC设计一个简单的计价程序
1.实验目的 掌握使用MFC应用程序向导创建应用程序的方法. 掌握新建对话框资源的方法. 掌握生成对话框的方法. 2.实验内容 用应用程序创建一个默认的对话框应用程序,在对话框中能进入下一个对话框,在 ...
- Django Auth 专题
Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包,其中django ...
- Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
为了确保数据传输的安全,现在越来越多的应用使用Https的方式来进行数据传输,使用https有很多有点,比如: HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,要比ht ...
- maya2014卸载/安装失败/如何彻底卸载清除干净maya2014注册表和文件的方法
maya2014提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2014失败提示maya2014安装未完成,某些产品无法安装,也有时候想重新安装maya ...
- Behavior Tree 用 Lua 实现一个最简行为树
local function Traverse(node, ...) local t = node.type if t == SELECTOR then , #node do if Traverse( ...
- ffmpeg命令: 删除视频中不需要的音频流
1.ffprobe gf.mkv 查看 2.ffmpeg -i gf.mkv -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mkv 注: -m ...