if 语句奇怪的行为

if statements weird behavior

我在 class 期间被抓到玩 Slither。我的惩罚是用 small basic 编程游戏。

我现在有一排球,如果第一个球滚过小点。点将消失,您将获得一分。检查大球是否在小点上的 if 语句是这样的:

If (foodX[x] - SnakeHeadX) < precision And (foodX[x] - SnakeHeadX) > -precision And (foodY[x] - SnakeHeadY) < precision And (foodY[x] - SnakeHeadY) > -precision Then

这个 if 语句在 for loop

For x = 1 To 500

所以我得到了我的分数,但是当大球的 x 值和 y 值小于 20 时,我也得到了分数。不应该的东西。

场景是这样的(@是大球)

---------------------------------------------------------------------------------------------
|@                                           *
|
|                           *
|                                                                       *
|  *                                  *
|
|                                          *
---------------------------------------------------------------------------------------------

如你所见,大球没有碰到小点。但我确实获得了积分。 那为什么是真的呢?我该如何解决?

听起来您正在尝试管理命中框。两个形状相互作用的地方。此外,您的方法似乎是计算两个对象之间的距离,如果它低于阈值保持(您的精度变量),您将其视为命中。

我有两个建议:

  1. 使用全距离公式。您目前正在检查 X 和 Y 分开,我想象这是导致你的问题
  2. 放弃距离,选择命中框。这需要一些很 Small Basic 中的长且非常复杂的 If 语句,但它给了你 更多控制。

样本:

'Distance from centers
distance = Math.SquareRoot(Math.Power(foodX[x] - SnakeHeadX,2) + Math.Power(foodY[x] - SnakeHeadY),2)
If distance < precision Then
  'feed the snake
EndIf

'Hit boxes
If SnakeHeadX > foodX[x] And SnakeHeadX < foodX[x] And SnakeHeadY > foodY[x] And SnakeHeadY < foodY[x] Then 'top left corner of snake
  If 'top right coner of the snake
    ' Repeat for all four corners of the snake
  EndIf
endif

如果这不能帮助您澄清问题。越详细越好,示例代码越多越好。