Unity绘制GUI连连看(尚未完善效果和重置)
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连连看(尚未完善效果和重置)的更多相关文章
- 使用Unity创造动态的2D水体效果
者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染器,触发器以及粒子的混合体来创造这一水体效果,最终得到可运用于你下款游戏的水纹和 ...
- Unity的NGUI插件篇——入场效果
Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自 大学霸 <NGU ...
- Unity用GUI绘制Debug/print窗口/控制台-打包后测试
Unity游戏视窗控制台输出 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- 【转】如何使用Unity创造动态的2D水体效果
原文:http://gamerboom.com/archives/83080 作者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染 ...
- 【原】使用Tkinter绘制GUI并结合Matplotlib实现交互式绘图
在数据分析的过程中,往往需要对所建立的模型进行可视化,并调整其中的某些参数. 通常情况下,在Python中可以通过Matplotlib来进行绘制图像.然而该绘制过程是静态的,也就是每次调整完参数需要重 ...
- unity 绘制三角形
哎 该学的还是要学 参考:http://www.narkii.com/club/thread-369573-1.html unity 顶点绘制三角形 脚本绘制; 其实filter和render就是进行 ...
- Unity 绘制多边形
最近工程需要用到一个多边形用来查看角色属性,于是就研究了下Mesh用网格做了一个.遗憾的的 UGUI 渲染不了 3D 物体,然后又用了一段时间研究了下UGUI的网格绘制. 不过终于还是完成了,虽然有些 ...
- Unity shader学习之屏幕后期处理效果之高斯模糊
高斯模糊,见 百度百科. 也使用卷积来实现,每个卷积元素的公式为: 其中б是标准方差,一般取值为1. x和y分别对应当前位置到卷积中心的整数距离. 由于需要对高斯核中的权重进行归一化,即使所有权重相加 ...
- Unity shader学习之屏幕后期效果之调整屏幕亮度,饱和度,对比度
Unity的屏幕后期处理效果,使用MonoBehaviour.OnRenderImage来实现. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7228063 ...
随机推荐
- Android ActionBar(转)
本文内容 关于 ActionBar 必要条件 项目结构 环境 演示一:Action Bar 显示隐藏 演示二:Action Item 显示菜单选项 演示三:Action Home 启用“返回/向上”程 ...
- NSPredicate查询日期的问题
查询日期的时候日期可以根据参数传进去,但不能在字符串中传参后在作为查询条件 简单比较以下两段代码 NSDate* date1=[NSDate date]; NSDate* date2=date1; r ...
- PHPMailer中文说明
PHPMailer中文说明 A开头: $AltBody --属性出自:PHPMailer ::$AltBody文件:class.phpmailer .php说明:该属性的设置是在邮件正文不支持HTML ...
- java.util.concurrent.atomic 类包详解
java.util.concurrent包分成了三个部分,分别是java.util.concurrent.java.util.concurrent.atomic和java.util.concurren ...
- JSON和JSONP区别
JSON(JavaScript Object Notation)和JSONP(JSON with Padding) JSON是一种数据交换格式,JSONP是一种跨域数据交互协议 JSONP利用scri ...
- Ext4.1 Grid 分页查询
转载:http://blog.csdn.net/zyujie/article/details/16362747 最近用Ext4.1自己做了做项目的练习:把一些知识点,在这里记录下来了! 上面一个for ...
- android中百度地图定位的实现方法(仅适用于真机+WIFI联网环境)
注意:此代码的环境是:真机(系统版本为Android4.2.2)+WIFI联网(才能实现最后的运行结果):使用虚拟机调试会出现各种问题. 第一步:下载SDK和申请Key 到百度的网站http://de ...
- 启动php-fpm报错:please specify user and group other than root
安装好PHP之后启动报错: 启动php-fpm报错:please specify user and group other than root, pool 'default 修改 php-fpm.co ...
- 判断iPhone和iPad 判断设备版本
//判断iPhone和iPad #define IS_IPHONE (!IS_IPAD) #define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInt ...
- (转载)小课堂UI-有关配色的一个小技巧