|
@@ -0,0 +1,314 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using ET;
|
|
|
+using FairyGUI;
|
|
|
+using UI.MiniGame;
|
|
|
+using UnityEngine;
|
|
|
+
|
|
|
+namespace GFGGame
|
|
|
+{
|
|
|
+ public class FlipGameView : BaseView
|
|
|
+ {
|
|
|
+ private UI_FlipGameUI _ui;
|
|
|
+ //卡牌数量(配置)
|
|
|
+ private int cardNum = 16;
|
|
|
+ //当前卡牌数量
|
|
|
+ private int currentCardNum = 16;
|
|
|
+ //当前翻开卡牌
|
|
|
+ //"state" 0:未翻开,1:已翻开,2:已消除
|
|
|
+ private List<Dictionary<string, int>> cardList = new List<Dictionary<string, int>>();
|
|
|
+ //消除所需数量(配置)
|
|
|
+ private int needNum = 2;
|
|
|
+ //游戏结束时长(配置)
|
|
|
+ private int gameTime = 120;
|
|
|
+ //游戏当前时长
|
|
|
+ private int currentGameTime = 120;
|
|
|
+ //行数
|
|
|
+ private int rows = 0;
|
|
|
+ //列数
|
|
|
+ private int columns = 4;
|
|
|
+ System.Random rand;
|
|
|
+ //通关评价
|
|
|
+ private List<int> CustemsNum = new List<int>()
|
|
|
+ {
|
|
|
+ 10,
|
|
|
+ 30,
|
|
|
+ 60,
|
|
|
+ };
|
|
|
+ private List<string> CustemsName = new List<string>()
|
|
|
+ {
|
|
|
+ "良好",
|
|
|
+ "优秀",
|
|
|
+ "卓越"
|
|
|
+ };
|
|
|
+
|
|
|
+ //假数据
|
|
|
+ private int[] cardArray = new int[] { 1,1, 2,2, 3, 3 , 4, 4 , 5, 5 , 6, 6 , 7, 7 , 8, 8 };
|
|
|
+
|
|
|
+ Card _c1 = new Card();
|
|
|
+ private float waitTime = 0.6f;
|
|
|
+
|
|
|
+ public override void Dispose()
|
|
|
+ {
|
|
|
+ if (_ui != null)
|
|
|
+ {
|
|
|
+ _ui.Dispose();
|
|
|
+ _ui = null;
|
|
|
+ }
|
|
|
+ base.Dispose();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void OnInit()
|
|
|
+ {
|
|
|
+ base.OnInit();
|
|
|
+ packageName = UI_FlipGameUI.PACKAGE_NAME;
|
|
|
+ _ui = UI_FlipGameUI.Create();
|
|
|
+ this.viewCom = _ui.target;
|
|
|
+ isfullScreen = true;
|
|
|
+ _ui.m_cardList.itemRenderer = ListCardItem;
|
|
|
+ _ui.m_back.onClick.Add(OnClickBtnBack);
|
|
|
+
|
|
|
+ UIObjectFactory.SetPackageItemExtension("ui://MiniGame/CardComponent", typeof(Card));
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void OnShown()
|
|
|
+ {
|
|
|
+ base.OnShown();
|
|
|
+ UpdateView();
|
|
|
+ UpdateList();
|
|
|
+ }
|
|
|
+ protected override void OnHide()
|
|
|
+ {
|
|
|
+ _ui.m_cardList.RemoveChildrenToPool();
|
|
|
+ base.OnHide();
|
|
|
+ cardList.Clear();
|
|
|
+ Timers.inst.Remove(UpdateTime);
|
|
|
+ Timers.inst.Remove(canTouch);
|
|
|
+ Timers.inst.Remove(UpdateCard);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OnClickBtnBack()
|
|
|
+ {
|
|
|
+ Timers.inst.Remove(UpdateTime);
|
|
|
+ AlertUI.Show("是否退出游戏")
|
|
|
+ .SetLeftButton(true, "取消", (object data) =>
|
|
|
+ {
|
|
|
+ Timers.inst.Add(1.0f, 0, UpdateTime);
|
|
|
+ })
|
|
|
+ .SetRightButton(true, "确定", (object data) =>
|
|
|
+ {
|
|
|
+ this.Hide();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ListCardItem(int index, GObject item)
|
|
|
+ {
|
|
|
+ UI_cardItem cardItem = UI_cardItem.Proxy(item);
|
|
|
+ Dictionary<string, int> itemInfo = new Dictionary<string, int>();
|
|
|
+
|
|
|
+ //备注的后续都读表
|
|
|
+ //cardItem.m_icon.url = "";
|
|
|
+ if (cardItem.target.data == null)
|
|
|
+ {
|
|
|
+ cardItem.target.onClick.Add(OnClickCardItem);
|
|
|
+ }
|
|
|
+ _c1 = (Card)cardItem.m_card;
|
|
|
+ _c1.opened = false;
|
|
|
+ _c1.SetPerspective();
|
|
|
+
|
|
|
+ itemInfo.Add("index", index);
|
|
|
+ itemInfo.Add("id", cardArray[index]);
|
|
|
+ itemInfo.Add("state", 0);
|
|
|
+ cardItem.m_id.text = itemInfo["id"].ToString();
|
|
|
+ cardItem.target.data = itemInfo;
|
|
|
+ UI_cardItem.ProxyEnd();
|
|
|
+ }
|
|
|
+ private void UpdateView()
|
|
|
+ {
|
|
|
+ currentGameTime = gameTime;
|
|
|
+ currentCardNum = cardNum;
|
|
|
+ needNum = 2;
|
|
|
+ rand = new System.Random();
|
|
|
+ //洗牌
|
|
|
+ RandomCardList(cardArray, cardArray.Length);
|
|
|
+ //
|
|
|
+ _ui.m_timeText.text = string.Format("倒计时:{0}", currentGameTime);
|
|
|
+ _ui.m_ScareBar.max = gameTime;
|
|
|
+ _ui.m_ScareBar.min = 0;
|
|
|
+ _ui.m_ScareBar.value = gameTime;
|
|
|
+ _ui.m_star1.SetPosition(((float)CustemsNum[0]/(float)gameTime)*_ui.m_ScareBar.width,_ui.m_star1.position.y, _ui.m_star1.position.z);
|
|
|
+ _ui.m_star2.SetPosition(((float)CustemsNum[1] / (float)gameTime) * _ui.m_ScareBar.width, _ui.m_star1.position.y, _ui.m_star1.position.z);
|
|
|
+ _ui.m_star3.SetPosition(((float)CustemsNum[2] / (float)gameTime) * _ui.m_ScareBar.width, _ui.m_star1.position.y, _ui.m_star1.position.z);
|
|
|
+ //CustemsNum = ;
|
|
|
+ //计时器
|
|
|
+ Timers.inst.Add(1.0f, 0, UpdateTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void UpdateList()
|
|
|
+ {
|
|
|
+ _ui.m_cardList.columnCount = columns;
|
|
|
+ _ui.m_cardList.numItems = cardNum;
|
|
|
+ }
|
|
|
+ private void OnClickCardItem(EventContext context)
|
|
|
+ {
|
|
|
+ GObject cardItem = context.sender as GObject;
|
|
|
+ Dictionary<string, int> cardInfo = (Dictionary<string, int>)cardItem.data;
|
|
|
+ UI_cardItem item = UI_cardItem.Proxy(_ui.m_cardList.GetChildAt(cardInfo["index"]));
|
|
|
+ Card card = (Card)item.m_card;
|
|
|
+ if (cardList.Count == 0)
|
|
|
+ {
|
|
|
+ //当前翻开列表为空,直接处理翻开,添加
|
|
|
+ cardInfo["state"] = 1;
|
|
|
+ //翻牌
|
|
|
+ card.Turn();
|
|
|
+ _ui.m_cardList.touchable = false;
|
|
|
+ Timers.inst.Add(waitTime, 1, canTouch);
|
|
|
+ //
|
|
|
+ cardList.Add(cardInfo);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ bool isLast = false;
|
|
|
+ for (int i = 0; i < cardList.Count; i++)
|
|
|
+ {
|
|
|
+ //点击到已翻开的就翻回去,
|
|
|
+ if (cardInfo["index"] == cardList[i]["index"])
|
|
|
+ {
|
|
|
+ //翻牌
|
|
|
+ card.Turn();
|
|
|
+ _ui.m_cardList.touchable = false;
|
|
|
+ Timers.inst.Add(waitTime, 1, canTouch);
|
|
|
+ //
|
|
|
+ cardList.RemoveAt(i);
|
|
|
+ isLast = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!isLast)
|
|
|
+ {
|
|
|
+ //翻牌
|
|
|
+ card.Turn();
|
|
|
+ _ui.m_cardList.touchable = false;
|
|
|
+ cardInfo["state"] = 1;
|
|
|
+ cardList.Add(cardInfo);
|
|
|
+ Timers.inst.Add(waitTime, 1, UpdateCard);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ UI_cardItem.ProxyEnd();
|
|
|
+ }
|
|
|
+
|
|
|
+ //这里是处理已翻开的数量
|
|
|
+ private void UpdateCard(object param = null)
|
|
|
+ {
|
|
|
+ bool isClear = true;
|
|
|
+ for (int i = 1; i < cardList.Count; i++)
|
|
|
+ {
|
|
|
+ if(cardList[0]["id"] != cardList[i]["id"])
|
|
|
+ {
|
|
|
+ isClear = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ isClear = true;
|
|
|
+ }
|
|
|
+ if(isClear)
|
|
|
+ {
|
|
|
+ if (cardList.Count == needNum)
|
|
|
+ {
|
|
|
+ for (int i = 0; i < cardList.Count; i++)
|
|
|
+ {
|
|
|
+ cardList[i]["state"] = 2;
|
|
|
+ //消除
|
|
|
+ _ui.m_cardList.GetChildAt(cardList[i]["index"]).visible = false;
|
|
|
+ }
|
|
|
+ currentCardNum -= cardList.Count;
|
|
|
+ cardList.Clear();
|
|
|
+ _ui.m_cardList.touchable = true;
|
|
|
+ if(currentCardNum <= 0)
|
|
|
+ {
|
|
|
+ Gameover(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _ui.m_cardList.touchable = false;
|
|
|
+ //= UI_cardItem.Proxy(_ui.m_cardList.GetChildAt(cardList[0]["index"]));
|
|
|
+ for (int i = 0; i < cardList.Count; i++)
|
|
|
+ {
|
|
|
+ UI_cardItem item = UI_cardItem.Proxy(_ui.m_cardList.GetChildAt(cardList[i]["index"]));
|
|
|
+ //翻回去
|
|
|
+ Card card = (Card)item.m_card;
|
|
|
+ card.Turn();
|
|
|
+ //card = null;
|
|
|
+ UI_cardItem.ProxyEnd();
|
|
|
+ }
|
|
|
+ Timers.inst.Add(waitTime, 1, canTouch);
|
|
|
+ cardList.Clear();
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void UpdateTime(object param = null)
|
|
|
+ {
|
|
|
+ currentGameTime--;
|
|
|
+ _ui.m_ScareBar.value = currentGameTime;
|
|
|
+ _ui.m_timeText.text = string.Format ("倒计时:{0}", currentGameTime);
|
|
|
+ if(currentGameTime <= 0)
|
|
|
+ {
|
|
|
+ Timers.inst.Remove(UpdateTime);
|
|
|
+ Gameover(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void canTouch(object param = null)
|
|
|
+ {
|
|
|
+ _ui.m_cardList.touchable = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Gameover(bool isPass = false)
|
|
|
+ {
|
|
|
+ Timers.inst.Remove(UpdateTime);
|
|
|
+ if (!isPass)
|
|
|
+ {
|
|
|
+ AlertUI.Show("游戏时间到")
|
|
|
+ .SetLeftButton(false)
|
|
|
+ .SetRightButton(true, "确定", (object data) =>
|
|
|
+ {
|
|
|
+ this.Hide();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ string custemsName = "";
|
|
|
+ for(int i = CustemsNum.Count - 1; i>=0; i--)
|
|
|
+ {
|
|
|
+ if(currentGameTime >= CustemsNum[i])
|
|
|
+ {
|
|
|
+ custemsName = CustemsName[i];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ AlertUI.Show(string.Format("恭喜通过,所用时长:{0},通关评价:{1}", currentGameTime, custemsName))
|
|
|
+ .SetLeftButton(false)
|
|
|
+ .SetRightButton(true, "确定", (object data) =>
|
|
|
+ {
|
|
|
+ this.Hide();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //洗牌
|
|
|
+ private void RandomCardList(int[] array, int length)
|
|
|
+ {
|
|
|
+ int index;
|
|
|
+ int value;
|
|
|
+ for (int i = length - 1; i >= 0; i--)
|
|
|
+ {
|
|
|
+ index = rand.Next(0, i + 1);
|
|
|
+ value = array[i];
|
|
|
+ array[i] = array[index];
|
|
|
+ array[index] = value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|