版权声明:

  • 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客"(微信号:unitymaker)
  • 您可以自由转载,但必须加入完整的版权声明!

贪吃蛇与方块

  • 主要玩法:贪吃蛇吃食物,吃到食物后根据相应数值增加身体长度,如果贪吃蛇碰到方块后,根据方块的数值逐渐减少贪吃蛇身体长度,如果贪吃蛇长度为0时,游戏结束,场景中会有一下墙壁阻挡贪吃蛇的左右移动。
  • 角色操作:点击鼠标左键,并在屏幕上左右移动,可以控制贪吃蛇在场景中左右移动,贪吃蛇要吃食物,并且要躲避方块,或者消除方块。
  • 游戏计分规则:贪吃蛇要撞击方块(消除方块),方块上都有对应数值,贪吃蛇消除一个方块,根据方块上的数值增加分数。
  • 原版游戏画面:









实际游戏运行画面:





通过脚本固定窗口大小(此脚本可以挂在到任意的游戏对象上):

	void Start ()
{
Screen.SetResolution(768, 1024, false);
}

贪吃蛇生成:

    public void SpawnBodyParts()
{
firstPart = true; //Add the initial BodyParts
for (int i = 0; i < initialAmount; i++)
{
//Use invoke to avoid a weird bug where the snake goes down at the beginning.
Invoke("AddBodyPart", 0.1f);
}
}



贪吃蛇移动:

  • 主要就是检测鼠标是否在屏幕上,通过鼠标左键按下并左右移动来控制贪吃蛇的左右移动,并不用定位坐标,仅检测鼠标左右移动来控制贪吃蛇的左右移动。
  • 贪吃蛇可以会自动向前移动,碰到方块会停顿一下,方块消除后并且贪吃蛇不为0,则贪吃蛇继续向前移动,如果贪吃蛇为0时,游戏结束。
    float curSpeed = speed;
    
            //Always move the body Up
    if(BodyParts.Count > 0)
    BodyParts[0].Translate(Vector2.up * curSpeed * Time.smoothDeltaTime); //check if we are still on screen
    float maxX = Camera.main.orthographicSize * Screen.width / Screen.height; if (BodyParts.Count > 0)
    {
    if (BodyParts[0].position.x > maxX) //Right pos
    {
    BodyParts[0].position = new Vector3(maxX - 0.01f, BodyParts[0].position.y, BodyParts[0].position.z);
    }
    else if (BodyParts[0].position.x < -maxX) //Left pos
    {
    BodyParts[0].position = new Vector3(-maxX + 0.01f, BodyParts[0].position.y, BodyParts[0].position.z);
    }
    }

贪吃蛇吃食物:

  • 贪吃蛇吃到食物后,根据食物上的数值增加身体。

    public class FoodBehavior : MonoBehaviour
    { [Header("Snake Manager")]
    SnakeMovement SM; [Header("Food Amount")]
    public int foodAmount; // Use this for initialization
    void Start ()
    {
    SM = GameObject.FindGameObjectWithTag("SnakeManager").GetComponent<SnakeMovement>(); foodAmount = Random.Range(1, 10); transform.GetComponentInChildren<TextMesh>().text = "" + foodAmount;
    } // Update is called once per frame
    void Update ()
    {
    if (SM.transform.childCount > 0 && transform.position.y - SM.transform.GetChild(0).position.y < -10)
    Destroy(this.gameObject);
    } private void OnTriggerEnter2D(Collider2D collision)
    {
    Destroy(this.gameObject);
    }
    }

菜单系统:

计分:

```
void Start ()
{
//Initially, set the menu and Score is null SetMenu();
SCORE = 0; //Initialize some booleans
speedAdded = false; //Load the best score
BESTSCORE = PlayerPrefs.GetInt("BESTSCORE");
} ```

粒子系统:

-贪吃蛇碰撞方块就会触发粒子系统。

摄像机控制:

