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. redis 多实例配置

    (redis的安装, 配置, 登陆等基础不再多说, 网上很多资料的, 这里只说个人对redis多实例的理解与配置) 我自己使用的redis版本是 2.8.13, 环境是 ubuntu 个人对多实例的理 ...

  2. EventBus 事件总线 原理

    原理 一句话描述:register会把当前类中匹配的方法,存入一个map,而post会根据实参去map查找进行反射调用 撇开专业术语,其实EventBus就是在内部[存储]了一堆onEvent开头的方 ...

  3. DedeCms autoindex和itemindex使用介绍

    autoindex/itemindex 可以使用 @me+1;实现由指定数字开始,下面为大家详细介绍下具体的两者具体的用法,感兴趣的朋友可以参考下 代码如下: <span style=" ...

  4. CentOS6.6x86_64 部署 Nginx1.62+MySQL5.6.20+PHP5.6.4

    准备工作 切换到管理员身份 su - 安装编译扩展 yum install -y gcc-c++ 创建数据库目录.代码目录 mkdir /mnt/data /mnt/www 安装Nginx 1.6.2 ...

  5. Spring配置静态目录

    mvc-dispatcher-servlet.xml文件 <beans xmlns="http://www.springframework.org/schema/beans" ...

  6. When Colon Scripting is comming

    当冒号脚本来临-- 前一篇<JSON带来编程界怎样的描述>,已经展开了一种脚本设计概念,以此诞生的脚本语言待定义的语法不多.但总归需要经历各种语言描述能力对比来归纳最终友好特性的. 冒号已 ...

  7. 自己写的一个banner动画

    html <div class="nav" > <div class="nav_son" id="nav"> < ...

  8. 面向对象设计模式之TemplateMethod模板方法(行为型)

    动机:在软件构建过程中,对于某一项任务,他常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现:如何在确定稳定操作结构 ...

  9. Ajax.BeginForm 防止跳转到新页面

    @using (Ajax.BeginForm("ChangeCompanyId", "navigation", new { area = "confi ...

  10. 让织梦CMS的后台编辑器支持优酷视频

    最近做了一些视频教程传到优酷网站上,但我想引入这些视频教程到我的网站,在发表时我发现织梦CMS自带的编辑器又不直接支持优酷等视频网站的引用.所以为了方便教程的发布,特意在网站搜索到本篇教程,详细讲解如 ...