数学 - 困难的Pong AI

Sat*_*own 2 math algebra

我正在为我的Pong克隆编写一些困难,我正在编写以熟悉SFML和Xcode.对于最难的困难,我想创建一个AI级别,计算机可以立即知道球的位置.所以,如果我有xVelocity和yVelocity,我可以有效地获得斜率.问题是,每次球击中顶部或底部时,yVelocity都会反转.所以基本上,我有一个代数斜率问题,每次击中墙壁时都会出现相反的问题.

现在,我的屏幕高度为600像素,顶部和底部的命中检测为5像素,空间为590像素.

我的问题:是否存在包含所有这些因素的公式.比如说,球在x = 30和y = 240时被击中,斜率为1.45,我想得到当x = 770时它将击中的y值.

如果我可以简化这个,请告诉我.再一次,我知道如何通过计算4次如果球反弹4次来解决这个问题,但我想知道是否有办法在边界处进行y速度切换.

谢谢!

Gho*_*ost 7

编辑:刚读取你的屏幕实际上是590像素高,这改变了数学而不是公式

计算球击中忽略碰撞的位置.如果(0,0)是你竞技场的左上角,取y = mx + b,其中b是你的y偏移(球在y = 240时被击中),m是你的斜率(1.45)

现在我们想知道当x 770-30进一步放置时y将相等,所以算数:

y = (1.45)(740) + (240) = 1313
Run Code Online (Sandbox Code Playgroud)

这显然超出了你的范围.它会反映出来

y/height = floor(1313/590) = 2 times
Run Code Online (Sandbox Code Playgroud)

意思是坡度仍然向上移动,它将会达到

y mod height = 1313 mod 590 or 133
Run Code Online (Sandbox Code Playgroud)

如果它反映了奇数次,(floor(y/2) %2 == 1)那么你将不得不使用以下来计算它

MAX_HEIGHT - (y mod height) = 590 - (1903 mod 590) = 590 - 133 = 457
Run Code Online (Sandbox Code Playgroud)

您可以通过将多个590高度字段堆叠在一起来形象化,其中一个是您开始的位置:

--------------------------------------------------------------------
|
|
|
|                                                 ball ends up here (*)
|                                                                *
|                                                            *
|                                                        *
------------------------(reflection  two)------------*---------------
|                                                *
|                                            *
|                                        *
|                                    *
|                                *
|                            *
|                        *
---------------------*---------(reflection 1)------------------------------
|                *
|            *
|        *
|    *
|*ball hit here
| 
|
-----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

同样的想法应该适用于下行.计算位置,计算出反射次数,使用mod或590 - mod来确定它应该在哪里.