用于计算目标最大子弹路径的算法。2 ricochets
对不起,标题很抱歉,但我没有更好的措辞... 因此,任天堂在Wii上开发了一款名为WiiPlay的出色游戏(是!)。里面有9个迷你游戏,而我最喜欢的一个叫做《坦克》!。这是关于销毁COM敌方坦克而又不致使自己遭到破坏的事情。这是一个关卡的屏幕截图: 摧毁坦克的一种方法是发射子弹。有一个石灰绿色的敌方坦克,可以发射高速子弹,两次弹跳(对着墙壁和方块)。您会看到,如果玩家的坦克停在现在的位置,如何立即将其摧毁,因为位于中央的石灰坦克可以按照我在图像上绘制的绿色路径发射子弹。 作为一名业余程序员,我一直想知道石灰罐如何确定朝哪个方向射击以击打玩家罐。 我自己考虑过,但是没有提出任何可能的算法。如果他们启发了某人,我将解释我的结论。为了简单起见,我假设一堵墙是子弹可以弹到的任何表面。因此,一个孤立的矩形块形成了四个墙。 我得出的结论是,子弹跳线始终位于平行四边形的一侧或变成平行四边形的相反顶点的两个点。它瞄准的射击敌方坦克和玩家坦克不一定是其他两个顶点,而是肯定位于与平行四边形的四个边中的任何一个共线的直线上。这是形成平行四边形的4种可能方式的说明: HOR-VER意味着子弹首先撞击水平的墙壁,然后撞击垂直的墙壁。 然后我被卡住了。我曾考虑过绕一条连接敌方坦克和玩家坦克的地图绕线移动,以查看它是否与任何墙面的任何两个击打形成平行四边形,但这并不总是可行的,因为敌方坦克和玩家坦克不是必须与平行四边形的顶点重合。 另外,我不确定算法的一般流程。该算法是否采用以下两种结构中的任何一种,或者我对这两种结构都错了? 不断找出可能的路径,并始终将其标记为最佳路径(可以是最短,最模糊,最不可避免的路径,或者是基于多个标准的组合加权评估),而忽略了其余的路径。毕竟,剩下的一个是最好的选择。 首先确定首先由子弹到达的所有墙壁(子弹不需要弹跳到任何其他墙壁即可到达这些墙壁中的每一个),然后确定这些墙壁中的每个墙壁上的所有可到达范围(有时不可能到达目标上的遥远点)如果您附近还有一堵墙,则没有弹跳的墙),然后再次确定所有带有弹跳的可到达墙,以及在这些墙上可到达的所有范围。这4个过程可以通过类似于光线跟踪的方法来完成。在每个过程中,如果玩家的坦克被任何射线击中,请根据该射线找出子弹路径。 我认为该算法很难弄清楚,原因是: 子弹可以向任何方向发射;和 在数学上,每堵墙上都有无数个点,在线上有无数个点。 但是任天堂的人还是成功了,所以...有人有主意吗?