-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 による除算の問題も捉えていることに注意してください。非ゼロdの場合、qおよびrは一意に決定されます。d = 0 の場合、 qの任意の値がr = nの方程式を満たします。

于 2013-03-24T02:18:18.373 に答える
4

0%5が0を返すのはなぜですか?

なぜなら:

ゼロを5で割るとゼロになり、ゼロのままになります。

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

%nは-(n * int(a / n))と同じです。5は0に0回入るため、0/5は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

これは小学校で教えられていると思いますが、これには簡単な答えがあります。% は、割り算の問題の残りを示します。たとえば、5 が 6 に 1 回入るため、6 % 5が得られます。、これが答えです。ここでは、5 が 0 に (衝撃的に) 0 回入ります。、および。したがって、15 * 1 == 56-5 == 10%55*0 == 00-0 == 0

于 2013-03-24T03:02:35.117 に答える