时间:2021-05-19
本文实例为大家分享了unity实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下
首先创建一个头部,编写脚本利用WASD控制头部的移动。
Vector3 up=new Vector3(0,1,0);Vector3 down=new Vector3(0,-1,0);Vector3 left=new Vector3(-1,0,0);Vector3 right=new Vector3(1,0,0);Vector3 now;//头部实际前进方向 float timer=0f; float timerGap=0.1f; void Start () { now = up; } void Update () { if (now!=up&&now!=down&&Input.GetKey (KeyCode.W)) { now = up; } if (now!=up&&now!=down&&Input.GetKey (KeyCode.S)) { now = down; } if (now!=left&&now!=right&&Input.GetKey (KeyCode.A)) { now=left; } if (now!=left&&now!=right&&Input.GetKey (KeyCode.D)) { now = right; } timer += Time.deltaTime; if (timer > timerGap) { //每隔0.1s向当前方向移动一个单位(0.5为头部大小)。 timer = 0; transform.position = 0.5f * now + transform.position; } }然后就是创建初始身体,实现身体跟随头部。采用的方法是将身体放进一个数组,然后下标0的身体移动到头部之前的位置,然后下标 i 的身体移动到 i-1 的position。
创建初始身体,并放入数组。
public GameObject body;//身体预设体List<GameObject> snakeBody = new List<GameObject>(); void Awake() { for (int i = 0; i < 3; ++i) { GameObject newbodynext=Instantiate (body, transform.position-(i+1)*new Vector3(0,0.5f,0), Quaternion.identity)as GameObject; snakeBody.Add (newbodynext); } }实现跟随
void Update () { if (now!=up&&now!=down&&Input.GetKey (KeyCode.W)) { now = up; } if (now!=up&&now!=down&&Input.GetKey (KeyCode.S)) { now = down; } if (now!=left&&now!=right&&Input.GetKey (KeyCode.A)) { now=left; } if (now!=left&&now!=right&&Input.GetKey (KeyCode.D)) { now = right; } timer += Time.deltaTime; if (timer > timerGap) { Vector3 tmpPosition = transform.position;//记录头部变化前的位置 List<Vector3> tmpList = new List<Vector3> ();//记录身体变化前的位置 for (int i = 0; i < snakeBody.Count; ++i) { tmpList.Add (snakeBody [i].transform.position); } timer = 0; transform.position = 0.5f * now + transform.position; snakeBody [0].transform.position = tmpPosition;//将0移到头部之前的位置 //依次前移身体的位置 for (int i = 1; i < snakeBody.Count; ++i) { snakeBody [i].transform.position = tmpList [i - 1]; } }}初始蛇创建好后,就开始添加食物,和增长蛇的身体。还有检测游戏失败,即撞到身体或者边界,采用事件触发检测完成。
创建食物
public GameObject foodPrefab;//食物预设体void Start () { now = up; createFood (); } void createFood() { float x = Random.Range(-6.5f, 6.5f); float y = Random.Range(-4.5f, 4.5f); Instantiate(foodPrefab,new Vector3(x,y,0f),Quaternion.identity); }触发检测
void OnTriggerEnter(Collider other) { //这个other就是被碰撞体 if (other.gameObject.tag.Equals("Food")) { Destroy(other.gameObject); GameObject newbodynext = Instantiate (body, snakeBody[snakeBody.Count-1].transform.position, Quaternion.identity)as GameObject; snakeBody.Add (newbodynext);//增加蛇的身体 createFood(); } else if(other.gameObject.tag.Equals("Body")) { SceneManager.LoadScene("Snake", LoadSceneMode.Single);//重新开始 } } void OnTriggerExit(Collider other) { if (other.gameObject.tag.Equals("Boundary")) SceneManager.LoadScene("Snake", LoadSceneMode.Single); }完整代码
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;public class HeadMove : MonoBehaviour { public GameObject body; public GameObject foodPrefab; Vector3 up=new Vector3(0,1,0); Vector3 down=new Vector3(0,-1,0); Vector3 left=new Vector3(-1,0,0); Vector3 right=new Vector3(1,0,0); Vector3 now; float timer=0f; float timerGap=0.1f; List<GameObject> snakeBody = new List<GameObject>(); // Use this for initialization void Awake() { for (int i = 0; i < 3; ++i) { GameObject newbodynext=Instantiate (body, transform.position-(i+1)*new Vector3(0,0.5f,0),Quaternion.identity)as GameObject; snakeBody.Add (newbodynext); } } void Start () { now = up; createFood (); } void createFood() { float x = Random.Range(-6.5f, 6.5f); float y = Random.Range(-4.5f, 4.5f); Instantiate(foodPrefab,new Vector3(x,y,0f),Quaternion.identity); } // Update is called once per frame void Update () { if (now!=up&&now!=down&&Input.GetKey (KeyCode.W)) { now = up; } if (now!=up&&now!=down&&Input.GetKey (KeyCode.S)) { now = down; } if (now!=left&&now!=right&&Input.GetKey (KeyCode.A)) { now=left; } if (now!=left&&now!=right&&Input.GetKey (KeyCode.D)) { now = right; } timer += Time.deltaTime; if (timer > timerGap) { Vector3 tmpPosition = transform.position; List<Vector3> tmpList = new List<Vector3> (); for (int i = 0; i < snakeBody.Count; ++i) { tmpList.Add (snakeBody [i].transform.position); } timer = 0; transform.position = 0.5f * now + transform.position; snakeBody [0].transform.position = tmpPosition; for (int i = 1; i < snakeBody.Count; ++i) { snakeBody [i].transform.position = tmpList [i - 1]; } } } void OnTriggerEnter(Collider other) { //这个other就是被碰撞体 if (other.gameObject.tag.Equals("Food")) { Destroy(other.gameObject); GameObject newbodynext = Instantiate (body,snakeBody[snakeBody.Count-1].transform.position,Quaternion.identity)as GameObject; snakeBody.Add (newbodynext); createFood(); } //由于身体和头部一开始就接触,所以将身体的碰撞半径减小到0.4 else if(other.gameObject.tag.Equals("Body")) { SceneManager.LoadScene("Snake", LoadSceneMode.Single); } } void OnTriggerExit(Collider other) { if (other.gameObject.tag.Equals("Boundary")) SceneManager.LoadScene("Snake", LoadSceneMode.Single); }}将该脚本挂载在头部对象上然后添加身体和食物预设体,再添加边界即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
javascript实现简单的贪吃蛇游戏,功能很简单,代码也很实用,就不多废话了,小伙伴们参考注释吧。贪吃蛇varmap;//地图varsnake;//蛇var
游戏操作说明通过方向键控制贪吃蛇上下左右移动。贪吃蛇吃到食物之后会变长一个长度。游戏具体实现游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是
本文实例讲述了原生js实现的贪吃蛇网页版游戏。分享给大家供大家参考。具体实现方法如下:原生js写的贪吃蛇网页版游戏Star={init:function(){v
本文实例为大家分享了Javascript实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下前言原生JavaScript实现贪吃蛇小游戏GitHub地址直接复制
本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下本文稍作改动,修复一些bug,原文链接:python实现贪吃蛇游戏#!/usr