[Unity3D+演算法]一小時做個2048

來源:互聯網
上載者:User

2048是繼FlappyBird之後另一個比較熱的輕量級的手遊,簡單易玩。最近要離職原先的公司——因為我想做遊戲,雖然玩遊戲不是很多,但還是熱愛開發遊戲,因此就想去一家遊戲公司,感覺對老闆有一點愧疚和感激,願原公司發展越來越好,用灰太狼的話講,我還會回來的,哈哈!即將入職新公司,聽說壓力會很大,加班無止境,加班其實我到不怕,乘年輕,還有拼勁,加班算什麼,其實只要自己能做出東西,感覺有成就感,倒還是喜歡花更多的時間去做東西,最近處於過渡期,寫寫之前公司的工作小結,還不是很忙,今天花了一個多小時,自己想了一下2048的演算法,然後將其實現,可能演算法不是那麼優,還望批評交流!


實現的還比較粗糙,貼出主要邏輯代碼,僅供參考,歡迎給出更優演算法!

using UnityEngine;using System.Collections;public class NewBehaviourScript : MonoBehaviour{    public UILabel valueLabel;    bool gameover = false;    void Start()    {        gameover = false;        valueLabel = GameObject.Find("ValueLabel").GetComponentInChildren<UILabel>();        valueLabel.text = "Game Start";        valueLabel.color = Color.green;    }    // Update is called once per frame    void Update()    {        if (!gameover)        {            if (Input.GetKeyDown(KeyCode.D))            {                moveR();                CreateNumber();            }            else if (Input.GetKeyDown(KeyCode.A))            {                moveL();                CreateNumber();            }            else if (Input.GetKeyDown(KeyCode.W))            {                moveU();                CreateNumber();            }            else if (Input.GetKeyDown(KeyCode.S))            {                moveD();                CreateNumber();            }        }    }    void moveU()    {        for (int i = 1; i <= 4; i++)        {            bool flag = false;            for (int j = 2; j <= 4; j++)            {                for (int k = j - 1; k >= 1; k--)                {                    //擷取當前元素                    GameObject go = GameObject.Find("L" + (k + 1).ToString() + i.ToString());                    print("當前對象" + go.name);                    UILabel I = go.GetComponentInChildren<UILabel>();                    //擷取下一個元素                    GameObject goNext = GameObject.Find("L" + k.ToString() + i.ToString());                    print("下一個對象" + goNext.name);                    UILabel INext = goNext.GetComponentInChildren<UILabel>();                    //比較代碼                    if (I.text != "")                    {                        if (INext.text == "")                        {                            INext.text = I.text;                            I.text = "";                        }                        else if (I.text == INext.text)                        {                            if (!flag)                            {                                int a = int.Parse(INext.text) + int.Parse(I.text);                                INext.text = a.ToString();                                I.text = "";                                flag = true;                            }                        }                    }                }            }        }    }    void moveD()    {        for (int i = 1; i <= 4; i++)        {            bool flag = false;            for (int j = 3; j >= 1; j--)            {                for (int k = j + 1; k <= 4; k++)                {                    //擷取當前元素                    GameObject go = GameObject.Find("L" + (k-1).ToString() + i.ToString());                    print("當前對象" + go.name);                    UILabel I = go.GetComponentInChildren<UILabel>();                    //擷取下一個元素                    GameObject goNext = GameObject.Find("L" + k.ToString() + i.ToString());                    print("下一個對象" + goNext.name);                    UILabel INext = goNext.GetComponentInChildren<UILabel>();                    //比較代碼                    if (I.text != "")                    {                        if (INext.text == "")                        {                            INext.text = I.text;                            I.text = "";                        }                        else if (I.text == INext.text)                        {                            if (!flag)                            {                                int a = int.Parse(INext.text) + int.Parse(I.text);                                INext.text = a.ToString();                                I.text = "";                                flag = true;                            }                        }                    }                }            }        }    }    void moveL()    {        for (int i = 1; i <= 4; i++)        {            bool flag = false;            for (int j = 2; j <= 4; j++)            {                                for (int k = j - 1; k >=1 ; k--)                {                    //擷取當前元素                    GameObject go = GameObject.Find("L" + i.ToString() + (k + 1).ToString());                    print("當前對象" + go.name);                    UILabel I = go.GetComponentInChildren<UILabel>();                    //擷取下一個元素                    GameObject goNext = GameObject.Find("L" + i.ToString() + k.ToString());                    print("下一個對象" + goNext.name);                    UILabel INext = goNext.GetComponentInChildren<UILabel>();                    //比較代碼                    if (I.text != "")                    {                        if (INext.text == "")                        {                            INext.text = I.text;                            I.text = "";                        }                        else if (I.text == INext.text)                        {                            if (!flag)                            {                                int a = int.Parse(INext.text) + int.Parse(I.text);                                INext.text = a.ToString();                                I.text = "";                                flag = true;                            }                        }                    }                }            }        }    }    void moveR()    {        for (int i = 1; i <= 4; i++)        {            bool flag = false;            for (int j = 3; j >= 1; j--)            {                                for (int k = j + 1; k <= 4; k++)                {                    //擷取當前元素                    GameObject go = GameObject.Find("L" + i.ToString() + (k - 1).ToString());                    print("當前對象" + go.name);                    UILabel I = go.GetComponentInChildren<UILabel>();                    //擷取下一個元素                    GameObject goNext = GameObject.Find("L" + i.ToString() + k.ToString());                    print("下一個對象" + goNext.name);                    UILabel INext = goNext.GetComponentInChildren<UILabel>();                    //比較代碼                    if (I.text != "")                    {                        if (INext.text == "")                        {                            INext.text = I.text;                            I.text = "";                        }                        else if (I.text == INext.text)                        {                            if (!flag)                            {                                int a = int.Parse(INext.text) + int.Parse(I.text);                                INext.text = a.ToString();                                I.text = "";                                flag = true;                            }                        }                    }                }            }        }    }    void CreateNumber()    {        int count = 0;        bool flag = false;        for (int i = 1; i <= 4; i++)        {            if (!flag)            {                for (int j = 1; j <= 4; j++)                {                    GameObject go = GameObject.Find("L" + i.ToString() + j.ToString());                    UILabel label = go.GetComponentInChildren<UILabel>();                    if (label.text == "")                    {                        int r = Random.Range(1, 10);                        if (r <= 5)                        {                            int value = Random.Range(1, 5);                            if (value < 4)                                label.text = "2";                            else                                label.text = "4";                            flag = true;                            break;                        }                    }                    else                    {                        if (++count == 16)                        {                            valueLabel.text = "Game Over";                            valueLabel.color = Color.red;                            gameover = true;                        }                    }                }            }            else                break;        }    }}

歡迎關注我的圍脖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.