|
@@ -15,10 +15,11 @@ namespace GFGGame
|
|
|
public int num;
|
|
|
}
|
|
|
|
|
|
- private Grid[,] gridArr;
|
|
|
- private int gridNum = 3;
|
|
|
- private List<GObject> items;
|
|
|
- private bool firstInit;
|
|
|
+ private Grid[,] _gridArr;
|
|
|
+ private readonly int _gridNum = 3;
|
|
|
+ private List<GObject> _items;
|
|
|
+ private bool _gameStart;
|
|
|
+ private HuarongRoadGame cfg;
|
|
|
|
|
|
public override void Dispose()
|
|
|
{
|
|
@@ -38,16 +39,14 @@ namespace GFGGame
|
|
|
_ui = UI_ActivityHuaRongDaoUI.Create();
|
|
|
viewCom = _ui.target;
|
|
|
viewCom.Center();
|
|
|
+ isReturnView = true;
|
|
|
modal = true;
|
|
|
|
|
|
_ui.m_item.target.visible = false;
|
|
|
- _ui.m_btnClose.onClick.Add(Hide);
|
|
|
-
|
|
|
- firstInit = true;
|
|
|
+ _ui.m_btnBack.onClick.Add(OnBtnBackClick);
|
|
|
|
|
|
InitGridInfo();
|
|
|
CreateItems();
|
|
|
- InitItems();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -55,15 +54,13 @@ namespace GFGGame
|
|
|
{
|
|
|
base.OnShown();
|
|
|
|
|
|
- if (!firstInit)
|
|
|
- {
|
|
|
- SetGridInfo();
|
|
|
- InitItems();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- firstInit = false;
|
|
|
- }
|
|
|
+ cfg = (HuarongRoadGame)viewData;
|
|
|
+ SetGridInfo();
|
|
|
+ InitItems();
|
|
|
+ _gameStart = false;
|
|
|
+ ResetCountdown();
|
|
|
+ Countdown(null);
|
|
|
+ Timers.inst.Add(1, 0, Countdown);
|
|
|
}
|
|
|
|
|
|
protected override void OnHide()
|
|
@@ -76,32 +73,31 @@ namespace GFGGame
|
|
|
/// </summary>
|
|
|
private void InitGridInfo()
|
|
|
{
|
|
|
- gridArr = new Grid[gridNum, gridNum];
|
|
|
- items = new List<GObject>();
|
|
|
+ _gridArr = new Grid[_gridNum, _gridNum];
|
|
|
+ _items = new List<GObject>();
|
|
|
|
|
|
- for (int i = 0; i < gridNum; i++)
|
|
|
+ for (int i = 0; i < _gridNum; i++)
|
|
|
{
|
|
|
- for (int j = 0; j < gridNum; j++)
|
|
|
+ for (int j = 0; j < _gridNum; j++)
|
|
|
{
|
|
|
- gridArr[i, j] = new Grid();
|
|
|
+ _gridArr[i, j] = new Grid();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- SetGridInfo();
|
|
|
}
|
|
|
|
|
|
private void SetGridInfo()
|
|
|
{
|
|
|
- List<int> numList = GetRandomArr(1, 8);
|
|
|
- //List<int> numList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 0, 8 };
|
|
|
+ //List<int> numList = GetRandomArr(1, 8);
|
|
|
+ List<int> numList = GetArrByConfigStep(cfg.step);
|
|
|
Vector2 originPos = _ui.m_item.target.position;
|
|
|
|
|
|
- for (int i = 0; i < gridNum; i++)
|
|
|
+ for (int i = 0; i < _gridNum; i++)
|
|
|
{
|
|
|
- for (int j = 0; j < gridNum; j++)
|
|
|
+ for (int j = 0; j < _gridNum; j++)
|
|
|
{
|
|
|
- gridArr[i, j].num = numList[i * gridNum + j];
|
|
|
- gridArr[i, j].pos = originPos + new Vector2(j * _ui.m_item.target.width, i * _ui.m_item.target.height);
|
|
|
+ _gridArr[i, j].num = numList[i * _gridNum + j];
|
|
|
+ _gridArr[i, j].pos = originPos + new Vector2(j * _ui.m_item.target.width, i * _ui.m_item.target.height);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -135,23 +131,59 @@ namespace GFGGame
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 根据配置步数打乱数组
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="configStep"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private List<int> GetArrByConfigStep(int configStep)
|
|
|
+ {
|
|
|
+ List<int> list = new List<int>();
|
|
|
+ for (int i = 1; i <= 8; i++)
|
|
|
+ {
|
|
|
+ list.Add(i);
|
|
|
+ }
|
|
|
+ // 最后一个是空的
|
|
|
+ list.Add(0);
|
|
|
+
|
|
|
+ int num = 0;
|
|
|
+ Vector2 zeroPos = new Vector2(2, 2);
|
|
|
+ Vector2[] dirArr = { new Vector2(-1, 0), new Vector2(1, 0), new Vector2(0, -1), new Vector2(0, 1) };
|
|
|
+ Vector2 lastPos = zeroPos;
|
|
|
+ while (num < configStep)
|
|
|
+ {
|
|
|
+ int n = Random.Range(0, 4);
|
|
|
+ Vector2 tempPos = zeroPos + dirArr[n];
|
|
|
+ if (tempPos != lastPos && tempPos.x >= 0 && tempPos.y >= 0 && tempPos.x < _gridNum && tempPos.y < _gridNum)
|
|
|
+ {
|
|
|
+ list[(int)zeroPos.x * _gridNum + (int)zeroPos.y] = list[(int)tempPos.x * _gridNum + (int)tempPos.y];
|
|
|
+ list[(int)tempPos.x * _gridNum + (int)tempPos.y] = 0;
|
|
|
+
|
|
|
+ lastPos = zeroPos;
|
|
|
+ zeroPos = tempPos;
|
|
|
+ }
|
|
|
+ ++num;
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
private void InitItems()
|
|
|
{
|
|
|
int itemIndex = 0;
|
|
|
- for (int i = 0; i < gridNum; i++)
|
|
|
+ for (int i = 0; i < _gridNum; i++)
|
|
|
{
|
|
|
- for (int j = 0; j < gridNum; j++)
|
|
|
+ for (int j = 0; j < _gridNum; j++)
|
|
|
{
|
|
|
// 空格不用放item
|
|
|
- if (gridArr[i, j].num == 0)
|
|
|
+ if (_gridArr[i, j].num == 0)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- items[itemIndex].position = gridArr[i, j].pos;
|
|
|
- UI_item item = UI_item.Proxy(items[itemIndex]);
|
|
|
- item.m_index.text = gridArr[i, j].num.ToString();
|
|
|
- items[itemIndex].data = gridArr[i, j].num;
|
|
|
+ _items[itemIndex].position = _gridArr[i, j].pos;
|
|
|
+ UI_item item = UI_item.Proxy(_items[itemIndex]);
|
|
|
+ item.m_index.text = _gridArr[i, j].num.ToString();
|
|
|
+ _items[itemIndex].data = _gridArr[i, j].num;
|
|
|
UI_item.ProxyEnd();
|
|
|
++itemIndex;
|
|
|
}
|
|
@@ -163,13 +195,13 @@ namespace GFGGame
|
|
|
/// </summary>
|
|
|
private void CreateItems()
|
|
|
{
|
|
|
- for (int i = 1; i <= gridNum * gridNum - 1; i++)
|
|
|
+ for (int i = 1; i <= _gridNum * _gridNum - 1; i++)
|
|
|
{
|
|
|
GObject gObject = UIPackage.CreateObject("ActivityHuaRongDao", "item");
|
|
|
gObject.name = "item" + i;
|
|
|
gObject.onClick.Add(OnItemClick);
|
|
|
_ui.m_items.target.AddChild(gObject);
|
|
|
- items.Add(gObject);
|
|
|
+ _items.Add(gObject);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -181,7 +213,7 @@ namespace GFGGame
|
|
|
if (newGrid != null)
|
|
|
{
|
|
|
_ui.m_items.target.touchable = false;
|
|
|
- obj.TweenMove(newGrid.pos, 0.3f).OnComplete(()=>
|
|
|
+ obj.TweenMove(newGrid.pos, 0.1f).OnComplete(()=>
|
|
|
{
|
|
|
_ui.m_items.target.touchable = true;
|
|
|
CheckWin();
|
|
@@ -195,11 +227,11 @@ namespace GFGGame
|
|
|
int indexY = 0;
|
|
|
|
|
|
// 找到格子
|
|
|
- for (int i = 0; i < gridNum; i++)
|
|
|
+ for (int i = 0; i < _gridNum; i++)
|
|
|
{
|
|
|
- for (int j = 0; j < gridNum; j++)
|
|
|
+ for (int j = 0; j < _gridNum; j++)
|
|
|
{
|
|
|
- if (gridArr[i, j].num == num)
|
|
|
+ if (_gridArr[i, j].num == num)
|
|
|
{
|
|
|
indexX = i;
|
|
|
indexY = j;
|
|
@@ -220,11 +252,11 @@ namespace GFGGame
|
|
|
|
|
|
private bool CheckHaveNullGrid(int indexX, int indexY)
|
|
|
{
|
|
|
- if (indexX >= 0 && indexX < gridNum)
|
|
|
+ if (indexX >= 0 && indexX < _gridNum)
|
|
|
{
|
|
|
- if (indexY >= 0 && indexY < gridNum)
|
|
|
+ if (indexY >= 0 && indexY < _gridNum)
|
|
|
{
|
|
|
- return gridArr[indexX, indexY].num == 0;
|
|
|
+ return _gridArr[indexX, indexY].num == 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -237,15 +269,15 @@ namespace GFGGame
|
|
|
Vector2 numGridindex = new Vector2(-1, 0);
|
|
|
|
|
|
|
|
|
- for (int i = 0; i < gridNum; i++)
|
|
|
+ for (int i = 0; i < _gridNum; i++)
|
|
|
{
|
|
|
- for (int j = 0; j < gridNum; j++)
|
|
|
+ for (int j = 0; j < _gridNum; j++)
|
|
|
{
|
|
|
- if (gridArr[i, j].num == num)
|
|
|
+ if (_gridArr[i, j].num == num)
|
|
|
{
|
|
|
numGridindex = new Vector2(i, j);
|
|
|
}
|
|
|
- else if (gridArr[i, j].num == 0)
|
|
|
+ else if (_gridArr[i, j].num == 0)
|
|
|
{
|
|
|
nullGridindex = new Vector2(i, j);
|
|
|
}
|
|
@@ -256,22 +288,22 @@ namespace GFGGame
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- gridArr[(int)numGridindex.x, (int)numGridindex.y].num = 0;
|
|
|
- gridArr[(int)nullGridindex.x, (int)nullGridindex.y].num = num;
|
|
|
+ _gridArr[(int)numGridindex.x, (int)numGridindex.y].num = 0;
|
|
|
+ _gridArr[(int)nullGridindex.x, (int)nullGridindex.y].num = num;
|
|
|
|
|
|
- return gridArr[(int)nullGridindex.x, (int)nullGridindex.y];
|
|
|
+ return _gridArr[(int)nullGridindex.x, (int)nullGridindex.y];
|
|
|
}
|
|
|
|
|
|
private void CheckWin()
|
|
|
{
|
|
|
int num = 0;
|
|
|
- for (int i = 0; i < gridNum; i++)
|
|
|
+ for (int i = 0; i < _gridNum; i++)
|
|
|
{
|
|
|
- for (int j = 0; j < gridNum; j++)
|
|
|
+ for (int j = 0; j < _gridNum; j++)
|
|
|
{
|
|
|
if (i == 0 && j == 0)
|
|
|
{
|
|
|
- num = gridArr[i, j].num;
|
|
|
+ num = _gridArr[i, j].num;
|
|
|
if(num != 1)
|
|
|
{
|
|
|
return;
|
|
@@ -280,7 +312,7 @@ namespace GFGGame
|
|
|
else
|
|
|
{
|
|
|
// 不连续 没有胜利
|
|
|
- if (gridArr[i, j].num != num + 1)
|
|
|
+ if (_gridArr[i, j].num != num + 1)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
@@ -289,17 +321,58 @@ namespace GFGGame
|
|
|
{
|
|
|
++num;
|
|
|
// 胜利
|
|
|
- if (num == gridNum * gridNum - 1)
|
|
|
+ if (num == _gridNum * _gridNum - 1)
|
|
|
{
|
|
|
- Debug.Log("You Win!!");
|
|
|
+ // 关卡推进
|
|
|
+ int passLevel = cfg.resArr[0];
|
|
|
+ ActivityHuaRongDaoEntryView.curLevel = Mathf.Max(passLevel, ActivityHuaRongDaoEntryView.curLevel);
|
|
|
+ // 弹出成功界面
|
|
|
+ ViewManager.Show<ActivityHuaRongDaoSuccessView>(cfg);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ private int countDownNum;
|
|
|
+ private void Countdown(object param)
|
|
|
+ {
|
|
|
+ _ui.m_seconds.text = countDownNum.ToString();
|
|
|
+ --countDownNum;
|
|
|
+
|
|
|
+ if (countDownNum < 0)
|
|
|
+ {
|
|
|
+ _ui.m_tips.visible = false;
|
|
|
+ Timers.inst.Remove(Countdown);
|
|
|
+ _gameStart = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ private void ResetCountdown()
|
|
|
+ {
|
|
|
+ countDownNum = 3;
|
|
|
+ _ui.m_tips.visible = true;
|
|
|
+ Timers.inst.Remove(Countdown);
|
|
|
+ }
|
|
|
|
|
|
+ private void OnBtnBackClick()
|
|
|
+ {
|
|
|
+ if (_gameStart)
|
|
|
+ {
|
|
|
+ AlertUI.Show("退出游戏不保存进度,不扣除任何次数和道具,是否退出?")
|
|
|
+ .SetLeftButton(true, "返回游戏")
|
|
|
+ .SetRightButton(true, "仍要退出", (obj) =>
|
|
|
+ {
|
|
|
+ Hide();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Hide();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|