连连看算法 Unity环境[System.Serializable]
public class Point
{int x, y;bool flag;public Point(int _x, int _y){x = _x;y = _y;flag = true;}public int X{get{return x;}}public int Y{get{return y;}}/// <summary>/// 判断这个点可不可以走/// </summary>/// <returns></returns>public bool IsMove(){return flag;}public void SetStatus(bool bol){flag = bol;}public override string ToString(){return string.Format("x: {0},y:{1} flag:{2}", x, y, flag);}
}public class CardSearch
{//0拐角查找/// <summary>/// 单线查找/// </summary>/// <param name="sourceArray">查找的数组</param>/// <param name="startPoint"> 开始点 </param>/// <param name="endPoint"> 结束点 </param>/// <returns></returns>public static bool SingeSearch(Point[,] sourceArray, Point startPoint, Point endPoint){if (startPoint.X != endPoint.X && startPoint.Y != endPoint.Y){return false;}int i;//水平if (startPoint.X != endPoint.X){int min = startPoint.X < endPoint.X ? startPoint.X : endPoint.X;int max = startPoint.X > endPoint.X ? startPoint.X : endPoint.X;for (i = min + 1; i < max; i++){if (!sourceArray[i, startPoint.Y].IsMove()){return false;}}return true;}//竖直if (startPoint.Y != endPoint.Y){//求Y轴的最小值int min = startPoint.Y > endPoint.Y ? endPoint.Y : startPoint.Y;//求Y轴的最大值int max = startPoint.Y < endPoint.Y ? endPoint.Y : startPoint.Y;for (i = min + 1; i < max; i++){if (!sourceArray[startPoint.X, i].IsMove()){return false;}}return true;}return false;}//1拐角查找/// <summary>/// 双线查找/// </summary>/// <param name="sourceArray">查找的数组</param>/// <param name="startPoint"> 开始点 </param>/// <param name="endPoint"> 结束点 </param>/// <returns></returns>public static Point DoubleSearch(Point[,] sourceArray, Point startPoint, Point endPoint){if (startPoint.X == endPoint.X || startPoint.Y == endPoint.Y){return null;}Point pt = sourceArray[startPoint.X, endPoint.Y];//开始点在左面的时候//这个点能走if (pt.IsMove()){//如果开始点能走到拐角点if (SingeSearch(sourceArray, startPoint, pt)){if (SingeSearch(sourceArray, pt, endPoint)){return pt;}}}//测试拐角点二pt = sourceArray[endPoint.X, startPoint.Y];if (pt.IsMove()){//如果开始点能走到拐角点if (SingeSearch(sourceArray, startPoint, pt)){//如果拐角点能走到结束点if (SingeSearch(sourceArray, pt, endPoint)){return pt;}}}return null;}public static List<Point> MulSearch(Point[,] sourceArray, Point startPoint, Point endPoint){if (sourceArray == null || sourceArray.Length == 0){Debug.LogError("原数组为空");return null;}if (startPoint.X == endPoint.X && endPoint.Y == startPoint.Y){//开始点和结束点相同Debug.Log("开始点和结束点相同");return null;}//判断开始点和结束点是否符合越界if (startPoint.X < 0 || startPoint.Y >= sourceArray.Length || endPoint.X < 0 || startPoint.Y >= sourceArray.Length){Debug.Log("数组越界" + sourceArray.GetLength(0) + "    ");return null;}int i;List<Point> path = new List<Point>();path.Add(startPoint);//在结束点的x轴(水平方向)查找一个点 //Y轴相同for (i = 0; i < sourceArray.GetLength(0); i++){//获取到水平方向上的点Point point = sourceArray[i, endPoint.Y];Debug.Log("取到的临时拐角点:" + point);//如果这个点不是结束点if (point.X != endPoint.X){//如果这个点可以走if (point.IsMove()){//然后以这个点为开始点,单线查找 到结束点if (SingeSearch(sourceArray, point, endPoint)){//如果单线查找成功  判断双线查找Point singlePoint = DoubleSearch(sourceArray, startPoint, point);if (singlePoint != null){//如果双线查找成功,查找路径成功 将路径列表返回path.Add(singlePoint);path.Add(point);path.Add(endPoint);return path;}}}}}//判断竖直轴//在结束点的Y轴(竖直方向)查找一个点 //X轴相同for (i = 0; i < sourceArray.GetLength(1); i++){//在竖直方向上取一个点Point point = sourceArray[endPoint.X, i];//如果点不是结束点if (point.Y != endPoint.Y){//如果这个点能走if (point.IsMove()){//如果单线查找成功if (SingeSearch(sourceArray, point, endPoint)){//从开始点查找到这个点 Point singlePoint = DoubleSearch(sourceArray, startPoint, point);//查找成功if (singlePoint != null){path.Add(singlePoint);path.Add(point);path.Add(endPoint);return path;}}}}}return null;}
}

