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 ...
- 微信小程序_(校园视)开发视频的展示页_下
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
- 微信小程序_(校园视)开发上传视频业务
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
随机推荐
- 【转载】SSD断电保护原理
异常掉电的隐患 若没有合理的掉电保护机制,而异常掉电的发生又不可避免,当发生异常掉电,会引发很多问题. (1)丢盘 异常掉电,会使得映射表来不及保存,丢失逻辑地址到物理地址的映射,待重新上电后,SSD ...
- docker之搭建私有仓库
一.私有仓库 1.防止网络原因:下载慢,访问不到的情况,需要在内网搭建一个私有仓库. 二.仓库镜像下载 [root@node03 ~]# docker pull registry 三.创建私有仓库容器 ...
- Linux/Mac 挂载远程服务器目录到本地
1. 安装 sudo apt-get installsshfs 2. 创建SSHFS 挂载目录 sudo mkdir/mnt/siyuan 3.使用SSHFS 挂载远程的文件系统 sudo sshfs ...
- TKmath Package gp数据类型
点,向量,方向 二维:gp_Pnt2d, gp_Vec2d, gp_Dir2d:它们的内部都存储 gp_XY 三维:gp_Pnt, gp_Vec, gp_Dir:它们的内部都存储 gp_XYZ 轴向与 ...
- 212. Space Replacement【LintCode by java】
Description Write a method to replace all spaces in a string with %20. The string is given in a char ...
- net面试宝典
ASP.NET常见面试题及答案 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. ...
- 红黑树插入与删除完整代码(dart语言实现)
之前分析了红黑树的删除,这里附上红黑树的完整版代码,包括查找.插入.删除等.删除后修复实现了两种算法,均比之前的更为简洁.一种是我自己的实现,代码非常简洁,行数更少:一种是Linux.Java等源码版 ...
- [T-ARA][Ma boo]
歌词来源:http://music.163.com/#/song?id=22704447 作曲 : 金道勋/Rhymer [作曲 : 金道勋/Rhymer] 作词 : 金道勋 [作词 : 金道勋] 사 ...
- Daily Scrum NO.7
工作概况 今日由于时间比较充裕,没有编译作业的干扰,团员们的进度喜人.线程池.动态爬取.异常清理这三个主要开发工作已经步入尾声.其中线程池开发工作的代码已经签入,现主要在测试和优化.动态爬取今日也签入 ...
- 20135337朱荟潼 Linux第三周学习总结 ——Linux内核源代码简介
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识笔记 1.ar ...