C#_界面程序_数码游戏
using System;
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 数码游戏
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} const int N = ; //按钮的行,列数
Button[,] buttons = new Button[N, N]; //按钮的数组 /*
* 产生按钮
*/
private void Form1_Load(object sender, EventArgs e)
{
//产生所有按钮
GenerateAllButtons();
}
private void btnStart_Click(object sender, EventArgs e)
{
//MessageBox.Show("Hello");
//打乱顺序
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;
//记录在tag上,这里记录行列
btn.Tag = r * N + c; //注册事件--给btnStart_Click这个按钮注册事件
btn.Click += btn_Click; buttons[r, c] = btn; //放在数组中
this.Controls.Add(btn); //加到界面上
} }
//最后一个不显示
buttons[N - , N - ].Visible = false;
} //点击按钮事件
void btn_Click(object sender, EventArgs e)
{
//当前点中的按钮, 事件源
Button btn = sender as Button;
Button blank = FindHiddenButton(); //空白按钮 //判断是否与空白块相邻,如果是,则交换
if (IsNeighbor(btn, blank))
{
Swap(btn, blank);
blank.Focus();
} //判断是否完成了
if (ResultIsOk())
{
MessageBox.Show("YOU WIN !");
}
} //打乱顺序
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;
} //查找要隐藏的按钮
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; //Tag中记录是行列位置
int b = (int) btnB.Tag;
int r1 = a / N, c1 = a % N; //得到行,列
int r2 = b / N, c2 = b % N; if (r1 == r2 && (c1 == c2 - || c1 == c2 + )
|| c1 == c2 && (r1 == r2 - || r1 == r2 + ) )
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;
} /*
* 下面实现自动寻路算法
*/
private void btnSolve_Click(object sender, EventArgs e)
{ } }
}

C#_界面程序_数码游戏的更多相关文章
- C#_串口程序_二次打包_事件响应
using System;using System.IO.Ports;using System.Windows.Forms; namespace Dll_Serial_Comm{ public ...
- 微信小程序_(校园视)开发用户注册登陆
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
- java画图程序_图片用字母画出来_源码发布_版本二
在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...
- java画图程序_图片用字母画出来_源码发布
在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构 ...
- java画图程序_图片用字母画出来
最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...
- MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载
MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载 武侠类手机文字游戏,经典再现高度自由玩法宠物 自制装备 师徒自立门派 自造武功欢迎来玩 Q群 1 ...
- CentOS7中_带sqlite3_CGO的golang程序_交叉编译到arm中
CentOS7中_带sqlite3_CGO的golang程序_交叉编译到arm中 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-10-28. 编写了个golang程序,用到了这个C ...
- 微信小程序_(校园视)开发视频的展示页_下
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
- 微信小程序_(校园视)开发上传视频业务
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
随机推荐
- PS官方正式中文版(搬砖分享)
https://pan.baidu.com/s/1c3IdQq0 PS官方正式中文版(搬砖分享) 注意事项: 1.安装开始前请先断网,在成功破解激活前请全程断网: 2.安装完成后先试运行软件一次,然后 ...
- Backbone.js源码浅介
终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Bac ...
- Scrum Meeting NO.3
Scrum Meeting No.2 1.会议内容 之前的两天无法登录TFS服务器来生成燃尽图,再加上这种方式只能生成当日的燃尽图,我们决定改用excel生成燃尽图.(作为一个渣渣pm,我用了一下午才 ...
- 第二阶段冲刺——four
个人任务: 季方:实现团队博客作业查询. 王金萱:优化统计团队博客结果界面的显示. 马佳慧:选择功能界面的背景设计. 司宇航:用servlet完成名单打印功能. 站立会议: 任务看板和燃尽图:
- 软工团队(hello world)组员介绍
姜中希:喜欢编程,善于交际. 周盼超:喜欢编程. 王昭博:思路比较清晰,可以明确开发步骤. 刘洪阳:思想笔记广泛,可以把很多有关联的东西结合起来. 刘双勃:喜欢编程,踏实,比较容易坚持.
- Hadoop 5 Hbase 遇到的问题
hbase伪分布式配置完成后: 在bin/hbase shell 进行create操作时出现:Can't get master address from ZooKeeper; znode data = ...
- Visual Studio2013安装过程
Visual Studio是微软开发的一套基于组件的软件开发工具,我选择安装的是Visual Studio2013版本.首先, 第一步是要找到一个安装包: 我们可以直接百度MSDN,显示的第一条就是官 ...
- Activiti源码学习:ExecutionListener与TaskListener的区别
/** Callback interface to be notified of execution events like starting a process instance, * ending ...
- 如何判断可见字符 Unicode
一个Unicode字符串,如何判断其中都是可见字符? //根据国标 GB2312 的中文汉字及符号 区位码的范围判断 Function CheckIsGB2312(Char : WideChar) : ...
- Jquery ajax 完整实例子1
$ajax请求--------------------------------- var $personWifePs=$("#wife-money tbody tr"); var ...