【问题标题】:Randomly generate entity on 2D board avoiding collisions在 2D 板上随机生成实体,避免碰撞
【发布时间】:2016-02-27 01:55:47
【问题描述】:

我正在尝试制作蛇的克隆,我希望蛇的宽度为 5 像素左右,并且以 1 像素的增量移动。这意味着蛇与自身的距离可以超过一条蛇的宽度。当随机生成食物时,这会使事情变得复杂,这将是一个 5x5 像素的正方形。我需要/想要一种算法,将随机生成减少到不包含蛇的 5x5 方块。

部分问题在于,由于食物是 5x5,因此必须检查食物中每个像素的碰撞检测,以查看蛇是否部分在食物中。这给我留下了两个问题

问题

随机生成食物时如何减少搜索空间?

我考虑过做一个四叉树,将空间细分,直到分区小于我想要放置的食物。我还考虑过使用 awt 的 Rectangle,并确定食物的生成位置是否包含在构成播放器的矩形列表中。

我能想到的最佳解决方案是生成一个二维数组,其中包含所有可能的矩形,其左上角作为索引值。然后生成另一个二维数组,将每个像素映射到包含它的每个矩形,甚至只是起点,不需要整个矩形(每个 25 个)。然后在每次移动之后,更新头部和尾部的角图,标记它所占据的每个映射矩形。然后使用映射的角数组进行更简单的随机搜索(这会将其缩小到 1x1 像素的搜索空间)。

我要避免的主要问题是,当蛇占据 90% 的可玩空间时,任何基本的搜索-失败-重复系统都需要相当长的时间才能完成,最坏的情况是永远不会生成食物正方形。

【问题讨论】:

  • 最后的问题是......我认为您正在将有效解决方案与 A 解决方案混为一谈 - 明确这一点
  • @gpasch,你是什么意思?
  • 我可以说 Rectangles 是基本的解决方案,并且会给你一个正确的结果
  • 我添加了最后一句话来澄清我的推理。

标签: java generator 2d-games


【解决方案1】:

7 个月后,我有了解决方案。我还没有对此进行测试,因为我仍然需要实现它。

我处理蛇体的方式是使用由左上角 X、Y 坐标、宽度和高度定义的矩形列表。

我能做的是从整个板子开始创建一个 8 度的树,然后将每个蛇的部分放入树中,左上角偏移苹果的大小。放置零件后,我可以根据蛇的 4 个角、4 个边缘和中心将板分成 9 个部分。忽略包含蛇的板部件和尺寸

由于蛇的部分已经根据苹果的大小进行了调整,因此可以使用未占用的叶节点内的任何点来放置苹果

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2017-04-21
    • 2012-07-18
    • 2014-07-03
    • 2019-04-03
    • 2012-11-27
    • 1970-01-01
    • 2022-11-02
    • 2015-08-21
    相关资源
    最近更新 更多