OneImage.cs

public class OneImage : MonoBehaviour
{
public int row, col;
public Rect rect;
public Texture texture;
public bool walkable = true;
public bool isinit = false;
public bool selected = false; public OneImage()
{ } public OneImage(Rect rect,int row,int col)
{
this.row = row;
this.col = col;
this.rect = rect;
this.walkable = true;
}
}
LinkLinkSee.cs

public class LinkLinkSee : MonoBehaviour
{
public int rows, cols;
public Texture black, wayTexture;
public Texture[] textures;
private OneImage[][] images; bool game = true;
int upStep = ; void Start()
{
StartCoroutine("GameInit");
} IEnumerator GameInit()
{
game = false;
rows += upStep;
cols += upStep; int realRows = rows + ;
int realCols = cols + ; float w = Screen.height / realRows;
float x = Screen.width / - ((w * realCols + realCols) / );
float y = Screen.height / - (w * realRows / ); images = new OneImage[realRows][];
for (int row = ; row < realRows; row++)
{
images[row] = new OneImage[realCols];
for (int col = ; col < realCols; col++)
{
images[row][col] = new OneImage(new Rect(x, y, w, w), row, col);
images[row][col].texture = black;
x += w + ;
}
x = Screen.width / - ((w * realCols + realCols) / );
y += w + ;
} for (int row = ; row < realRows - ; row++)
{
for (int col = ; col < realCols - ; col++)
{
if (images[row][col].isinit)
{
continue;
}
else
{
int textureIndex = Random.Range(, textures.Length);
images[row][col].texture = textures[textureIndex];
images[row][col].isinit = true;
images[row][col].walkable = false; int newRow = , newCol = ;
int max = rows * cols;
while (images[newRow][newCol].isinit)
{
newRow = Random.Range(row, realRows - );
newCol = Random.Range(, realCols - );
max--;
if (max <= )
break;
}
images[newRow][newCol].texture = textures[textureIndex];
images[newRow][newCol].isinit = true;
images[newRow][newCol].walkable = false;
yield return null;
}
}
}
game = true;
} void OnGUI()
{
if (game)
{
bool isOver = true;
for (int row = ; row < rows + ; row++)
{
for (int col = ; col < cols + ; col++)
{
OneImage img = images[row][col]; if (!img.walkable)
{
isOver = false;
} GUI.DrawTexture(img.rect, img.texture);
//GUI.Label(img.rect, img.walkable.ToString());
}
}
if (isOver)
{
game = false;
upStep++;
StartCoroutine("GameInit");
}
}
else
{
for (int row = ; row < rows + ; row++)
{
for (int col = ; col < cols + ; col++)
{
OneImage img = images[row][col];
GUI.DrawTexture(img.rect, img.texture);
}
}
}
} private OneImage ChoseFirst = new OneImage(), ChoseSecond = new OneImage();
List<OneImage> FWay;
List<OneImage> SWay; void Update()
{
if (Input.GetMouseButtonDown()&&game)
{
try
{
if (!ChoseFirst.selected)
{
ChoseFirst = GetChose(Input.mousePosition);
ChoseFirst.selected = true;
}
else
{
ChoseSecond = GetChose(Input.mousePosition);
if (CompareImg(ChoseFirst, ChoseSecond))
{
ChoseFirst.selected = false;
}
else
{
if (ChoseSecond.texture == ChoseFirst.texture)
{
FindWay(ChoseFirst, ChoseSecond);
ChoseFirst.selected = false;
}
else
{
ChoseFirst = ChoseSecond;
ChoseFirst.selected = true;
}
}
}
}
catch
{
ChoseFirst = new OneImage();
ChoseSecond = new OneImage();
}
}
} private OneImage GetChose(Vector2 mousePos)
{
mousePos.y = Screen.height - mousePos.y;
for (int i = ; i < rows + ; i++)
{
for (int j = ; j < cols + ; j++)
{
if (images[i][j].rect.Contains(mousePos))
{
return images[i][j];
}
}
}
return null;
} private void FindWay(OneImage F, OneImage S)
{
if (F.row == S.row && Mathf.Abs(F.col - S.col) == || F.col == S.col && Mathf.Abs(F.row - S.row) == )
{
F.texture = wayTexture;
F.walkable = true;
S.texture = wayTexture;
S.walkable = true;
}
else
{
FWay = GetSingleWay(F);
SWay = GetSingleWay(S); List<List<OneImage>> WayWay = new List<List<OneImage>>();
foreach (OneImage img in FWay)
{
List<OneImage> way = GetSingleWay(img);
foreach (OneImage one in way)
{
foreach (OneImage sone in SWay)
{
if (CompareImg(sone, one))
{
WayWay.Add(way);
break;
}
}
}
} if (WayWay.Count > )//找到的路线数量>0
{
F.texture = S.texture = this.wayTexture;
F.walkable = S.walkable = true;
}
}
} private List<OneImage> GetSingleWay(OneImage img)
{
List<OneImage> singleWay = new List<OneImage>();
for (int i = img.row; i >= ; i--)
{
if (CompareImg(images[i][img.col], img) || images[i][img.col].walkable)
{
singleWay.Add(images[i][img.col]);
}
else
break;
} for (int i = img.row; i < rows + ; i++)
{
if (CompareImg(images[i][img.col], img) || images[i][img.col].walkable)
{
singleWay.Add(images[i][img.col]);
}
else
break;
} for (int i = img.col; i >= ; i--)
{
if (CompareImg(images[img.row][i], img) || images[img.row][i].walkable)
{
singleWay.Add(images[img.row][i]);
}
else
break;
} for (int i = img.col; i < cols + ; i++)
{
if (CompareImg(images[img.row][i], img) || images[img.row][i].walkable)
{
singleWay.Add(images[img.row][i]);
}
else
break;
} return singleWay;
} private bool CompareImg(OneImage F, OneImage S)
{
if (F.row == S.row && F.col == S.col)
return true;
else
return false;
}
}

