您的位置:首页 > 编程语言 > C#

C# WPF 实现英雄联盟图片 宝宝识图

2015-05-28 22:36 288 查看
这篇文章是我开通csdn博客的第一篇文章,希望大家多多支持!以后慢慢会有更好的文章分享给大家!谢谢大家!

先看一下运行后的一个效果图。



就是这样一个效果图。你每点击一次一个出现相同的动画,就会更新九宫格里面的图片,然后又产生下一张图片,如果点击错误,就会弹出窗口提醒失败!不多说了上代码,代码还是比较简单的。先是一个前台界面的代码,主要代码在后台实现,所以,前台还是比较简单的。
<Window x:Class="_201524jiugongge.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="481" Width="670" Loaded="Window_Loaded">
<Canvas Name="shouhu">
<Border Name="xianshi" Width="670" Height="430" Background="BlueViolet" CornerRadius="40" Opacity="0.7">

</Border>
</Canvas>
</Window>
大家可以看到Canvas里面有一个name,这个主要是在后台引用的。希望大家注意。

下面就是后台代码了,也不是特别的难,我呢注释也加的比较详细。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using System.Windows.Media.Animation;//注意的是这里要导入动画的命令。
using System.Windows.Threading;

namespace _201524jiugongge
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{

int[] num;
Random ran = new Random();

Storyboard sto = new Storyboard();
Label la = new Label();
Image imgleft = new Image();
public MainWindow()
{
InitializeComponent();
this.WindowStyle = System.Windows.WindowStyle.None;//去边框
this.AllowsTransparency = true;//透明
this.Background = Brushes.Transparent;//背景透明5
this.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;//剧中
this.Width = 800;//设置宽度
this.Height = 800;//设置高度
Create();

}

private void Create()
{
string[] name;//string数组,用来存放英雄的名字
name = new string[51] { "暗裔剑魔", "九尾妖狐", "暗影之拳", "牛头酋长", "殇之木乃伊", "标双鸷鸟", "黑暗之女", "寒冰射手", "沙漠皇帝","盲僧","机器人","复仇焰魂","光辉女郎","皮城女警","魔蛇之拥","虚空恐惧","忍者神龟","诺克萨斯","皎月女神","荣耀行刑官","祖安狂人","蜘蛛女王","寡妇制造者","探险家"
,"末日使者","无双剑姬","潮汐海陵","哨兵之殇","海盗船长","德玛西亚","机械公敌","酒桶","阎王罗","战争之神","大发明家","刀锋意志","琴瑟仙女","皇子","武器大师","小白脸","暴走萝莉","冰霜女巫","赛利亚","死亡颂唱","GSD","不祥之刃","战争之王","狂暴的心","虚空魔石","深渊巨口","诡术妖姬"};
num = new int[9];//产生九个随即的图片

for (int i = 0; i < num.Length; i++)
{
num[i] = ran.Next(51);
for (int j = 0; j < i; j++)
{

if (num[i] == num[j])
{
i--;
break;
}
}
}//循环产生图片不重复
//添加图片
la.Width = 400;//添加一个Lable
la.Height = 80;
la.FontSize = 42;
la.Foreground = Brushes.Gold;
la.FontFamily = new System.Windows.Media.FontFamily("微软雅黑");//设置字体

la.Content = "MY HERO";
Canvas.SetLeft(la, 400);//设置标签的位置
Canvas.SetTop(la, 50);
for (int i = 0; i < num.Length; i++)
{
Border b = new Border();//出创建一个Border
b.Width = 100;
b.Height = 100;
b.MouseEnter += new MouseEventHandler(b_MouseEnter);//添加鼠标进入离开事件
b.MouseLeave += new MouseEventHandler(b_MouseLeave);

Image img = new Image();//创建英雄图片
img.MouseDown += new MouseButtonEventHandler(img_MouseDown);//图片的鼠标事件
img.Source = new BitmapImage(new Uri("IMG/" + num[i] + ".png", UriKind.Relative));//添加图片资源
Canvas.SetLeft(b, 50 + i % 3 * b.Width + (i % 3) * 5);//设置图片显示的位置
Canvas.SetTop(b, 50 + i / 3 * b.Height + (i / 3) * 5);
b.Child = img;//给图片添加一个Border,图片是边框的子集
img.Tag = name[num[i]];//将英雄的名字添加到一股string的数组里面
// img.Tag = ;
// la.Content = img.Tag;
shouhu.Children.Add(b);//给一个Canvans起一个nane得值,将Border资源添加到窗体里面去

}

//用来产生一个对比的图片
int x = ran.Next(9);//随即产生九个数字
imgleft.Width = 150;
imgleft.Height = 150;//设置图片的高度,宽度,以及位置
imgleft.Tag = name[num[x]];//将对应的英雄的名字覆给便签
// imgleft.Tag = name[ran.Next(9)];
imgleft.Source = new BitmapImage(new Uri("IMG/" + num[x] + ".png", UriKind.Relative));
//从51张图片里面随即产生一张图片
Canvas.SetLeft(imgleft, 420);
Canvas.SetTop(imgleft, 140);
shouhu.Children.Add(imgleft);//添加到窗体中去
la.Content = imgleft.Tag;//获取英雄的名字

shouhu.Children.Add(la);//将标签添加到窗体当中去
DoubleAnimation da = new DoubleAnimation(0, 150, TimeSpan.FromSeconds(3));//创建单点之间动画
Storyboard.SetTarget(da, imgleft);//添加到
Storyboard.SetTargetProperty(da,new PropertyPath("(Height)"));//动画的风格
sto.Children.Add(da);//添加到动画班里面
sto.Begin();//开始动画

}

void img_MouseDown(object sender, MouseButtonEventArgs e)
{
Image img = (Image)sender;

if (img.Tag.ToString() == imgleft.Tag.ToString())
{
shouhu.Children.Clear();//每次随即是起初上一次的内容
shouhu.Children.Add(xianshi);
Create();
}
else
{
MessageBox.Show("失败");
}
}

void b_MouseLeave(object sender, MouseEventArgs e)
{
Border b = (Border)sender;
b.BorderThickness = new Thickness(0);

}

void b_MouseEnter(object sender, MouseEventArgs e)
{
Border b = (Border)sender;
b.BorderThickness = new Thickness(3);
b.BorderBrush = Brushes.Gold;
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{

}
}
}
从代码里面可以看到,我将所有英雄的图片放在一个数组里面,由于英雄太多,所以只有51张英雄的图片,大家也可以添加!

注释也比较详细,所以就不多说了。点击打开链接代码大家可以去我的云盘去下载。图片资源也在云盘里面。到这今天的所有内容就全部完成了,希望大家支持!








内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: