Unity UGUI 2048 NumControler

数据检测数组

    #region 数据检测数组-NumIndexArray-NumAssemblyArray
    private int[][] NumIndexArray = new int[4][]{
        new int[4]{0,0,0,0},
        new int[4]{0,0,0,0},
        new int[4]{0,0,0,0},
        new int[4]{0,0,0,0}
    };
    private Num[][] NumAssemblyArray = new Num[4][]{
        new Num[4]{null,null,null,null},
        new Num[4]{null,null,null,null},
        new Num[4]{null,null,null,null},
        new Num[4]{null,null,null,null}
    };
    #endregion

检测鼠标按下并通过鼠标抬起检测方法进行移动

    #region 检测鼠标按下并通过鼠标抬起检测方法进行移动-CheckAndMoveNum
    private void CheckAndMoveNum() {
        if (Input.GetMouseButtonDown(0))
        //Input.GetMouseButtonDown(0)检测鼠标邮件按下,Input.GetMouseButtonUp(0)检测鼠标抬起,同时也可以检测触摸。
        {
            mouseDownPosition = Input.mousePosition;
        }
        if (Input.GetMouseButtonUp(0) == false) return;
        //如果鼠标抬起则
        TouchDir touchDir=GetTouchDir();
        //GetTouchDir()当鼠标抬起时,调用该方法,确定鼠标移动的方向
        ToMove(touchDir);//根据方向进行移动
    }
    #endregion

判断鼠标滑动方向

    #region 判断鼠标滑动方向- GetTouchDir
    private TouchDir GetTouchDir() {
        if (Input.GetMouseButtonUp(0)) {
            Vector3 TouchOffset = Input.mousePosition - mouseDownPosition;
//Mathf.Abs(TouchOffset.x) >= Mathf.Abs(TouchOffset.y)取正负号
            if (Mathf.Abs(TouchOffset.x) >= Mathf.Abs(TouchOffset.y) && Mathf.Abs(TouchOffset.x) > 80)
            {
                if (TouchOffset.x > 0)
                {
                    return TouchDir.Right;
                }
                else if (TouchOffset.x < 0)
                {
                    return TouchDir.Left;
                }
            }
            if (Mathf.Abs(TouchOffset.x) < Mathf.Abs(TouchOffset.y) && Mathf.Abs(TouchOffset.y) > 80)
            {
                if (TouchOffset.y > 0)
                {
                    return TouchDir.Top;
                }
                else if (TouchOffset.y < 0)
                {
                    return TouchDir.Bottom;
                }
            } 
        }
        return TouchDir.None;
    }
    #endregion

生成Num-CreateNum

#region 生成Num-CreateNum(TouchDir touchDir)-(int x,int y,int Index)
    private void CreateNum(TouchDir touchDir) {
        Vector2 newPos = SelectEmptyPos(touchDir);
        if (newPos.x != 9 || newPos.y != 9)
        {
            //通过Prefab,创建Num的gameObject
            GameObject item = Instantiate(NumPrefab) as GameObject;
            //取到新Num的Num组件
            Num numItem = item.GetComponent<Num>();
            //设置新Num的基本属性
            numItem.NumIndex = 2;
            numItem.InitX = (int)newPos.x;
            numItem.InitY = (int)newPos.y;
            //调整新Num的父组件
            item.transform.parent = this.transform;
            //设置更新数组
            NumIndexArray[(int)newPos.x][(int)newPos.y] = 2;
            NumAssemblyArray[(int)newPos.x][(int)newPos.y] = numItem;
            //记分
            StatisticsScore();
        }
        else { 
            //游戏失败,检测环判断是否有相邻的相同数字
            gameState = GameState.End;
            bool isEnd1 = true;
            bool isEnd2 = true;
            int index=0;

            #region 循环判断是否有相邻的相同数字
            for (int x = 0; x < 4; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    if (index == 0)
                    {
                        index = NumIndexArray[x][y];
                    }
                    else
                    {
                        if (index != NumIndexArray[x][y])
                        {
                            index = NumIndexArray[x][y];
                        }
                        else
                        {
                            isEnd1 = false;
                            break;
                        }
                    }
                }
            }
            index = 0;
            for (int y = 0; y < 4; y++)
            {
                for (int x = 0; x < 4; x++)
                {
                    if (index == 0)
                    {
                        index = NumIndexArray[x][y];
                    }
                    else
                    {
                        if (index != NumIndexArray[x][y])
                        {
                            index = NumIndexArray[x][y];
                        }
                        else
                        {
                            isEnd2 = false;
                            break;
                        }
                    }
                }
            }
            #endregion

            if (!isEnd1 || !isEnd2) {
                gameState = GameState.Playing;
            }
            StatisticsScore();
        } 
    }
    //在指定的位置创建新的Num,在游戏中调用
    private void CreateNum(int x,int y,int Index)
    {
            GameObject item = Instantiate(NumPrefab) as GameObject;
            Num numItem = item.GetComponent<Num>();
            numItem.NumIndex = Index;
            numItem.InitX = x;
            numItem.InitY = y;
            item.transform.parent = this.transform;
            NumIndexArray[x][y] = Index;
            NumAssemblyArray[x][y] = numItem;
            StatisticsScore();
    }
    #endregion

源码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值