1.窗口载入时自动生成拼图按钮

  const int N = ;//按钮的行、列数
Button[,] buttons = new Button[N, N];//按钮的数组
int step = ;//记录步数 private void Form3_Load(object sender, EventArgs e)
{
//产生所有按钮
GenerateAllButtons();
} private void button1_Click(object sender, EventArgs e)
{
//打乱顺序
this.button1.Text = "重新开始";
Shuffle();
}
void GenerateAllButtons()
{
int x0 = , y0 = , w = , d = ;
for (int r = ; r < N; r++)
{
for (int c = ; c < N; c++)
{
int num = r * N + c;
Button btn = new Button();
btn.Text = (num + ).ToString();
btn.Top = y0 + r * d;
btn.Left = x0 + c * d;
btn.Width = w;
btn.Height = w;
btn.Visible = true;
btn.Tag = num;
//注册事件
btn.Click += new EventHandler(Btn_Click);
buttons[r, c] = btn; //放到数组中
this.Controls.Add(btn); //加到界面上
}
}
buttons[N - , N - ].Visible = false;//最后一个btn不可见面
} private void Btn_Click(object sender, EventArgs e)
{
step++;
Button btn = sender as Button;//当前选中的按钮
Button blank = FindHiddenButton();//空白的按钮
//判断是否与空白块相邻,如果是,则交换
if (IsNeighbor(btn, blank))
{
Swap(btn, blank);
blank.Focus();
}
//判断是否完成了
if (ResultIsOk())
{
string result = "你真棒!"+"\n一共用了"+step.ToString()+"步";
MessageBox.Show(result);
} }
Button FindHiddenButton()
{
for (int r = ; r < N; r++)
{
for (int c = ; c < N; c++)
{
if (!buttons[r, c].Visible)
{
return buttons[r, c];
}
}
}
return null;
}
bool IsNeighbor(Button btnA, Button btnB)
{
int a = (int)btnA.Tag;//获得按钮记录的值
int b = (int)btnB.Tag;
int r1 = a / N;int c1 = a % N;//得到按钮的行号和列号
int r2 = b / N; int c2 = b % N;
if ((r1 == r2 && (c1 - c2 == || c2 - c1 == ))//左右相邻
|| (c1 == c2 && (r1 - r2 == || r2 - r1 == ))//上下相邻
)
{
return true;
}
return false;
}
//检查是否完成
bool ResultIsOk()
{
for (int r = ; r < N; r++)
for (int c = ; c < N; c++)
{
if (buttons[r, c].Text != (r * N + c + ).ToString())
{
return false;
}
}
return true;
}
//打乱顺序
void Shuffle()
{
//多次随机交换两个按钮
Random rnd = new Random();
for (int i = ; i < ; i++)
{
int a = rnd.Next(N);
int b = rnd.Next(N);
int c = rnd.Next(N);
int d = rnd.Next(N);
Swap(buttons[a, b], buttons[c, d]);
}
}
//交换两个按钮
void Swap(Button btna, Button btnb)
{
string t = btna.Text;
btna.Text = btnb.Text;
btnb.Text = t; bool v = btna.Visible;
btna.Visible = btnb.Visible;
btnb.Visible = v;
}
}

C#WinFrom写的拼图游戏的更多相关文章

  1. JavaScript写一个拼图游戏

    拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)?  因为图片是一整张jpg或 ...

  2. 利用Vue.js实现拼图游戏

    之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...

  3. JavaScript拼图游戏

    今天是2016年最后一天上班了.最近几天都比较休闲,有时间空闲下来写写文档之类的. 2016过得真是快.感觉没做什么就过去了.想到之前想坚持每个月写一写博客都没坚持到.希望2017年可以吧. 无聊之余 ...

  4. SDL制作拼图游戏

    看完教程第三集后,好像自己能用这个来写一个简单的拼图游戏,第一次写出个带界面的游戏,好有成就感. 图片是自己慢慢截左上部分8个脸. #include <stdio.h> #include ...

  5. atitit.html5 拼图游戏的解决之道.

    atitit.html5 拼图游戏的解决之道. 1. 拼图游戏的操作(点击法and 拖动法) 1 1. 支持键盘上.下.左.右键移动: 1 2. 支持点击空白模块中的上下左右箭头移动: 1 3. 支持 ...

  6. Android拼图游戏

    效果如下 游戏的设计 首先我们分析下如何设计这款游戏: 1.我们需要一个容器,可以放这些图片的块块,为了方便,我们准备使用RelativeLayout配合addRule实现 2.每个图片的块块,我们准 ...

  7. Vue.js实现拼图游戏

    Vue.js实现拼图游戏 之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/ ...

  8. 基于unity3d和leap motion的拼图游戏

    近期用unity3d引擎做了一个拼图游戏,会分几次写完,以此作为总结. 本文基本查找了网上能查到的全部资料作为參考.也算是大家节省了时间. 眼下仅仅完毕了拼图部分,leap motion手势控制部分会 ...

  9. 程序设计 之 C#实现《拼图游戏》 (下) 原理篇

    前言:在 http://www.cnblogs.com/labixiaohei/p/6698887.html 程序设计 之 C#实现<拼图游戏>(上),上传了各模块代码,而在本文中将详细剖 ...

随机推荐

  1. Linux 磁盘 分区 挂载点的理解

    在Linux中一切皆文件: 虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口:同时,它也提供了内核中的 ...

  2. select随笔

    粘贴下面代码 select 美化 <!doctype html> <html lang="en"> <head> <meta charse ...

  3. bios-----> grub

    系统有两块硬盘, 第一块安装的win7, 第二块安装ubuntu 默认从sda加载grub 如果在bios页面选择从sdb启动,会找不到grub 进入原来的sda系统,  grub-install / ...

  4. php数组·的方法-数组排序

    /* * * 数组排序函数*/ //asort() 数组元素值升序排序 //arsort() 降序 $arr7=array(1,23,65,34,3,2,3,34,453,54,456,65,5); ...

  5. Google Zxing 生成二维码

    Net Zxing 源码地址 http://zxingnet.codeplex.com/ github 地址 https://github.com/zxing/zxing 新建一个Winform 项目 ...

  6. poi 详细demo

    import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IO ...

  7. 关于TCP 半连接队列和全连接队列

    关于TCP 半连接队列和全连接队列 http://jm.taobao.org/2017/05/25/525-1/ 发表于 2017-05-25   |   作者   蛰剑     |   分类于 网络 ...

  8. git使用笔记-基础篇

    git使用手册:https://git-scm.com/book/zh/v1/ 一.分支 1.查看所有本地分支 git branch 2.查看所有本地分支和远程分支 git branch -a 3.查 ...

  9. [PHP]AES加密----PHP服务端和Android客户端

    本文采取128位AES-CBC模式加密和解密 1.首先对服务端安装mcrypt: sudo apt-get install php5-mcrypt php5-dev sudo php5enmod mc ...

  10. pta5-9 Huffman Codes (30分)

    5-9 Huffman Codes   (30分) In 1953, David A. Huffman published his paper "A Method for the Const ...