连连看算法 Unity版相关推荐

  1. 连连看连接算法Javascript版

    继连连看连接算法Python版后,我将该算法移植到了Javascript上,为在浏览器版连连看做准备. 功能及使用方法参照另外一篇:连连看连接算法Python版. 值得一提的是由于Javascript ...

  2. 连连看算法js实现解析(降维改进版)--附自制小程序「五十音连连看」助记平假名/片假名

    结果预览: 写小程序的原因 毕业之后(其实也不是), 不知道从什么时候开始, 不想把所有自由的时间用来肝游戏了, 还有总是有一些"不得不闲着"的时间, 于是今年年初就开始计划怎么度 ...

  3. mooc数据结构与算法python版期末考试_数据结构与算法Python版-中国大学mooc-试题题目及答案...

    数据结构与算法Python版-中国大学mooc-试题题目及答案 更多相关问题 婴儿出生一两天后就有笑的反应,这种笑的反应属于(). [判断题]填制原始凭证,汉字大写金额数字一律用正楷或草书书写,汉字大 ...

  4. python数据结构算法 北京大学_北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

  5. 把数字随机分成 php,php随机数 微信随机生成红包金额算法php版

    最近在研究发红包的功能,于是写了个红包的生成算法. 红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以"分为单位,如1元即100)分 ...

  6. access中判断回文的代码_前端也来点算法(TypeScript版) | 2 - 回文数和回文链表

    算法采用 TS 进行编写.  回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.回文链表是链表节点的值和回文数有相同规律的链表. " 回文数 这个数字可以看成是以中心对称分布的 ...

  7. 数据结构与算法 python版 之 递归三定律

    #数据结构与算法 python版 之 谢尔宾斯基三角形 , 树叉 1.为了向阿西莫夫的"机器人三定律"直径,递归算法也总结出"三定律" 1递归算法必须有一个基本 ...

  8. 微信手气红包算法 php,微信随机生成红包金额算法php版

    最近在研究发红包的功能,于是写了个红包的生成算法. 红包生成算法的需求预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以"分为单位,如1元即100)分解 ...

  9. 字符串全排列算法_C#版_剑指OFFER

    字符串全排列算法_C#版_剑指OFFER 题目描述 ​题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组. 例如输入字符串ABC,则输出由字符A, ...

最新文章

  1. 一个冷僻的知识点try直接返回finally里的设置null其实无效
  2. c++封装继承多态实例
  3. 解决Azure DevOps部署到Azure后.NET Core网站无法启动的问题
  4. MATLAB信号处理之信号的积分和微分
  5. java:输出流程printStream
  6. linux配置java环境变量(详细)(转)
  7. 架构师之路(2)---详解面向过程
  8. Python库pygame下载教程
  9. word中公式和文字不在一条水平线上
  10. 电脑重装系统找不到计算机了,戴尔电脑重装系统后找不到硬盘或找不到引导设备怎么办?...
  11. git工具的使用 、gitlab 服务器的搭建、Jenkins服务的搭建
  12. 怎么把视频中的音频提取成mp3?
  13. 内存条上的数字代表的意义
  14. Edgedetect 边沿检测(Verilog)
  15. 什么专业可以免考计算机二级,计算机二级证书可以免考自考哪些科目?
  16. 无线通信模块行业介绍
  17. 如何访问网络上其他计算机,电脑怎么连接别的网络
  18. 西南林业大学:用宜搭打造智慧校园,节省百万费用
  19. 用计算机把不及格筛出,excel怎么筛选任意科目不及格的人
  20. 智能手机双摄像头原理解析:广角+长焦

热门文章

  1. 组态王7.5的移动客户端发布
  2. 有向无环图(DAG)拓扑排序的两种方法
  3. 如何优化API工作流程
  4. 你的城市撒币了吗?Python分析各城市消费券发放数据
  5. JAVA环境与相关软件的下载与配置
  6. mysql数据库主从模式配置
  7. SQL SERVER 2008 R2 下载地址
  8. 享受中文输入,快乐信息分享 --拼音输入法所谓的经验谈
  9. matlab实验7绘图操作绘制三维曲线,matlab上机习题6 MATLAB7.0三维绘图
  10. java常用类:1。包装类(以Integer类为例)2.String类 3.StringBuffer