VS,C#--拼图小游戏
来源:互联网 发布:soc管理平台 知乎 编辑:程序博客网 时间:2024/05/17 09:07
中午闲来无聊,正好在些winfrom小案例,于是想用VS、C#写点东西,由于能力有限,当然的写个简单点的啦,于是花了半个个小时写了这个拼图游戏小程序,希望对初学winfrom和C#的朋友有所帮助。程序运行效果如下:
1)首先按上图添加控件;
2)下面是程序的主要代码:功能如注释所示:
using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace JD_Game_TZ{ public partial class FrmMain : Form { //图片原图块 private int FirstBlock; //布局大小 private int GameSize; //图片宽度 private int MAP_WIDTH = 300; //图片列表 public PictureBox[] PicBlock; //存放图片序号的数组 private int[] Position; //图片新图块 private int SecondBlock; //原图像 private Bitmap Source; //所选择的文件名 private string filename; //是否交换 private bool flag; public FrmMain() { InitializeComponent(); } #region 窗体事件 //窗体加载时 private void FrmMain_Load(object sender, EventArgs e) { //设置默认图像路径 filename = Application.StartupPath + "\\image.bmp"; //将图片放置到pictureBox1里 pictureBox1.Image = Image.FromFile(filename); //不交换 flag = false; //设置图片大小 MAP_WIDTH = 300; //设置位图区域 Source = new Bitmap(MAP_WIDTH, MAP_WIDTH); SavBmp(); } //打开文件对话框选择图片 private void btnImage_Click(object sender, EventArgs e) { ////打开对话框 //openFileDialog1.ShowDialog(); ////判断字符串是否为空字符串 //if (!string.IsNullOrEmpty(openFileDialog1.FileName)) //{ // //获取图片全路径 // filename = openFileDialog1.FileName; // //将图片赋给pictureBox1 // pictureBox1.Image = Image.FromFile(filename); // //指定大小保存位图 // SavBmp(); //} if (openFileDialog1.ShowDialog() == DialogResult.OK) { //获取图片全路径 filename = openFileDialog1.FileName; //将图片赋给pictureBox1 pictureBox1.Image = Image.FromFile(filename); //指定大小保存位图 SavBmp(); } } //开始按钮 private void btnBegin_Click(object sender, EventArgs e) { //卸载上次的图片块 init(GameSize); //重新加载图片块 int i = 0; //获取小图片的边距 int BWidth = 0; BWidth = MAP_WIDTH / GameSize; //遍历布局 for (i = 0; i <= GameSize * GameSize - 1; i++) { //创建PictureBox PicBlock[i] = new PictureBox(); //PictureBox添加到控件 Controls.Add(PicBlock[i]); //左边距 PicBlock[i].Left = 250 + BWidth * (i % GameSize); //上边距 PicBlock[i].Top = BWidth * (i / GameSize) + 70; //宽度 PicBlock[i].Width = BWidth; //高度 PicBlock[i].Height = BWidth; //命名 PicBlock[i].Name = "PicBlock" + i.ToString(); //小图序号 PicBlock[i].Tag = i; //设置小图图片 PicBlock[i].Image = createImage(Position[i]); //设置小图片的边框 PicBlock[i].BorderStyle = BorderStyle.Fixed3D; PicBlock[i].BringToFront(); (PicBlock[i]).Click += swap; } } //下拉框选择分割数 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { //获取分割数 GameSize = (int)Math.Sqrt(Convert.ToInt16(comboBox1.Text)); //分割图片 init(GameSize); } #endregion //按指定大小保存所选图片到Source位图 private void SavBmp() { Graphics g; //在位图区域生成Graphics对象 g = Graphics.FromImage(Source); //在位图区域绘制图片 g.DrawImage(Image.FromFile(filename), 0, 0, MAP_WIDTH, MAP_WIDTH); } #region 分割方法 //打散图片 private void init(int n) { //创建随机对象 Random rdm = new Random(); //创建动态数组对象去装图片 ArrayList al = new ArrayList(); //定义临时变量存储产生的随机数 int t = 0; 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(); } } } //创建PictureBox PicBlock = new PictureBox[n * n]; //图片序号的数组 Position = new int[n * n]; //遍历图片序号数组 for(t = 0; t <=al.Count-1; t++) { //获取小图片的序号 Position[t] = Convert.ToInt16(al[t]); } } //分割图片 public Bitmap createImage(int n) { int W = 0; //获取小图的大小 W = MAP_WIDTH / GameSize; //设置小图片的位图区域 Bitmap bit = new Bitmap(W, W); //创建小图片区域的绘制工具 Graphics g = Graphics.FromImage(bit); // 矩形 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); return bit; } #endregion #region 交换事件 //交换方法 private void swap(object sender, EventArgs e) { //这里处理公共事件,根据单击交换数组元素 PictureBox bClick = (PictureBox)sender; //定义临时变量接受点击小图的序号 int i = 0; Image temp; //将被点击的控件赋给bClick变量 if (flag == false) { //交换 flag = true; //获取第一次点击图片的序号 FirstBlock = Convert.ToInt16(bClick.Tag); } else//交换 { 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)//遍历图片序号数组 { //存储图片的序号拼接 Text = Text + Position[s].ToString(); } if (CheckWin())//过关 { MessageBox.Show("厉害完成了", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } //判断是否成功 private bool CheckWin() { int t = 0; //遍历图片序号数组 for (t = 0; t <=Position.Length-1; t++) { //图片序号批对上 if (Position[t] != t) { //返回 return false; } } return true; } #endregion }}
以上是程序的主要代码;
主要的代码就这些吧,怎么添加响应函数就不用说了吧,嘿嘿
这是资源的下载地址:
图片拼图游戏- 下载频道 - CSDN.NET
http://download.csdn.net/my/uploads
2 0
- VS,C#--拼图小游戏
- c语言控制台输出制作拼图小游戏
- 拼图小游戏
- 拼图小游戏
- java拼图小游戏
- JS数字拼图小游戏
- JavaScript拼图小游戏
- swift 拼图小游戏
- android 美女拼图小游戏
- iOS之拼图小游戏
- java智力拼图小游戏
- 美女拼图小游戏
- Android—拼图小游戏
- Android移动拼图小游戏
- android-拼图小游戏
- Android 小游戏 :撸啊撸拼图
- java拼图小游戏
- Android-拼图小游戏
- quick 3.3 按钮多次点击出现问题的解决
- zabbix3.0安装
- linux-debug-with log file
- Rust的数据类型和功能函数的返回值
- deepin下bochs的配置
- VS,C#--拼图小游戏
- C语言中的goto
- 当View为GONE状态时获取View的宽高
- 学习知识总结
- 类方法和实例方法的区别
- GLSL学习笔记---之内建变量2
- C 读取HTK生成的MFCC文件
- 手把手带你做一个超炫酷loading成功动画view Android自定义view
- Yii2.0-Widget小部件制作