之前已经写过几篇用unity写的小游戏博客,感觉还不错,那么我就继续写下去。 今天写的贪吃蛇的初级版本。
贪吃蛇曾经是风靡全球的游戏,玩法就是一条蛇在吃食物,然后蛇会越吃越长,只要碰到自身,或者蛇头碰到墙体,那就算输。
首先我们需要做的是加上四面都是围墙。然后主角就是只有一条蛇。食物是随机出现的,并且我们必须要在随机食物的时候需要注意必须不是在蛇的身体上出现。
我们直接来看代码吧。
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());
}
上面的代码是蛇的移动。其实主要控制蛇头的方向而已,然后剩下的就是蛇的前一个位置都等于蛇的后一个位置。只要遍历一遍,蛇就会走起来。
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);
}
转向这个比较简单,其实就是用WSAD键控制蛇的上下左右方向移动 ,这里只需要控制到蛇头的下一步位置就行了。
下面是createFood具体的步骤
food = Instantiate(Resources.Load<Transform>("Food"), transform.parent);`
实例化食物
pointsSnake.Clear();
pointsSnake.Add(head.position);
for (int i = 0; i < bodys.Count; i++)
{
pointsSnake.Add(bodys[i].position);
}
pointsSnake是用于保存蛇的列表,因为每次都要更新,所以需要清空,然后把全部蛇的点保存起来
List<Vector2> pointsCanNewFood = points.Except(pointsSnake).ToList();
System.Random rd = new System.Random();
int index = rd.Next(pointsCanNewFood.Count);
food.position = pointsCanNewFood[index];
把除蛇身体的列表以外的点随机一遍,挑选其中一个点作为食物的新生点。
这个是一个比较基础简单的游戏实例,有兴趣学unity的话,可以加我q:2316773638,本人收徒。