实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; //有关文件的 using System.Collections; namespace 人物拼图游戏 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public PictureBox[] PicBlock ; int GameSize; //布局大小 int MAP_WIDTH = 300; //图片宽度 int FirstBlock, SecondBlock; bool flag; //是否交换 int[] Position ; //存放图片序号的数组 Bitmap Source; //原图像300*300 string filename; //所选择的文件名 private void Form1_Load(object sender, System.EventArgs e) { filename = Application.StartupPath "\\defa.bmp"; pictureBox1.Image = Image.FromFile(filename); flag = false; comboBox1.Items.Clear(); comboBox1.Items.Add("9"); comboBox1.Items.Add("16"); comboBox1.Items.Add("25"); comboBox1.Text = "9"; MAP_WIDTH = 300; Source = new Bitmap(MAP_WIDTH, MAP_WIDTH);//原图像 SaveBmp(); } private void SaveBmp() //按MAP_WIDTH*MAP_WIDTH大小保存所选图片到Source位图 { Graphics g ; g = Graphics.FromImage(Source); //生成Graphics对象 g.DrawImage(Image.FromFile(filename), 0, 0, MAP_WIDTH, MAP_WIDTH); //pictureBox1.Image } private void init(int n) { Random rdm ; ArrayList al = new ArrayList(); int t = 0; rdm = new Random(); t = 0; while (al.Count < n * n) { t = rdm.Next(0, n * n); if ((!al.Contains(t))) { al.Add(t); } } //清除已有图片框控件数组中的控件 if (PicBlock != null) { for (int i = 0; i < PicBlock.Length; i ) if(PicBlock[i]!=null)PicBlock[i].Dispose(); } PicBlock = new PictureBox[n*n]; Position = new int[n * n]; for (t = 0; t <= al.Count - 1; t ) { Position[t] = Convert.ToInt16 (al[t]); } } private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e) { GameSize =(int) Math.Sqrt(Convert.ToInt16 (comboBox1.Text)); init(GameSize); } private void button1_Click(object sender, System.EventArgs e) { openFileDialog1.ShowDialog(); if (!string.IsNullOrEmpty(openFileDialog1.FileName)) { filename = openFileDialog1.FileName; pictureBox1.Image = Image.FromFile(filename); SaveBmp(); } } private void button2_Click(object sender, System.EventArgs e) //开始按钮 { init(GameSize); //卸载上次的图片块 //重新加载图片块 int i = 0; int BWidth = 0; BWidth = MAP_WIDTH / GameSize; for (i = 0; i <= GameSize * GameSize - 1; i ) { PicBlock[i] = new PictureBox(); this.Controls.Add(PicBlock[i]); PicBlock[i].Left = 250 BWidth * (i % GameSize); PicBlock[i].Top = BWidth * (int)(i / GameSize) 70; PicBlock[i].Width = BWidth; PicBlock[i].Height = BWidth; PicBlock[i].Name = "PicBlock" i.ToString(); PicBlock[i].Tag = i; PicBlock[i].Image = create_image(Position[i]); PicBlock[i].BorderStyle = BorderStyle.Fixed3D; //PicBlock[i].BringToFront() ((PictureBox)PicBlock[i]).Click = swap; } } private void swap(object sender, System.EventArgs e) { //这里处理公共事件,根据单击交换数组元素; PictureBox bClick=( PictureBox)sender; int i = 0; Image temp; //将被点击的控件赋给bClick变量 if (flag == false) { flag = true; FirstBlock = Convert.ToInt16(bClick.Tag); } else //交换 { this.Text = ""; SecondBlock = Convert.ToInt16(bClick.Tag); temp = PicBlock[SecondBlock].Image; PicBlock[SecondBlock].Image = PicBlock[FirstBlock].Image; PicBlock[FirstBlock].Image = temp; flag = false; i = Position[SecondBlock]; Position[SecondBlock] = Position[FirstBlock]; Position[FirstBlock] = i; foreach (int s in Position) { this.Text = this.Text Position[s].ToString (); } if (CheckWin() == true) //过关 { MessageBox.Show("成功了", "提示"); } } } private bool CheckWin() //判断是否成功 { int t = 0; for (t = 0; t <= Position.Length - 1; t ) { if (Position[t] != t) { return false; } } return true; } private Bitmap create_image(int n) //按标号n截图 { int W = 0; W = MAP_WIDTH / GameSize; Bitmap bit = new Bitmap(W, W); Graphics g = Graphics.FromImage(bit); //生成Graphics对象 Rectangle a = new Rectangle(0, 0, W, W); Rectangle b = new Rectangle((n % GameSize) * W, n / GameSize * W, W, W); g.DrawImage(Source, a, b, GraphicsUnit.Pixel); //截图 Copy W*W part from source image Image.FromFile("temp.bmp") return bit; } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论