Unity NGUI实现2048(二)逻辑分析

来源:互联网 发布:魔兽数据库安卓 编辑:程序博客网 时间:2024/06/15 06:14

Unity NGUI实现2048(二)逻辑分析

1、退出应用

/*************************************************************///......if (Input.GetKeyDown(KeyCode.Escape))          //双击Esc退出应用        {            if (ExitMassage == null)            {                ExitMassage = Instantiate(ExitMessagePrefab) as GameObject;                StartCoroutine("resetExitMessage");            }            else            {                Application.Quit();                         //退出应用            }        }//....../*************************************************************/


2、移动控制

/*************************************************************///......if (control && isMovingNumbers.Count == 0)          //可控&&移动结束        {            int dirX = 0;            int dirY = 0;            if (Input.GetKeyDown("up"))            {                dirY = 1;            }            else if (Input.GetKeyDown("down"))            {                dirY = -1;            }            else if (Input.GetKeyDown("left"))            {                dirX = -1;            }            else if (Input.GetKeyDown("right"))            {                dirX = 1;            }            //手机触屏控制            if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)            {                Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;                if (Mathf.Abs(touchDeltaPosition.x) > Mathf.Abs(touchDeltaPosition.y))                {                    if (touchDeltaPosition.x > 4)                    {                        dirX = 1;                    }                    else if(touchDeltaPosition.x<-4)                    {                        dirX = -1;                    }                }                else                 {                    if (touchDeltaPosition.y > 4)                    {                        dirY = 1;                    }                    else if (touchDeltaPosition.y < -4)                    {                        dirY = -1;                    }                }            }            MoveNumbers(dirX, dirY);      //------>>>1        }//....../*************************************************************/

3、随机生成

value = Random.value > 0.2f ? 2 : 4;             //随机生成2或4        mySprite.spriteName = value.ToString();          //随机位置

4、移动逻辑

/*************************************************************///......if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)            {                Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;                if (Mathf.Abs(touchDeltaPosition.x) > Mathf.Abs(touchDeltaPosition.y))                {                    if (touchDeltaPosition.x > 4)                    {                        dirX = 1;                    }                    else if(touchDeltaPosition.x<-4)                    {                        dirX = -1;                    }                }                else                 {                    if (touchDeltaPosition.y > 4)                    {                        dirY = 1;                    }                    else if (touchDeltaPosition.y < -4)                    {                        dirY = -1;                    }                }            }            MoveNumbers(dirX, dirY);      //------>>>1//....../*************************************************************/


/*************************************************************///......public void MoveNumbers(int directionX, int directionY)   //------>>>2    {        if (directionX == 1)        {            if (directionX == 1)            {                for (int y = 0; y < 4; y++)                {                    for (int x = 2; x >= 0; x--)                    {                        if (numbers[x, y] != null)                        {                            numbers[x, y].Move(directionX, directionY);   //------>>>3                        }                    }                }            }        }        else if (directionX == -1)        {            for (int y = 0; y < 4; y++)            {                for (int x = 1; x < 4; x++)                {                    if (numbers[x, y] != null)                    {                        numbers[x, y].Move(directionX,  directionY);       //------>>>3                    }                }            }        }        else if (directionY == 1)        {            for (int x = 0; x < 4; x++)            {                for (int y = 2; y >= 0; y--)                {                    if (numbers[x, y] != null)                    {                        numbers[x, y].Move( directionX, directionY);        //------>>>3                    }                }            }        }        else if (directionY == -1)        {            for (int x = 0; x < 4; x++)            {                for (int y = 1; y < 4; y++)                {                    if (numbers[x, y] != null)                    {                        numbers[x, y].Move(directionX,  directionY);        //------>>>3                    }                }            }        }//....../*************************************************************/

