最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

unity使用鏈表實(shí)現(xiàn)貪吃蛇游戲

 更新時(shí)間:2020年04月16日 12:25:52   作者:丟丟思密達(dá)  
這篇文章主要為大家詳細(xì)介紹了unity使用鏈表實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天介紹一下如何利用鏈表結(jié)構(gòu)來創(chuàng)建一條貪吃蛇。

要實(shí)現(xiàn)的功能很簡(jiǎn)單,按下空格鍵使蛇加長(zhǎng)一節(jié),每次按下空格就在蛇尾加一個(gè)cube。按下左方向鍵,控制蛇的移動(dòng)。如圖所示:

//貪吃蛇的中心是:定義蛇身第一節(jié),即鏈表頭為temp。鏈表的子節(jié)點(diǎn)為next。蛇頭帶著temp(鏈表頭)走,temp帶著next(鏈表子節(jié)點(diǎn))走。

1. 創(chuàng)建一個(gè)cube設(shè)為預(yù)設(shè)體,作為蛇身的節(jié)點(diǎn)。在預(yù)設(shè)體上面添加BodyScript腳本。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class BodyScript : MonoBehaviour {
  //創(chuàng)建子物體的連接節(jié)點(diǎn)(next節(jié)點(diǎn)從鏈表的第二個(gè)元素開始,next是從算上蛇頭的第三節(jié)開始)
  //用來接收物體的臨時(shí)位置  
  private Vector3 myPos;
  /// <summary>
  /// 移動(dòng)方法
  /// </summary>
  /// <param name="pos">pos</param>
  public void Move(Vector3 pos)
  {
    //將移動(dòng)之前的位置記錄下來
    myPos = transform.position;   
    //更新物體位置--傳進(jìn)來的父物體的位置坐標(biāo)
    transform.position = pos;
    //如果當(dāng)前cube還有子節(jié)點(diǎn),不是蛇尾最后一節(jié)
    if (next != null)
    {
      //將子物體移動(dòng)到父物體的位置
      next.Move(myPos);
    }
  }
}

