wpf 浇水灌溉小游戏
2015-06-23 14:20
387 查看
今天带来的是一个灌溉的小游戏,先看一看效果图!
废话不多说先看一看代码,今天这个比较复杂,运用到了类的一些基本知识,首先创建一个classPipe类,用来表示管子的属性,和管子的四个方向开口,开始的时候管子的开口方向都是false,一个Num用来表示图片号,有一个构造方法,有一个参数,通过参数确定管子的开口方向。
接下来创建一个土地类,ClassFiled,主要用来判断管子的周围是不是有地,如果存在,就表示水可以通过管子流下去! 还有一个ImaClick用来表示这块土地上面的管子,还有刚才创建的那个ClassPipe类,是刚开始的时候管子的开口都是关闭的。
下面就是我们的主要函数体了,先来分析一个,首先我们要将49快土地的位置放好,然后关键水池下面的管子通道,完成之后呢,在创建我们要进行放置的四张管子图片, 将管子的图片号存放带管子类数组当中去 ,然后将管子图片存放到一个数组里面中区,每当点击一个土地的时候,将数组里面管子放到土地上面,然后后一个管子向前移动,一次循环,随即产生一个新的管子,放置到最新的数组里面。
好了到了这一步就基本完成了整个过程,!
源码下载地址
废话不多说先看一看代码,今天这个比较复杂,运用到了类的一些基本知识,首先创建一个classPipe类,用来表示管子的属性,和管子的四个方向开口,开始的时候管子的开口方向都是false,一个Num用来表示图片号,有一个构造方法,有一个参数,通过参数确定管子的开口方向。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _0622 { class ClassPiPe { public ClassPiPe(int num)//构造方法 { Num = num; switch (num) { case 1: IsDown = IsReight = true; break; case 2: IsDown = IsLeft = true; break; case 3: IsLeft = IsUp = true; break; case 4: IsLeft = IsReight = true; break; case 5: IsDown = IsUp = IsLeft = true; break; case 6: IsUp = IsLeft = IsReight = true; break; case 7: IsReight = IsDown = IsUp = true; break; case 8: IsDown = IsLeft = IsReight = true; break; case 9: IsLeft = IsReight = true; break; case 10: IsDown = IsUp = true; break; case 11: IsUp = IsReight = IsDown = IsLeft = true; break; case 12: IsUp = IsReight = IsDown = IsLeft = false; break; } } int num;//记录图片号 public int Num { get { return num; } set { num = value; } } bool isUp; public bool IsUp { get { return isUp; } set { isUp = value; } } bool isDown; public bool IsDown { get { return isDown; } set { isDown = value; } } bool isLeft; public bool IsLeft { get { return isLeft; } set { isLeft = value; } } bool isReight; public bool IsReight { get { return isReight; } set { isReight = value; } } } }
接下来创建一个土地类,ClassFiled,主要用来判断管子的周围是不是有地,如果存在,就表示水可以通过管子流下去! 还有一个ImaClick用来表示这块土地上面的管子,还有刚才创建的那个ClassPipe类,是刚开始的时候管子的开口都是关闭的。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Controls; namespace _0622 { class ClassFiled { public ClassFiled(int num) { if (num > 6) { IsLinkUp = true; } if (num < 41) { IsLinkDown = true; } if (num % 7 != 0) { IsLinkLeft = true; } if (num % 7 != 6) { IsLinkReight = true; } } ClassPiPe cp = new ClassPiPe(12); internal ClassPiPe Cp { get { return cp; } set { cp = value; } } Image imgclick = new Image(); public Image Imgclick { get { return imgclick; } set { imgclick = value; } } bool iswatered; public bool Iswatered { get { return iswatered; } set { iswatered = value; } } bool isLinkUp; public bool IsLinkUp { get { return isLinkUp; } set { isLinkUp = value; } } bool isLinkDown; public bool IsLinkDown { get { return isLinkDown; } set { isLinkDown = value; } } bool isLinkLeft; public bool IsLinkLeft { get { return isLinkLeft; } set { isLinkLeft = value; } } bool isLinkReight; public bool IsLinkReight { get { return isLinkReight; } set { isLinkReight = value; } } } }
下面就是我们的主要函数体了,先来分析一个,首先我们要将49快土地的位置放好,然后关键水池下面的管子通道,完成之后呢,在创建我们要进行放置的四张管子图片, 将管子的图片号存放带管子类数组当中去 ,然后将管子图片存放到一个数组里面中区,每当点击一个土地的时候,将数组里面管子放到土地上面,然后后一个管子向前移动,一次循环,随即产生一个新的管子,放置到最新的数组里面。
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; namespace _0622 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { Image[] imgclick;//存放图片 Image[] imgleft = new Image[4]; int x = 7; Image imgv = new Image(); Image imgw = new Image(); Random r = new Random(); ClassPiPe[] pipe = new ClassPiPe[4];//类数组 ClassFiled[] Cf = new ClassFiled[49]; int click;//点击次数 Button bt = new Button(); public MainWindow() { InitializeComponent(); this.WindowState = System.Windows.WindowState.Maximized; this.Width = SystemParameters.FullPrimaryScreenWidth;//设置全宽度 this.Height = SystemParameters.FullPrimaryScreenHeight;//设置全频高度 this.Left = 0;//让窗体的开始位置处于整个屏幕 this.Top = 0; this.WindowStyle = System.Windows.WindowStyle.None;//去边框 this.AllowsTransparency = true;//透明 this.Background = Brushes.BurlyWood;//背景透明 this.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;//剧中 imgclick = new Image[x * x]; tudi();//产生土地 btn();//产生按钮 guanzi();//产生管子 } private void btn() { bt.Content = "重新开始"; bt.Click += new RoutedEventHandler(bt_Click); bt.Width = 70; bt.Height = 30; Canvas.SetTop(bt, 200); Canvas.SetLeft(bt, 200); back.Children.Add(bt); } private void guanzi() { for (int i = 0; i < 4; i++) { Image imgguan = new Image(); pipe[i] = new ClassPiPe(r.Next(1, 12));//图片号 imgleft[i] = imgguan;//存放管子的数组 if (i == 3) { imgguan.Width = 90; imgguan.Height = 90; } else { imgguan.Width = 80; imgguan.Height = 80; } imgguan.Source = new BitmapImage(new Uri("images/Ready/" + pipe[i].Num + ".jpg", UriKind.Relative)); Canvas.SetLeft(imgguan, 50 + i * 95); Canvas.SetTop(imgguan, 50); back.Children.Add(imgguan); } } private void tudi() { for (int i = 0; i < imgclick.Length; i++) { Image img = new Image(); img.Source = new BitmapImage(new Uri("images/field.jpg", UriKind.Relative)); Cf[i] = new ClassFiled(i);//土地号 img.Tag = i; img.Width = 80; img.Height = 80; img.MouseDown += new MouseButtonEventHandler(img_MouseDown); Canvas.SetLeft(img, this.Width / 2 + i % 7 * img.Width); Canvas.SetTop(img, 200 + i / 7 * img.Height); imgclick[i] = img; back.Children.Add(img); } imgv.Source = new BitmapImage(new Uri("images/V.jpg", UriKind.Relative)); imgv.Width = 80; imgv.Height = 150; Canvas.SetLeft(imgv, this.Width / 2 + 560 / 2 - 40); Canvas.SetTop(imgv, 85); back.Children.Add(imgv); imgw.Source = new BitmapImage(new Uri("images/Water.jpg", UriKind.Relative)); imgw.Width = 120; imgw.Height = 120; Canvas.SetLeft(imgw, this.Width / 2 + 560 / 2 - 60); Canvas.SetTop(imgw, 21); back.Children.Add(imgw); imgw.MouseDown += new MouseButtonEventHandler(imgw_MouseDown); } void bt_Click(object sender, RoutedEventArgs e) { back.Children.Clear(); click = 0; btn(); tudi(); guanzi(); } //点击水源 //实例化类 int num = 3; void imgw_MouseDown(object sender, MouseButtonEventArgs e) { imgv.Source = new BitmapImage(new Uri("images/Water/H10.jpg", UriKind.Relative)); Watering(num); } private void Watering(int num) { // guan(num); if (click < 49)//没有铺满土地 { MessageBox.Show("Sorry 土地没有填充完毕!"); } if (click == 49) { if (Cf[3].Cp.IsUp) { guan(num); // for (int i = 0; i < 49; i++) // { // if (Cf[i].Iswatered == false) // { // goto stop; // } // if (i == 48) // { // MessageBox.Show("成功"); // } // } //stop: MessageBox.Show("失败"); } else { MessageBox.Show("失败"); } } } private void guan(int num) { if (Cf[num].Iswatered == false) { Cf[num].Iswatered = true; Cf[num].Imgclick.Source = new BitmapImage(new Uri("images/Water/H" + Cf[num].Cp.Num + ".jpg", UriKind.Relative)); if (Cf[num].IsLinkReight && Cf[num].Cp.IsReight && Cf[num + 1].Cp.IsLeft) { Watering(num + 1); } if (Cf[num].IsLinkLeft && Cf[num].Cp.IsLeft && Cf[num - 1].Cp.IsReight) { Watering(num - 1); } if (Cf[num].IsLinkUp && Cf[num].Cp.IsUp && Cf[num - 7].Cp.IsDown) { Watering(num - 7); } if (Cf[num].IsLinkDown && Cf[num].Cp.IsDown && Cf[num + 7].Cp.IsUp) { Watering(num + 7); } } } //点击土地 void img_MouseDown(object sender, MouseButtonEventArgs e) { Image img = (Image)sender; img.MouseDown -= new MouseButtonEventHandler(img_MouseDown); Cf[(int)img.Tag].Cp = pipe[3];//将放在地里面的管子属性放到土地类里面去img.Tag表示土地的号码在土地类里面去用管子类 Cf[(int)img.Tag].Imgclick = img;//将点击的图片放到地里面 img.Source = new BitmapImage(new Uri("images/Ready/" + pipe[3].Num + ".jpg", UriKind.Relative)); click++; for (int i = 3; i > 0; i--) { pipe[i] = pipe[i - 1]; imgleft[i].Source = imgleft[i - 1].Source; } if (click > 45) { pipe[0] = null; imgleft[0].Source = null; } else { pipe[0] = new ClassPiPe(r.Next(1, 11)); imgleft[0].Source = new BitmapImage(new Uri("images/Ready/" + pipe[0].Num + ".jpg", UriKind.Relative)); } } } }
好了到了这一步就基本完成了整个过程,!
源码下载地址
相关文章推荐
- WebRTC 学习笔记(1)--总述
- MySQL 一台主机多实例root登录问题
- 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- akka优势
- gre词汇免费下载
- 工作日记总结6月24日
- Android之Http通信——5.开发中遇到的一些问题
- shell基本
- 说说Java中的final、finally和finalize
- 运行与总结
- [转]ISTQB FL初级认证考试资料(中文)
- BZOJ3073 : [Pa2011]Journeys
- 公云怎么用?
- 一张表看清中国软件公司2014年谁家营收最多?
- 使用 Redis 实现分布式系统轻量级协调技术
- sendRedirect和forward原理及区别总结
- Matlab图像处理小结
- 幸福列车(多个优先队列)
- JSP验证码的实现
- linux下ctrl 常用组合键