您的当前位置:首页正文

Unity小游戏(二)——贪吃蛇

来源:九壹网

一个极其简陋的贪吃蛇,就不从新建项目一一赘述了,将完全:

1、首先说一下设想:

背景框,四边围墙,碰撞死亡,

初始状态,一个蛇头一个蛇身,WSAD控制上下左右,

随机出现食物,蛇头吃掉食物后,增长,食物的随机生成要避开蛇头蛇身

2、移动

协程控制,蛇身用列表存储,每次蛇头向前移动一格,第一节蛇身移动到蛇头位置,后面一次移动到上一节蛇身位置(此处要倒序移动,就是最后一节(蛇尾)先动)。

private IEnumerator Move()
{
    for (int i = bodys.Count; i > 1; i--)
    {
        bodys[i].position = bodys[i - 1].position;
    }
    bodys[0].transform.position = head.position;
    head.Translate(direction * sizeGride);
    isRotating = false;
    yield return new WaitForSeconds(1f/ speed);
    StartCoroutine(Move());
}

3、转向

改变下一次蛇头移动的方向,只能转90度,此处要注意,不可直接进行两次转向,所以以一个bool值限定了一下。

private void Rotate()
{
    if (isRotating)
        return;

    if (Input.GetKeyDown(KeyCode.W) && direction.x != 0)
    {
        SetDirection(Vector3.up);
    }
    else if (Input.GetKeyDown(KeyCode.S) && direction.x != 0)
    {
        SetDirection(-Vector3.up);
    }
    else if (Input.GetKeyDown(KeyCode.A) && direction.y != 0)
    {
        SetDirection(-Vector3.right);
    }
    else if (Input.GetKeyDown(KeyCode.D) && direction.y != 0)
    {
        SetDirection(Vector3.right);
    }
}
private void SetDirection(Vector3 dir)
{
    isRotating = true;
    direction = dir;
}

4、食物生成

采用坐标地图,生成食物时,避免生成在蛇身上

/// <summary>
/// 生成食物
/// </summary>
public void NewFood()
{
    food = Instantiate(Resources.Load<Transform>("Food"), transform.parent);
    food.name = "Food";

    pointsSnake.Clear();
    pointsSnake.Add(head.position);
    for (int i = 0; i < bodys.Count; i++)
    {
        pointsSnake.Add(bodys[i].position);
    }

    List<Vector2> pointsCanNewFood = points.Except(pointsSnake).ToList();

    System.Random rd = new System.Random();
    int index = rd.Next(pointsCanNewFood.Count);
    food.position = pointsCanNewFood[index];
}

5、蛇身生长

/// <summary>
/// 蛇生长
/// </summary>
public void AddBody()
{
    Transform newBody = Instantiate(bodys[1], transform);
    newBody.name = "Body";
    newBody.position = oldPosition;
    bodys.Add(newBody);
}

目前死亡判断还有问题。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top