-3

我现在正在打乒乓球,我希望球每击打 5 次就加速一次,但是当我跑动时,球只是开始向起始方向加速。

它在没有加速球的情况下运行良好,所以问题不是以前的代码。

当试图实现这一点时,我在我的 Ball 类中创建了一个变量,self.num_hits并将其初始设置为 0。然后在我的游戏循环中,每次球碰撞时,我都会增加ball.num_hits并反转它的 x_speed。

collide_list = pygame.sprite.spritecollide(ball, players, False)
if collide_list != []:
    ball.x_speed *= -1
    hit.play()
    ball.num_hits += 1

在 Ball() 类中:

if self.num_hits % 5 == 0:
        if self.x_speed > 0:
            self.x_speed += 2
        else:
            self.x_speed -= 2

但这使球的速度偏离了它的起始速度,所以我检查了self.num_hits % 5返回的内容,它总是返回 0。我一直认为0 % number = number,所以我的问题是为什么 0 % 5 返回 0?如果我无法解决 0 % 5 的问题,还有其他方法可以让球每 5 次击球加速一次吗?

4

7 回答 7

11

定义除法以使以下始终为真

n = q × d + r

在哪里

  • n是分子(或被除数),
  • d != 0 是分母(或除数),
  • q是商,并且
  • r > 0 是余数。

(这适用于正值和负值;如果nd具有相同的符号,则q为正,否则为负。r被定义为始终为正。)

在 Python 中,n/d == qn % d == r. 如果n为 0,则q也必须为 0,在这种情况下也r必须为 0——所有这些都与 的值无关d

(题外话,但请注意,这也解决了除以 0 的问题:对于非零dqr是唯一确定的;对于d = 0,任何q值都将满足r = n的方程。

于 2013-03-24T02:18:18.373 回答
4

为什么 0 % 5 返回 0?

因为:

零除以五是零,仍然是零。

0 % 5 = 0
12 % 5 = 2
于 2013-03-24T02:05:49.623 回答
1

a % n 与 a - (n * int(a/n)) 相同。0/5 等于 0,因为 5 进入 0, 0 次。0 * 5 为 0。0 减 0 为 0。

于 2013-03-24T02:06:35.377 回答
1

如果 self.num_hits / 5 == 0 试试:

于 2013-03-24T02:06:55.067 回答
1

number_1 % number_2 =>是 number_1 除以 number_2 的余数

在 0 % any_number 情况下始终为 0。

于 2013-03-24T02:09:36.517 回答
1

0 % 5 = 0
1 % 5 = 1
2 % 5 = 2
3 % 5 = 3
4 % 5 = 4
5 % 5 = 0
6 % 5 = 1
7 % 5 = 2
...

于 2013-03-24T02:15:54.683 回答
1

我认为这是在小学教的,但这有一个简单的答案。% 为您提供除法问题的其余部分。如果你有(例如)6 % 5你会得到1,因为 5 进入 6 一次,并且5 * 1 == 5. 6-5 == 1,这就是答案。这是0%5和 5 进入 0(令人震惊)零次。5*0 == 0, 和0-0 == 0. 所以,

于 2013-03-24T03:02:35.117 回答