移动设置

在蛇头蓝图中添加自定义事件,并添加方向的参数,

在玩家控制器中调用,在调用之前,先通过getactorofclass获取蛇头。

设置wsad键盘事件传入控制方向的字符串。

去蛇头蓝图中接收数据并通过Switch控制设置方法向量,与蛇头的位置想加,得到下一个位置,并设置过去。这样实现了按一次按键就移动一个单位的作用。

以下实现蛇头的自行移动。

采用以事件设置定时器这个节点,勾选looping(循环)他会以设定的时间time,重复执行event事件即更新位置事件。

生成身体部分,

思路是在事件开始运行的时候,采用forloop循环在身体某个方向的一定偏移量上的位置生成身体部件。

身体应该跟随蛇头移动,

新建一个身体组的数组,然后将生成的身体添加到这个身体组里面,于是就获得了由所有身体组成的数组。

先在蛇头移动之前,记录下蛇头位置,这个位置是需要赋给第一节身体的。

通过forloop循环更新身体位置。

效果如下

死亡判定

思路是如果蛇头下一个去的位置与身体的位置重合,就判定死亡。

创建一个存储身体位置信息的向量数组,并在位置更新循环完成后,存储位置信息。存储之前,需要清除上一次的位置信息。

然后在蛇头位置更新前进行判定是否撞到了身体。通过contains判定节点,判定蛇头下一个需要移动的位置是否含在身体位置的数组里,如果包含,就暂时打印撞击,如果不包含,就继续执行后面的流程。

吃肉逻辑

在每一次移动蛇头之后,判定一下当蛇头的位置和肉的位置一致时,就认为吃到了肉,将增加尾巴设为真,表示可以增加尾巴,将肉销毁,然后将可以生成肉设为真,表示肉吃掉了,可以生成下一块肉了。

增加身体流程。

通过一个布尔变量控制是否增加身体。增加身体就是在每次位置更新循环结束之后判定,如果可以增加就在最后面增加一个球,并将新增加的球加入身体组内。同时设置增加身体的判定为假,即不可以增加身体,直至下一次吃到了肉,再将其设为真,然后增加身体。

接下来是贪吃蛇吃肉和长身体的逻辑。

在事件运行开始时,通过两个foreachloop循环,记录所有位置,并设置成数组。

然后从这个位置数组中移除蛇头和身子所在的位置,从剩余的位置中随机选择一个肉生成的位置。在这之前需要先判断,可以生成肉了才能进行加肉操作,否则就继续运行。加肉之后将可以生成肉的判断设置为假。

最终效果