V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
cokyhe
V2EX  ›  游戏开发

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

  •  
  •   cokyhe · 2020-05-08 15:50:27 +08:00 · 2986 次点击
    这是一个创建于 1666 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    其实也不用考虑那么多,只要蛇到达一定长度,直接提示通关就好了 (0.0)
    levelworm
        12
    levelworm  
       2020-07-08 08:19:52 +08:00 via Android
    问题别复杂化,直接生成做判断然后重新生成就是了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5560 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:39 · PVG 16:39 · LAX 00:39 · JFK 03:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.