如果陈述怪异的行为

时间:2016-05-14 15:50:21

标签: if-statement smallbasic

我在课堂上玩Slither时被抓了。我的惩罚是用小基础编写游戏。

我现在有一排球,如果第一个球滚过小圆点。点将消失,你将获得一个点。用于检查大球是否位于小点上的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 个答案:

答案 0 :(得分:1)

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

我有两点建议:

  1. 使用全程制定。您目前正在检查X和Y. 单独和我想象这是导致你的问题
  2. 放弃距离有利于击中框。这需要一些非常的     Small Basic中的长且非常复杂的If语句,但它给了你     更多控制。
  3. 样品:

    '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
    

    如果这不能帮助澄清您的问题。您提供的详细信息和示例代码越多越好。