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 ...
- 微信小程序_(校园视)开发视频的展示页_下
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
- 微信小程序_(校园视)开发上传视频业务
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
随机推荐
- 利用JS实现一个简单的二级联动菜单
前几天在看js的相关内容,所以就简单写了一个二级联动菜单.分享一下. <!DOCTYPE html> <html lang="en"> <head&g ...
- SpringBoot日记——编码配置篇
插入一个小篇章,有人在编写代码的时候,要么控制台乱码,要么页面乱码等等, 我这里有个配置,可以解决各种乱码问题,直接来看. # ==================== 编码配置 ========== ...
- OD之绕过序列号验证(二)
上次是修改程序的标题,大家应该感觉这只是一个起点而已,接下来我们可以尝试绕过序列号验证,这种技术应用在很多软件中,比如淘宝上要买什么的软件,商家都会发给`你一个用户名和密码,而且还有试用期什么的,这确 ...
- C语言编程—自动生成四则运算升级版
#include<stdio.h> #include<time.h> struct fenshu { int fenzi; int fenmu; }Fenshu[]; int ...
- Photo Cleaner -- proposed by Wei Zhang
Need想必大家都有用手机或相机记录生活的习惯吧!在旅途中,驴友们见到美丽的风景,往往激动地咔嚓一下拍张照记录下来.完事后发现角度不太好,于是又咔嚓一下……不知不觉中一下照了好多,然而真正需要的只是那 ...
- Cooperate with Myself
(一) 第一周的第一批作业们. 且不说一周之内要看完我们的300多页的教材,也不说需要在维基的大批量的文献中海底捞针,单是这个四则运算的生成程序就让我从假期的迷糊状态中幡然觉悟了:哦!惊险刺激的新的 ...
- java实现图像的直方图均衡以及灰度线性变化,灰度拉伸
写了四个方法,分别实现图片的灰度化,直方图均衡,灰度线性变化,灰度拉伸,其中好多地方特别是灰度拉伸这一块觉得自己实现的有问题,请大大们多多指教. import java.awt.Image; impo ...
- 编码用命令行执行的C语言词语统计程序
需求介绍 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c ...
- Mac OS X使用简介
一.OS X 版本以大型猫科动物命名 10.0 猎豹(Cheetah) 10.1 美洲狮(Puma) 10.2 美洲虎(Jaguar) 10.3 黑豹(Panther) 10.4 ...
- 从0到1搭建基于Kafka、Flume和Hive的海量数据分析系统(一)数据收集应用
大数据时代,一大技术特征是对海量数据采集.存储和分析的多组件解决方案.而其中对来自于传感器.APP的SDK和各类互联网应用的原生日志数据的采集存储则是基本中的基本.本系列文章将从0到1,概述一下搭建基 ...