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

本文详细介绍了一个简陋版贪吃蛇游戏的实现过程,包括游戏背景设定、蛇的移动与转向逻辑、食物生成机制及蛇身增长等功能,探讨了游戏开发中的关键技术和挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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);
}

目前死亡判断还有问题。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值