我正在进行一场乒乓球比赛,我希望球能够每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次点击一次加速吗?
答案 0 :(得分:11)
分区的定义使得以下内容始终为真
n = q × d + r
,其中
(这适用于正值和负值;如果 n 且 d 具有相同的符号,则 q 为正值,否则为 q 。 > r 被定义为始终为正。)
在Python中,n/d == q
和n % d == r
。如果n
为0,那么q
也必须为0,在这种情况下,r
也必须为0 - 所有这些都与d
的值无关。
(偏离主题,但请注意,这也解决了除以0的问题:对于非零 d , q 和 r 是唯一确定的;对于 d = 0, q 的任何值将满足 r = n 的等式
答案 1 :(得分:4)
为什么0%5会返回0?
由于:
零除以5为零,保持为零。
0 % 5 = 0
12 % 5 = 2
答案 2 :(得分:1)
a%n与 - (n * int(a / n))相同。 0/5等于0,因为5进入0,0次。 0 * 5为0. 0减0为0。
答案 3 :(得分:1)
尝试self.num_hits / 5 == 0:
答案 4 :(得分:1)
number_1%number_2 =>是将number_1除以number_2
时的余数在0%any_number情况下始终为0。
答案 5 :(得分: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
...
答案 6 :(得分:1)
我认为这是在小学教的,但这有一个简单的答案。
%给出了除法问题的剩余部分。如果你有(例如)6 % 5
,你会得到1
,因为5次进入6次,5 * 1 == 5
。 6-5 == 1
,这就是答案。这是0%5
,5次(令人震惊)零次。 5*0 == 0
和0-0 == 0
。因此,