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; } } }