/*************************************************************///......public void Move(int directionX, int directionY)    //------>>>3{    if (directionX == 1)        {            Debug.Log("Right");            int index = 1;            while (Manager._instance.isEmpty(positionX + index, positionY)) //判断右边是否为空            {                index++;            }            if (index > 1)            {                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                Manager._instance.numbers[positionX, positionY] = null;                positionX = positionX + index - 1;                Manager._instance.numbers[positionX, positionY] = this;            }            if (positionX < 3                 && value == Manager._instance.numbers[positionX + 1, positionY].value                 && !Manager._instance.numbers[positionX + 1, positionY].hasMixed)            {                Manager._instance.numbers[positionX + 1, positionY].hasMixed = true;                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                toDestroy = true;                Manager._instance.numbers[positionX + 1, positionY].value *= 2;                Manager._instance.numbers[positionX, positionY] = null;                positionX += 1;                            }                   }        else if (directionX == -1)        {            Debug.Log("Left");            int index = 1;            while (Manager._instance.isEmpty(positionX - index, positionY))            {                index++;            }            if (index > 1)            {                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                Manager._instance.numbers[positionX, positionY] = null;                positionX = positionX - index + 1;                Manager._instance.numbers[positionX, positionY] = this;            }            if (positionX > 0                 && value == Manager._instance.numbers[positionX - 1, positionY].value                 && !Manager._instance.numbers[positionX - 1, positionY].hasMixed)            {                Manager._instance.numbers[positionX - 1, positionY].hasMixed = true;                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                toDestroy = true;                Manager._instance.numbers[positionX - 1, positionY].value *= 2;                Manager._instance.numbers[positionX, positionY] = null;                positionX -= 1;            }                    }        else if (directionY == 1)        {            Debug.Log("Up");            int index = 1;            while (Manager._instance.isEmpty(positionX, positionY +index))            {                index++;            }            if (index > 1)            {                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                Manager._instance.numbers[positionX, positionY] = null;                positionY = positionY + index - 1;                Manager._instance.numbers[positionX, positionY] = this;            }            if (positionY < 3                 && value == Manager._instance.numbers[positionX, positionY + 1].value                 && !Manager._instance.numbers[positionX, positionY + 1].hasMixed)            {                Manager._instance.numbers[positionX, positionY + 1].hasMixed = true;                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                toDestroy = true;                Manager._instance.numbers[positionX, positionY+1].value *= 2;                Manager._instance.numbers[positionX, positionY] = null;                positionY += 1;            }                   }        else if (directionY == -1)        {            Debug.Log("Down");            int index = 1;            while (Manager._instance.isEmpty(positionX, positionY - index))            {                index++;            }            if (index > 1)            {                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                Manager._instance.numbers[positionX, positionY] = null;                positionY = positionY - index + 1;                Manager._instance.numbers[positionX, positionY] = this;            }            if (positionY > 0                 && value == Manager._instance.numbers[positionX, positionY - 1].value                 && !Manager._instance.numbers[positionX, positionY - 1].hasMixed)            {                Manager._instance.numbers[positionX, positionY - 1].hasMixed = true;                if (!Manager._instance.isMovingNumbers.Contains(this))                {                    Manager._instance.isMovingNumbers.Add(this);                }                Manager._instance.hasMove = true;                toDestroy = true;                Manager._instance.numbers[positionX, positionY - 1].value *= 2;                Manager._instance.numbers[positionX, positionY] = null;                positionY -= 1;            }                   }    }//....../*************************************************************/


5、移动结束后的合并逻辑

/*************************************************************///......public void MoveOver() //移动结束{    if (toDestroy)    {        Destroy(this.gameObject);        Manager._instance.numbers[positionX, positionY].mySprite.spriteName =            Manager._instance.numbers[positionX, positionY].value.ToString();        if (Manager._instance.numbers[positionX, positionY].value == 2048)        {            Manager._instance.gameWin();        }    }    Manager._instance.isMovingNumbers.Remove(this);}//....../*************************************************************/

0 0
原创粉丝点击