服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - unity使用链表实现贪吃蛇游戏

unity使用链表实现贪吃蛇游戏

2022-09-02 11:43丢丢思密达 C#

这篇文章主要为大家详细介绍了unity使用链表实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

今天介绍一下如何利用链表结构来创建一条贪吃蛇。

要实现的功能很简单,按下空格键使蛇加长一节,每次按下空格就在蛇尾加一个cube。按下左方向键,控制蛇的移动。如图所示:

//贪吃蛇的中心是:定义蛇身第一节,即链表头为temp。链表的子节点为next。蛇头带着temp(链表头)走,temp带着next(链表子节点)走。

unity使用链表实现贪吃蛇游戏

1. 创建一个cube设为预设体,作为蛇身的节点。在预设体上面添加BodyScript脚本。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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脚本。来控制蛇头并且创建链表。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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, 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);
    }    
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_25210959/article/details/51222848

延伸 · 阅读

精彩推荐
  • C#C#中使用XmlDocument类来创建和修改XML格式的数据文件

    C#中使用XmlDocument类来创建和修改XML格式的数据文件

    这篇文章主要介绍了C#中使用XmlDocument类来创建和修改XML格式的数据文件的方法,XmlDocument类被包含在.NET框架中,需要的朋友可以参考下...

    hzy37746062021-11-18
  • C#Unity实现简易日志输出功能

    Unity实现简易日志输出功能

    这篇文章主要为大家详细介绍了Unity实现简易日志输出功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Blinkedu7262022-08-05
  • C#Winform窗体圆角设计代码

    Winform窗体圆角设计代码

    这篇文章主要为大家详细介绍了Winform窗体圆角设计代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Jurieo11642021-12-16
  • C#C# OleDbDataReader快速数据读取方式(3种)

    C# OleDbDataReader快速数据读取方式(3种)

    这篇文章主要介绍了C# OleDbDataReader快速数据读取方式(3种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    DullFish8682022-08-11
  • C#C#执行系统命令的方法

    C#执行系统命令的方法

    这篇文章主要介绍了C#执行系统命令的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    森大科技5392022-08-16
  • C#C#枚举类型和结构体详解

    C#枚举类型和结构体详解

    这篇文章主要为大家详细介绍了C#枚举类型和结构体,,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    ☆☆☆☆☆11532021-12-06
  • C#C#设计模式编程中运用适配器模式结构实战演练

    C#设计模式编程中运用适配器模式结构实战演练

    这篇文章主要介绍了C#设计模式编程中运用适配器模式结构实战演练,并总结了适配器模式的优缺点和适用场景以及.NET框架中的应用,需要的朋友可以参考下...

    Libing5372021-11-12
  • C#Win10下C# DateTime出现星期几问题的解决方法

    Win10下C# DateTime出现星期几问题的解决方法

    这篇文章主要介绍了Win10下C# DateTime出现星期几问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    FallenDown8462022-03-02