using UnityEngine; using System.Collections; using UnityEngine.UI; using System; public class MyPingTu : MonoBehaviour { public GameObject end; ItemImg[] itemImg; Sprite[] UIShowImage; int length = 0; int sqrt = 0; void Start() { var RSLoadAllImages = Resources.LoadAll("Texture1"); length = transform.childCount; sqrt = (int)Mathf.Sqrt(length); Debug.Log("sqrt==>" + sqrt); Debug.Log("length==>" + length); //childLength-1——其中某一张为空白,即后下角为空白 UIShowImage = new Sprite[length]; for (int i = 0; i < length; i++) { UIShowImage[i] = (Sprite)RSLoadAllImages[i + 1]; } //初始化图片的id,col,row InitItemImg(length); //打乱图片 Shuffle(UIShowImage); InitShow(); } /// <summary> /// 数组打乱 /// </summary> T[] Shuffle<T>(T[] Array) { for (int i = Array.Length-3; i < Array.Length-1; i++) { T temp = Array[i]; int randomIndex = i+1;//UnityEngine.Random.Range(Array.Length-2, Array.Length-1); Array[i] = Array[randomIndex]; Array[randomIndex] = temp; } /* for (int i = 0; i < Array.Length - 1; i++) { T temp = Array[i]; int randomIndex = UnityEngine.Random.Range(0, Array.Length-1); Array[i] = Array[randomIndex]; Array[randomIndex] = temp; }*/ return Array; } /// <summary> /// 初始化图片id,col,row /// </summary> void InitItemImg(int count) { itemImg = new ItemImg[length]; for (int i = 0; i < count; i++) { itemImg[i] = new ItemImg(); itemImg[i]._id = i; itemImg[i]._col = i / sqrt; itemImg[i]._row = i % sqrt; } } void InitShow(bool isinit=false) { //初始化显示图片 for (int i = 0; i < UIShowImage.Length; ++i) { var t = transform.GetChild(i); t.GetComponent<Image>().sprite = UIShowImage[i]; //指定Sprite itemImg[i]._sprite = t.GetComponent<Image>().sprite; //指定Obj itemImg[i]._Obj = t.gameObject; var item = itemImg[i]; if(!isinit) { itemImg[i]._Obj.GetComponent<Button>().onClick.AddListener(delegate () { this.OnClickEvent(item); }); } } itemImg[length - 1]._Obj.GetComponent<Image>().sprite = null; itemImg[length - 1]._sprite = null; } void OnClickEvent(ItemImg item) { if (canMovie(item)) { var t = NoneImage(); t._sprite = item._sprite; t._Obj.GetComponent<Image>().sprite = item._Obj.GetComponent<Image>().sprite; item._sprite = null; item._Obj.GetComponent<Image>().sprite = null; } if (Success()) { end.SetActive(true); Debug.Log("胜利"); } } /// <summary> /// 判断是否可以移动 /// </summary> bool canMovie(ItemImg item) { if (item._sprite == null) return false; var t = NoneImage(); if ((t._col == item._col - 1 && t._row == item._row) || (t._col == item._col + 1 && t._row == item._row) || (t._col == item._col && t._row == item._row + 1) || (t._col == item._col && t._row == item._row - 1)) { return true; } else { return false; } } /// <summary> /// 获取空白图片 /// </summary> ItemImg NoneImage() { for (int i = 0; i < length; i++) { if (itemImg[i]._sprite == null) { return itemImg[i]; } } return null; } /// <summary> /// 判断胜利 /// </summary> bool Success() { for (int i = 0; i < length - 1; i++) { if (itemImg[i]._Obj.GetComponent<Image>().sprite != null) { if (itemImg[i]._Obj.GetComponent<Image>().sprite.name != "Image_02_" + i.ToString()) return false; } } return true; } private void OnEnable() { } } public class ItemImg { public int _col; public int _row; public int _id; public GameObject _Obj; public Sprite _sprite; }