贪吃蛇游戏里,怎么设置食物位置?

2020-05-08 15:50:27 +08:00
 cokyhe

类似贪吃蛇游戏,有很多条蛇同时在一个地图上,要求随机出现的食物不能一出现就被蛇给吃掉。 食物出现在蛇口的位置,毕竟体验不好。

也就是地图上有 N 多蛇( x,y),怎么保证食物出现的坐标,别和蛇重复,最好能保证一定距离。

有什么思路吗?谢谢各位大佬!

2780 次点击
所在节点    游戏开发
12 条回复
wasd6267016
2020-05-08 15:58:31 +08:00
为什么食物出现在蛇口的位置体验就不好? 这种小概率事件,作为玩家的 bonus 没什么不好吧
misdake
2020-05-08 15:58:41 +08:00
统计所有可以放置的坐标,需要的话可以加不同的权重,统计好之后,在总权重范围内随机一个数,看这个数落在哪个坐标的权重范围内。
wasd6267016
2020-05-08 16:00:08 +08:00
然后硬要做的话,你之前怎么生成的,生成之后价格判断呗,如果离某个蛇距离太近,就丢弃重新生成

最后考虑一下极端情况,地图快被塞满的时候,只能能生成在嘴边了
newtype0092
2020-05-08 16:02:57 +08:00
1.传统的贪吃蛇是有概率随机到面前的,并没有体验不好。
2.多次随机、限定集合内随机(将随机数映射到可出现的坐标集合)
zhw2590582
2020-05-08 16:12:46 +08:00
不嫌麻烦的话,我觉得可以这样做,以蛇的矩形为界限,获得多个区域,取最大那个区域,然后在最大的区域内随机获取坐标:

![img]( https://i.loli.net/2020/05/08/Wk8vrwy1xgPTuN2.png)
faceRollingKB
2020-05-08 16:13:11 +08:00
随机数生成的方式就只有伪随机,这你改不了,你能控制的是生成的随机数要不要丢弃,例如某条蛇到食物的距离小于某个值就丢弃
cokyhe
2020-05-08 16:20:58 +08:00
嗯,之前我是简单随机一个,不加任何的判断,尽量的减轻服务器的压力。
我一直怀疑有简单方法,可以随机出地图上比较空的一个位置坐标
em2046
2020-05-08 16:21:11 +08:00
提供一个想法,可能不是很合适
假设蛇口的位置为图中的一个个的点,对点做维诺图,在维诺图的边线上生成食物,可以使得食物位于 2 个点(蛇口)之间
https://www.npmjs.com/package/d3-voronoi 这里有维诺图的一些例子
cokyhe
2020-05-08 16:23:13 +08:00
@zhw2590582 可以简单把蛇想象成一个点,随机出新的点,这个点别和现有的蛇重复
optional
2020-05-08 16:50:46 +08:00
随机出来,不符合丢掉, 重新生成,缓存 n 个随机数避免一直生成不到结果。同时,判断条件会随着空格数量减少而改变。
bruce0
2020-06-17 13:33:54 +08:00
我之前写贪吃蛇的时候,随机出 X,Y 判断一下 X,Y 有没有和蛇的身体重复,如果有,舍弃.当然,会有一些极端情况,比如地图要满了时

其实也不用考虑那么多,只要蛇到达一定长度,直接提示通关就好了 (0.0)
levelworm
2020-07-08 08:19:52 +08:00
问题别复杂化,直接生成做判断然后重新生成就是了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/669673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX