类似贪吃蛇游戏,有很多条蛇同时在一个地图上,要求随机出现的食物不能一出现就被蛇给吃掉。 食物出现在蛇口的位置,毕竟体验不好。
也就是地图上有 N 多蛇( x,y),怎么保证食物出现的坐标,别和蛇重复,最好能保证一定距离。
有什么思路吗?谢谢各位大佬!
1
wasd6267016 2020-05-08 15:58:31 +08:00
为什么食物出现在蛇口的位置体验就不好? 这种小概率事件,作为玩家的 bonus 没什么不好吧
|
2
misdake 2020-05-08 15:58:41 +08:00 1
统计所有可以放置的坐标,需要的话可以加不同的权重,统计好之后,在总权重范围内随机一个数,看这个数落在哪个坐标的权重范围内。
|
3
wasd6267016 2020-05-08 16:00:08 +08:00
然后硬要做的话,你之前怎么生成的,生成之后价格判断呗,如果离某个蛇距离太近,就丢弃重新生成
最后考虑一下极端情况,地图快被塞满的时候,只能能生成在嘴边了 |
4
newtype0092 2020-05-08 16:02:57 +08:00
1.传统的贪吃蛇是有概率随机到面前的,并没有体验不好。
2.多次随机、限定集合内随机(将随机数映射到可出现的坐标集合) |
5
zhw2590582 2020-05-08 16:12:46 +08:00 1
不嫌麻烦的话,我觉得可以这样做,以蛇的矩形为界限,获得多个区域,取最大那个区域,然后在最大的区域内随机获取坐标:
![img]( https://i.loli.net/2020/05/08/Wk8vrwy1xgPTuN2.png) |
6
faceRollingKB 2020-05-08 16:13:11 +08:00
随机数生成的方式就只有伪随机,这你改不了,你能控制的是生成的随机数要不要丢弃,例如某条蛇到食物的距离小于某个值就丢弃
|
7
cokyhe OP 嗯,之前我是简单随机一个,不加任何的判断,尽量的减轻服务器的压力。
我一直怀疑有简单方法,可以随机出地图上比较空的一个位置坐标 |
8
em2046 2020-05-08 16:21:11 +08:00
提供一个想法,可能不是很合适
假设蛇口的位置为图中的一个个的点,对点做维诺图,在维诺图的边线上生成食物,可以使得食物位于 2 个点(蛇口)之间 https://www.npmjs.com/package/d3-voronoi 这里有维诺图的一些例子 |
9
cokyhe OP @zhw2590582 可以简单把蛇想象成一个点,随机出新的点,这个点别和现有的蛇重复
|
10
optional 2020-05-08 16:50:46 +08:00 via iPhone
随机出来,不符合丢掉, 重新生成,缓存 n 个随机数避免一直生成不到结果。同时,判断条件会随着空格数量减少而改变。
|
11
bruce0 2020-06-17 13:33:54 +08:00
我之前写贪吃蛇的时候,随机出 X,Y 判断一下 X,Y 有没有和蛇的身体重复,如果有,舍弃.当然,会有一些极端情况,比如地图要满了时
其实也不用考虑那么多,只要蛇到达一定长度,直接提示通关就好了 (0.0) |
12
levelworm 2020-07-08 08:19:52 +08:00 via Android
问题别复杂化,直接生成做判断然后重新生成就是了。
|