[原创]unity教程之2048游戏02。

    xiaoxiao2025-10-08  2

    [原创]    那么首先这是一个4*4的游戏,16个格子。左右上下移动方块,相同的方块销毁,生成一个新的方块。例如 0204 0222 0420 2444 像右移动后,变成了 0024 0024 0042 0248 整个游戏逻辑就是这样的。     所以我这里就简化成了1*4的游戏,4个格子,左右移动方块,当做到这点并理解了,那么扩展到4*4也就问题不大了。我之所以这样讲解,是希望和我一样的新手能一步一步的抽丝剥茧似的把整个逻辑弄懂,开窍了后这东西也就这么一回事。 那么游戏例子就变成这样了: 0222向右移动后0024或者2040向右移动后变成0024。 是吧,这很好理解。 所以1、在hierarchy下建立一个2D-Object-Sprite,把背景my2048拖进去,游戏背景总要有的。       2、在hierarchy下空的gameobject,改名为Gamemanager,然后给他ADD Component一个c#叫 gamemanager,这个就是游戏管理器了,我们的主要代码都在这里写的。 public enum GameState{       Playing,       Pause,       End } public class gmmanager : MonoBehaviour {             GameState state=GameState.Playing;       private int[] numArray=new int[4]{0,0,0,0};       public List go=new List ();       public GameObject bock;             void Start () {                         CreateNum ();             CreateNum ();                                                       }                   void Update () {             switch (state) {             case GameState.Playing:                   //move                   MoveNum();                   break;             case GameState.Pause:                   break;             case GameState.End:                   break;                                                 }                   } 3、好了,先把上面不重要的代码先讲了,GameState这个是枚举类型,控制游戏的状态,你可以在Update 看到,一开始我们定义了是playing状态,在这个状态下MoveNum()就开始作用了(这个函数后面会讲到)。 4、CreateNum (),马上会讲到的,这个是一开始的时候,游戏随机的产生两个数字 5、因为我们先测试的是1*4的方块。所以new int[4]{0,0,0,0};这个是理论上的,实际上要有放图片的地方所以要List go=new List ()(别忘了在inspector面板给go这个size填上4。),最后是public GameObject bock;我们把做好的预制件mBock拖到这个bock中。 那么接下来的要将怎么CreateNum ()了。 private void CreateNum(){             int randomBock = Random.Range (1,3);//这个仅仅是用来随机产生2或者4数字的大小,到时候会乘以2。             int randomNumx = -1;             int emptyNum = 0;             for (int x=0; x<4; x++) {                   if (numArray [x] == 0)                         emptyNum++;             }             if (emptyNum == 0)//上面我们知道numArray里面都是0,所以第一次emptyNum 肯定是4了。                   return;             int randomNum = Random.Range (1, emptyNum + 1);//这个是随机的位置,所以随机数在1和4中产生(不包括最大数5)             int index = 0;//设计一个标记符,找到这个randomNum             for (int x=0; x<4; x++) {                   if (numArray [x] == 0) {                         index++;                         if (index == randomNum) {                               randomNumx = x;//找到了,就跳转到flag的这个位置去执行代码                               goto flag;}                   }             }       flag:                                     go[randomNumx]=(GameObject)Instantiate (bock,new Vector2(-132f+randomNumx*88f,132f),Quaternion.identity);//实例化             go[randomNumx].GetComponent ().changeText(2*randomBock);//实例化后,改成方块的数字,需要给预制件添加c#名为BockMove。             numArray[randomNumx]=2*randomBock;       } 6,之前忘了给prefab预制件mBock添加c#了。里面的函数比较简单不详细讲解了。 public class BockMove : MonoBehaviour {       public Text mtext;       public Vector3 newPos;       public bool needsetz=false;       void Start () {             newPos = transform.position;             }             void Update () {             transform.position=Vector3.MoveTowards(transform.position,newPos,25.0f);             }       public void changePos(int temIndex){             newPos.x = -132f + temIndex * 88f;             if(needsetz){             newPos.z = 1;                   needsetz=false;             }       }       public void destroyBock(){             Destroy (this);       }       public void changeText(int mt){                         mtext.text =mt.ToString();       } }
    转载请注明原文地址: https://ju.6miu.com/read-1302947.html
    最新回复(0)