Unity绘制GUI连连看(尚未完善效果和重置)的更多相关文章

  1. 使用Unity创造动态的2D水体效果

    者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染器,触发器以及粒子的混合体来创造这一水体效果,最终得到可运用于你下款游戏的水纹和 ...

  2. Unity的NGUI插件篇——入场效果

    Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自  大学霸 <NGU ...

  3. Unity用GUI绘制Debug/print窗口/控制台-打包后测试

    Unity游戏视窗控制台输出 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  4. 【转】如何使用Unity创造动态的2D水体效果

    原文:http://gamerboom.com/archives/83080 作者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染 ...

  5. 【原】使用Tkinter绘制GUI并结合Matplotlib实现交互式绘图

    在数据分析的过程中,往往需要对所建立的模型进行可视化,并调整其中的某些参数. 通常情况下,在Python中可以通过Matplotlib来进行绘制图像.然而该绘制过程是静态的,也就是每次调整完参数需要重 ...

  6. unity 绘制三角形

    哎 该学的还是要学 参考:http://www.narkii.com/club/thread-369573-1.html unity 顶点绘制三角形 脚本绘制; 其实filter和render就是进行 ...

  7. Unity 绘制多边形

    最近工程需要用到一个多边形用来查看角色属性,于是就研究了下Mesh用网格做了一个.遗憾的的 UGUI 渲染不了 3D 物体,然后又用了一段时间研究了下UGUI的网格绘制. 不过终于还是完成了,虽然有些 ...

  8. Unity shader学习之屏幕后期处理效果之高斯模糊

    高斯模糊,见 百度百科. 也使用卷积来实现,每个卷积元素的公式为: 其中б是标准方差,一般取值为1. x和y分别对应当前位置到卷积中心的整数距离. 由于需要对高斯核中的权重进行归一化,即使所有权重相加 ...

  9. Unity shader学习之屏幕后期效果之调整屏幕亮度,饱和度,对比度

    Unity的屏幕后期处理效果,使用MonoBehaviour.OnRenderImage来实现. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7228063 ...

随机推荐

  1. qq第3方登录的JS实现方式记录

    首先申请qq第3方登录接入的appkey和appid,具体方式http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth ...

  2. Mysql 中is null 和 =null 的区别

    在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如 果去运行一下试试的话差别会很大! 为什么会出现这种情况呢? null 表示 ...

  3. HTML5中的二进制大对象Blob(转)

    HTML5中的Blob对象和MYSQL中的BLOB类型在概念上是有点区别的.MYSQL中的BLOB类型就只是个二进制数据容器.而HTML5中的Blob对象除了存放二进制数据外还可以设置这个数据的MIN ...

  4. webconfig的设置节点几个说明

    有助于深入理解webconfig <?xml version="1.0" encoding="utf-8" ?> <configuration ...

  5. Ext4.1 Grid 分页查询

    转载:http://blog.csdn.net/zyujie/article/details/16362747 最近用Ext4.1自己做了做项目的练习:把一些知识点,在这里记录下来了! 上面一个for ...

  6. Android打开系统的Document文档图片选择

    打开Document UI 过滤图片 private void startAcitivty() { Intent intent = new Intent(); intent.setAction(&qu ...

  7. JavaScript中instanceof与typeof运算符的用法及区别详细解析

    JavaScript中的instanceof和typeof常被用来判断一个变量是什么类型的(实例),但它们的使用还是有区别的: typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typ ...

  8. Spring MVC PageNotFound.noHandlerFound No mapping found for HTTP request with URI

    首先骂人,干他娘的,弄了两个小时原来的包倒错了!!唉TMD. 注意用IDEA倒包的时候一定要注意ModelAndView是 原因是import出错了!!应该是import org.springfram ...

  9. Python自动化运维之15、网络编程之socket、socketserver、select、twisted

    一.TCP/IP相关知识 TCP/UDP提供进程地址,两个协议互不干扰的独自的协议       TCP :Transmission Control Protocol 传输控制协议,面向连接的协议,通信 ...

  10. 在sublimetext上打造一个兼容virtualenv的web&python开发环境

    利用Sublimetext3&virtualenv 打造一个Web&Python IDE 注: 环境:window|python3;以下使用的sublimetext插件均用packag ...