```
public class CameraMovement : MonoBehaviour
{ [Header("Snake Container")]
public Transform SnakeContainer; Vector3 initialCameraPos; // Use this for initialization
void Start ()
{ initialCameraPos = transform.position;
} // Update is called once per frame
void Update ()
{
if(SnakeContainer.childCount > 0)
transform.position = Vector3.Slerp(transform.position,
(initialCameraPos + new Vector3(0,SnakeContainer.GetChild(0).position.y - Camera.main.orthographicSize/2,0)),
0.1f);
}
}
```

Unity经典游戏教程之:贪吃蛇的更多相关文章

  1. Unity经典游戏教程之:雪人兄弟

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  2. Unity经典游戏教程之:是男人就下100层

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  3. Unity经典游戏教程之:冒险岛

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  4. Unity经典游戏教程之:合金弹头

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  5. Unity经典游戏教程之:弓之骑士

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  6. Unity经典游戏编程之:球球大作战

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  7. C#开发Unity游戏教程之Unity中方法的参数

    C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...

  8. C#开发Unity游戏教程之Scene视图与脚本的使用

    C#开发Unity游戏教程之Scene视图与脚本的使用 Unity中Scene视图的快捷操作 Scene视图是开发者开发游戏时,操作最频繁的视图.因为一旦一个游戏对象被添加到游戏的场景中,就需要首先使 ...

  9. [C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义

    每个游戏都有一个很明确的目的或者说游戏主题,贪吃蛇的目的很明确:蛇找到并吃掉食物.只有目的是很无聊的,算不上一个好游戏.所以设计者增加了创意:1. 吃掉食物后蛇会增长:2. 吃掉食物后分数会增加.有些 ...

随机推荐

  1. Codeforces Gym101246J:Buoys(三分搜索)

    http://codeforces.com/gym/101246/problem/J 题意:给出n个点坐标,要使这些点间距相同的话,就要移动这些点,问最少的需要的移动距离是多少,并输出移动后的坐标. ...

  2. scrapy基础知识之将item写入JSON文件:

    pipelines.py import json class xxPipeline(object):     def __init__(self):         self.filename=ope ...

  3. c# 图文添加文字斜水印

    项目中有个添加水印的需求,需要给图片铺满斜水印. 网上搜了半天全是添加在图片上.下.左.右的案例. 于是按照网上的某一段案例自己修改了一些代码. Bitmap bitmap = new Bitmap( ...

  4. c++学习书籍推荐《The C++ Programming Language第四版》下载

    百度云及其他网盘下载地址:点我 作者简介 Bjarne Stroustrup is the designer and original implementer of C++, the author o ...

  5. Linux安装httpd

    一.相关下载 1.httpd下载 官网下载:http://httpd.apache.org/ 或者 百度网盘链接: https://pan.baidu.com/s/1JPdU28tv6rePKJanB ...

  6. .Net Core 学习依赖注入自定义Service

    1. 定义一个服务,包含一个方法 public class TextService { public string Print(string m) { return m; } } 2. 写一个扩展方法 ...

  7. [Noi2002]Savage 题解

    [Noi2002]Savage 时间限制: 5 Sec  内存限制: 64 MB 题目描述 输入 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci ...

  8. JS代码实现复制功能

    本人没什么基础看了好久百度,不知道为什么在百度上问一个js实现copy功能会多出那么多代码出来,感觉废话一堆效果还没能达到需要复制 的效果. 然而在我看来,js复制代码 无非就那么几句罢了.原生cop ...

  9. 数据结构与算法---堆排序(Heap sort)

    堆排序基本介绍 1.堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序. 2.堆是具有以下性质的完全二叉树:每个 ...

  10. Kafka部署

    Kafka依赖Zookeeper,虽然Kafka自带zookeeper,但是建议单独部署,所以先部署Zookeeper. 测试环境 citus1,citus2,citus3三台机器.对主机名和ip在/ ...