2.在Hierarchy面板上,創(chuàng)建一個(gè)cube作為蛇頭。添加一個(gè)SnakeMove腳本。來控制蛇頭并且創(chuàng)建鏈表。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class SnakeMove : MonoBehaviour {
  //Cube預(yù)設(shè)體
  public GameObject body_prefab;
  //聲明一個(gè)計(jì)時(shí)器
  float timer = 0;
  //實(shí)例化蛇身的第一節(jié)。算上蛇頭的第二節(jié)(即鏈表的第一個(gè)節(jié)點(diǎn))
  public BodyScript temp;  
  //指向最后生成的節(jié)點(diǎn)(相當(dāng)于指針,始終指向蛇尾) 
  public BodyScript point;

  void Update () {
    //計(jì)時(shí)器
    timer += Time.deltaTime;
      //每隔0.2秒來執(zhí)行移動(dòng)
    if(timer >= 0.2f)
    {
      //移動(dòng)
      Move();
      //計(jì)時(shí)器清零
       timer = 0;
    }
    //如果按下左方向鍵
    if(Input.GetKeyDown(KeyCode.LeftArrow))
    {
      //向左旋轉(zhuǎn)
      transform.Rotate(Vector3.up, -90);
    }
    //如果按下空格
    if (Input.GetKeyDown(KeyCode.Space))
    {        
      //實(shí)例化一個(gè)cube,作為蛇身的下一節(jié)(先把新生成的cube放置到視野外,現(xiàn)在還沒有把新生成的cube接到蛇身上)
      GameObject newBody = Instantiate(body_prefab, new Vector3(444, 0, 0), Quaternion.identity) as GameObject;
      //若子物體的節(jié)點(diǎn)為空(只有蛇頭的情況下,第一次按下空格,滿足這個(gè)if條件)
      if (temp == null)
      {
        //temp賦值。這時(shí)候,蛇身有了第一節(jié),鏈表的第一個(gè)元素產(chǎn)生。
        temp = newBody.GetComponent<BodyScript>();
        //將指針指向蛇身的第一節(jié)(因?yàn)榇藭r(shí)只有一節(jié)身體)
        point = temp;
      }
      //第二次,第三次生成時(shí)
      else
      {

        point.next = newBody.GetComponent<BodyScript>();
        //指向下一個(gè)物體的位置
        point = point.next;
      }      
    }
  }


  //創(chuàng)建接收物體的坐標(biāo)
  Vector3 pos;
  void Move()
  {
    //獲取當(dāng)前物體的坐標(biāo)
    pos = transform.position;
    //默認(rèn)向前移動(dòng)
    transform.Translate(Vector3.forward);
    //若鏈表頭不為空(就是蛇身第一個(gè)cube生成了)
    if (temp != null)
    {
      //執(zhí)行子物體移動(dòng)的方法(鏈表頭開始移動(dòng))
   //貪吃蛇的重點(diǎn)是,蛇頭的移動(dòng)帶動(dòng)鏈表頭的移動(dòng),鏈表頭再帶動(dòng)鏈表里的子節(jié)點(diǎn)移動(dòng)
      temp.Move(pos);
    }     
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái),上傳視頻功能,主要要解決兩個(gè)問題,一是在服務(wù)端通過C#生成簽名和SDKID,二是在客戶端通過JavaScript上傳視頻到騰訊云點(diǎn)播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • c#序列化詳解示例

    c#序列化詳解示例

    序列化是將對(duì)象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^程。與序列化相對(duì)的是反序列化,它將流轉(zhuǎn)換為對(duì)象。這兩個(gè)過程結(jié)合起來,可以輕松地存儲(chǔ)和傳輸數(shù)據(jù)
    2014-02-02
  • c# 自定義泛型鏈表類的詳解

    c# 自定義泛型鏈表類的詳解

    本篇文章是對(duì)c#中自定義泛型鏈表類進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#使用AutoResetEvent實(shí)現(xiàn)同步

    C#使用AutoResetEvent實(shí)現(xiàn)同步

    這篇文章主要為大家詳細(xì)介紹了C#使用AutoResetEvent實(shí)現(xiàn)同步的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • C#實(shí)現(xiàn)在Form里面內(nèi)嵌dos窗體的方法

    C#實(shí)現(xiàn)在Form里面內(nèi)嵌dos窗體的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)在Form里面內(nèi)嵌dos窗體的方法,涉及C#針對(duì)Form窗體的設(shè)置及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#實(shí)現(xiàn)控制臺(tái)飛行棋小游戲

    C#實(shí)現(xiàn)控制臺(tái)飛行棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)控制臺(tái)飛行棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下的相關(guān)資料
    2021-07-07
  • C#中常用窗口特效的實(shí)現(xiàn)代碼

    C#中常用窗口特效的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C#中三個(gè)常用的窗口特效的實(shí)現(xiàn),分別是淡入淡出、變大變小、緩升緩降,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C#讀寫xml文件方法總結(jié)(超詳細(xì)!)

    C#讀寫xml文件方法總結(jié)(超詳細(xì)!)

    項(xiàng)目中用到關(guān)于xml文件讀寫操,所以下面這篇文章主要給大家介紹了關(guān)于C#讀寫xml文件方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • C#中對(duì)稱加密算法的踩坑日常記錄

    C#中對(duì)稱加密算法的踩坑日常記錄

    這篇文章主要給大家介紹了關(guān)于C#中對(duì)稱加密算法的踩坑日常記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C#開發(fā)Windows窗體應(yīng)用程序的簡(jiǎn)單操作步驟

    C#開發(fā)Windows窗體應(yīng)用程序的簡(jiǎn)單操作步驟

    這篇文章主要介紹了C#開發(fā)Windows窗體應(yīng)用程序的簡(jiǎn)單操作步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評(píng)論

裕民县| 成都市| 定南县| 沙田区| 南平市| 武安市| 枞阳县| 米泉市| 景宁| 如皋市| 临桂县| 荆门市| 惠来县| 滦南县| 扬州市| 宣化县| 延边| 堆龙德庆县| 千阳县| 聂荣县| 昌吉市| 修文县| 鄯善县| 张家川| 松原市| 花垣县| 仙游县| 新巴尔虎左旗| 内黄县| 桃园县| 泾川县| 咸宁市| 二手房| 郴州市| 靖远县| 千阳县| 绍兴县| 临桂县| 邢台县| 康保县| 兰溪市|