unity使用連結串列實現貪吃蛇遊戲
阿新 • • 發佈:2020-04-17
今天介紹一下如何利用連結串列結構來建立一條貪吃蛇。
要實現的功能很簡單,按下空格鍵使蛇加長一節,每次按下空格就在蛇尾加一個cube。按下左方向鍵,控制蛇的移動。如圖所示:
//貪吃蛇的中心是:定義蛇身第一節,即連結串列頭為temp。連結串列的子節點為next。蛇頭帶著temp(連結串列頭)走,temp帶著next(連結串列子節點)走。
1. 建立一個cube設為預設體,作為蛇身的節點。在預設體上面新增BodyScript指令碼。
using UnityEngine; using System.Collections; using UnityEngine.UI; public class BodyScript : MonoBehaviour { //建立子物體的連線節點(next節點從連結串列的第二個元素開始,next是從算上蛇頭的第三節開始) //用來接收物體的臨時位置 private Vector3 myPos; /// <summary> /// 移動方法 /// </summary> /// <param name="pos">pos</param> public void Move(Vector3 pos) { //將移動之前的位置記錄下來 myPos = transform.position; //更新物體位置--傳進來的父物體的位置座標 transform.position = pos; //如果當前cube還有子節點,不是蛇尾最後一節 if (next != null) { //將子物體移動到父物體的位置 next.Move(myPos); } } }
2.在Hierarchy面板上,建立一個cube作為蛇頭。新增一個SnakeMove指令碼。來控制蛇頭並且建立連結串列。
using UnityEngine; using System.Collections; using UnityEngine.UI; public class SnakeMove : MonoBehaviour { //Cube預設體 public GameObject body_prefab; //宣告一個計時器 float timer = 0; //例項化蛇身的第一節。算上蛇頭的第二節(即連結串列的第一個節點) public BodyScript temp; //指向最後生成的節點(相當於指標,始終指向蛇尾) public BodyScript point; void Update () { //計時器 timer += Time.deltaTime; //每隔0.2秒來執行移動 if(timer >= 0.2f) { //移動 Move(); //計時器清零 timer = 0; } //如果按下左方向鍵 if(Input.GetKeyDown(KeyCode.LeftArrow)) { //向左旋轉 transform.Rotate(Vector3.up,-90); } //如果按下空格 if (Input.GetKeyDown(KeyCode.Space)) { //例項化一個cube,作為蛇身的下一節(先把新生成的cube放置到視野外,現在還沒有把新生成的cube接到蛇身上) GameObject newBody = Instantiate(body_prefab,new Vector3(444,0),Quaternion.identity) as GameObject; //若子物體的節點為空(只有蛇頭的情況下,第一次按下空格,滿足這個if條件) if (temp == null) { //temp賦值。這時候,蛇身有了第一節,連結串列的第一個元素產生。 temp = newBody.GetComponent<BodyScript>(); //將指標指向蛇身的第一節(因為此時只有一節身體) point = temp; } //第二次,第三次生成時 else { point.next = newBody.GetComponent<BodyScript>(); //指向下一個物體的位置 point = point.next; } } } //建立接收物體的座標 Vector3 pos; void Move() { //獲取當前物體的座標 pos = transform.position; //預設向前移動 transform.Translate(Vector3.forward); //若連結串列頭不為空(就是蛇身第一個cube生成了) if (temp != null) { //執行子物體移動的方法(連結串列頭開始移動) //貪吃蛇的重點是,蛇頭的移動帶動連結串列頭的移動,連結串列頭再帶動連結串列裡的子節點移動 temp.Move(pos); } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。