|  | @@ -79,10 +79,6 @@ namespace GFGGame
 | 
	
		
			
				|  |  |                  _blankItem = UIPackage.CreateObject("ActivityHuaRongDao", "item");
 | 
	
		
			
				|  |  |                  _ui.target.AddChild(_blankItem);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            _ui.m_maskTouch.onTouchBegin.Add(TouchBegin);
 | 
	
		
			
				|  |  | -            _ui.m_maskTouch.onTouchEnd.Add(TouchEnd);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          protected override void OnShown()
 | 
	
	
		
			
				|  | @@ -232,6 +228,7 @@ namespace GFGGame
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  GObject gObject = UIPackage.CreateObject("ActivityHuaRongDao", "item");
 | 
	
		
			
				|  |  |                  gObject.name = "item" + i;
 | 
	
		
			
				|  |  | +                gObject.onClick.Add(OnItemClick);
 | 
	
		
			
				|  |  |                  _ui.m_items.target.AddChild(gObject);
 | 
	
		
			
				|  |  |                  _items.Add(gObject);
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -253,103 +250,77 @@ namespace GFGGame
 | 
	
		
			
				|  |  |              inputPos.y = context.inputEvent.y;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        private void TouchEnd(EventContext context)
 | 
	
		
			
				|  |  | +        private Grid CheckCanMove(int num)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            GridInfo numGrid = null;
 | 
	
		
			
				|  |  | -            GridInfo nullGrid = new GridInfo();
 | 
	
		
			
				|  |  | +            int indexX = 0;
 | 
	
		
			
				|  |  | +            int indexY = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // 找到空格子
 | 
	
		
			
				|  |  | +            // 找到格子
 | 
	
		
			
				|  |  |              for (int i = 0; i < _gridNum; i++)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  for (int j = 0; j < _gridNum; j++)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    if (_gridArr[i, j].num == 0)
 | 
	
		
			
				|  |  | +                    if (_gridArr[i, j].num == num)
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  | -                        nullGrid.row = i;
 | 
	
		
			
				|  |  | -                        nullGrid.col = j;
 | 
	
		
			
				|  |  | +                        indexX = i;
 | 
	
		
			
				|  |  | +                        indexY = j;
 | 
	
		
			
				|  |  |                          break;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // 左
 | 
	
		
			
				|  |  | -            if ((context.inputEvent.x - inputPos.x) < 0 && Mathf.Abs(context.inputEvent.x - inputPos.x) > Mathf.Abs(context.inputEvent.y - inputPos.y))
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                numGrid = CheckHaveNumGrid(nullGrid.row, nullGrid.col + 1);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // 右
 | 
	
		
			
				|  |  | -            if ((context.inputEvent.x - inputPos.x) > 0 && Mathf.Abs(context.inputEvent.x - inputPos.x) > Mathf.Abs(context.inputEvent.y - inputPos.y))
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                numGrid = CheckHaveNumGrid(nullGrid.row, nullGrid.col - 1);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // 上
 | 
	
		
			
				|  |  | -            if ((context.inputEvent.y - inputPos.y) < 0 && Mathf.Abs(context.inputEvent.y - inputPos.y) > Mathf.Abs(context.inputEvent.x - inputPos.x))
 | 
	
		
			
				|  |  | +            // 判断格子四个方向是否有空格
 | 
	
		
			
				|  |  | +            if (CheckHaveNullGrid(indexX - 1, indexY) || CheckHaveNullGrid(indexX, indexY - 1)
 | 
	
		
			
				|  |  | +                || CheckHaveNullGrid(indexX + 1, indexY) || CheckHaveNullGrid(indexX, indexY + 1))
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                numGrid = CheckHaveNumGrid(nullGrid.row + 1, nullGrid.col);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // 下
 | 
	
		
			
				|  |  | -            if ((context.inputEvent.y - inputPos.y) > 0 && Mathf.Abs(context.inputEvent.y - inputPos.y) > Mathf.Abs(context.inputEvent.x - inputPos.x))
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                numGrid = CheckHaveNumGrid(nullGrid.row - 1, nullGrid.col);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (numGrid != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                int num = numGrid.num;
 | 
	
		
			
				|  |  | -                Grid grid = UpdateGridInfo(numGrid, nullGrid);
 | 
	
		
			
				|  |  | -                MoveItem(grid, num);
 | 
	
		
			
				|  |  | +                return UpdateGridInfo(num);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        private void MoveItem(Grid newGrid, int changeNum)
 | 
	
		
			
				|  |  | +        private bool CheckHaveNullGrid(int indexX, int indexY)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            for (int i = 0; i < _items.Count; i++)
 | 
	
		
			
				|  |  | +            if (indexX >= 0 && indexX < _gridNum)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                GObject obj = _items[i];
 | 
	
		
			
				|  |  | -                int num = (int)obj.data;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if (num == changeNum)
 | 
	
		
			
				|  |  | +                if (indexY >= 0 && indexY < _gridNum)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    _ui.m_maskGlobal.visible = true;
 | 
	
		
			
				|  |  | -                    obj.TweenMove(newGrid.pos, 0.1f).OnComplete(() =>
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        _ui.m_maskGlobal.visible = false;
 | 
	
		
			
				|  |  | -                        if (CheckWin())
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            ControlMenuItemVisual(false);
 | 
	
		
			
				|  |  | -                            Win(_cancellationTokenSource.Token);
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    });
 | 
	
		
			
				|  |  | -                    return;
 | 
	
		
			
				|  |  | +                    return _gridArr[indexX, indexY].num == 0;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        /// <summary>
 | 
	
		
			
				|  |  | -        /// 查看空白格附近是否存在数字格
 | 
	
		
			
				|  |  | -        /// </summary>
 | 
	
		
			
				|  |  | -        /// <param name="indexX"></param>
 | 
	
		
			
				|  |  | -        /// <param name="indexY"></param>
 | 
	
		
			
				|  |  | -        /// <returns></returns>
 | 
	
		
			
				|  |  | -        private GridInfo CheckHaveNumGrid(int indexX, int indexY)
 | 
	
		
			
				|  |  | +        private Grid UpdateGridInfo(int num)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (indexX >= 0 && indexX < _gridNum)
 | 
	
		
			
				|  |  | +            Vector2 nullGridindex = new Vector2(-1, 0);
 | 
	
		
			
				|  |  | +            Vector2 numGridindex = new Vector2(-1, 0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            for (int i = 0; i < _gridNum; i++)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                if (indexY >= 0 && indexY < _gridNum)
 | 
	
		
			
				|  |  | +                for (int j = 0; j < _gridNum; j++)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    GridInfo grid = new GridInfo();
 | 
	
		
			
				|  |  | -                    grid.row = indexX;
 | 
	
		
			
				|  |  | -                    grid.col = indexY;
 | 
	
		
			
				|  |  | -                    grid.num = _gridArr[indexX, indexY].num;
 | 
	
		
			
				|  |  | -                    return grid;
 | 
	
		
			
				|  |  | +                    if (_gridArr[i, j].num == num)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        numGridindex = new Vector2(i, j);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    else if (_gridArr[i, j].num == 0)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        nullGridindex = new Vector2(i, j);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    if (numGridindex.x != -1 && nullGridindex.x != -1)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            return null;
 | 
	
		
			
				|  |  | +            _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];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -554,7 +525,7 @@ namespace GFGGame
 | 
	
		
			
				|  |  |          private void OnChangeLookOriginState()
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              bool look = (_ui.m_state.selectedIndex == 1);
 | 
	
		
			
				|  |  | -            _ui.m_maskTouch.touchable = !look;
 | 
	
		
			
				|  |  | +            _ui.m_items.target.touchable = !look;
 | 
	
		
			
				|  |  |              _ui.m_items.target.visible = !look;
 | 
	
		
			
				|  |  |              _ui.m_itemsOrigin.target.visible = look;
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -569,5 +540,25 @@ namespace GFGGame
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              return ResPathUtil.GetHUARONGDAOPicPath(res);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        private void OnItemClick(EventContext eventContext)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            GObject obj = eventContext.sender as GObject;
 | 
	
		
			
				|  |  | +            int num = (int)obj.data;
 | 
	
		
			
				|  |  | +            Grid newGrid = CheckCanMove(num);
 | 
	
		
			
				|  |  | +            if (newGrid != null)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                _ui.m_maskGlobal.visible = true;
 | 
	
		
			
				|  |  | +                obj.TweenMove(newGrid.pos, 0.1f).OnComplete(() =>
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    _ui.m_maskGlobal.visible = false;
 | 
	
		
			
				|  |  | +                    if (CheckWin())
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        ControlMenuItemVisual(false);
 | 
	
		
			
				|  |  | +                        Win(_cancellationTokenSource.Token);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |