Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在2D板上随机生成实体,避免碰撞_Java_Generator_2d Games - Fatal编程技术网

Java 在2D板上随机生成实体,避免碰撞

Java 在2D板上随机生成实体,避免碰撞,java,generator,2d-games,Java,Generator,2d Games,我正在尝试克隆一条蛇,我希望蛇的宽度为5像素左右,并且以1像素的增量移动。这意味着蛇与自身的距离可以超过一条蛇的宽度。当随机生成一个5x5像素的正方形食物时,这会使事情变得复杂。我需要/想要一个算法,将随机生成的方块减少到5x5个,不包含蛇的碎片 部分问题在于,由于食物是5x5,因此必须检查食物内每个像素的碰撞检测,以查看蛇是否部分在食物内。这给我留下了两个问题 问题 随机生成食物时,如何减少搜索空间 我考虑过做一个四叉树,将空间细分,直到分割的部分小于我想要放置的食物。我还考虑过使用awt的矩

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

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

问题

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

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

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


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

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

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


我能做的是从整个电路板开始创建一棵8度的树,然后将每个蛇形部分放入树中,左上角偏移苹果的大小。当放置一个部件时,我可以根据蛇的4个角、4个边和中心将板分割成9个部分。忽略包含蛇的板件,以及具有尺寸的板件,结论问题是。。。我认为你把有效的解决方案和解决方案混为一谈了,明白吗up@gpasch,你是什么意思?我可以说矩形是基本的解决方案,会给你一个正确的结果。我加了最后一句话,澄清了我的推理。