3

Scratch でパドル ボール ゲームを作成していますが (楽しみのため)、スコアリングで問題が発生しています。私が既に書いたコードを見たい場合、ゲームへのリンクはhttps://scratch.mit.edu/projects/66541388/です。何らかの理由で、ゲームがプレイされているときに、スコア変数が実際には常に 1 変化するとは限りません。テストするたびに異なる数値で変化します。問題が何であるか、またはそれを修正する方法についてのアイデアはありますか?

コードのコアは次のとおりです。

when green flag clicked
set [Score v] to [0]
set x to (0)
set y to (0)
point in direction (pick random (-90) to (90))
forever
    if <(y position) < [-146]> then
        broadcast [gameOver v]
        stop [all v]
    end
    if <touching [Paddle v]?> then
        change [color v] effect by (pick random (1) to (1000))
        change [Score v] by (1)
        point in direction (pick random (-90) to (90))
    end
    move (10) steps
    if on edge, bounce
end
4

6 に答える 6

3

どちらの答えも正しいですが、次のように、スコアを別のコード ブロックに入れるだけですwait until <not<touching [Paddle v]>>

when green flag clicked
forever
    if <touching [Paddle v]> {
        change [color v] effect by (pick random (1) to (1000))
        change [Score v] by (1)
        wait until <not<touching [Paddle v]>>
于 2016-08-20T00:32:02.690 に答える
0

urnotsam の答えは技術的には正しいですが、その背後にある理由と別の解決策を示したいと思います。

問題は、ペンギンが正方形ではないという事実にあります。パドルを叩くとランダムな方向に向きを変え、10歩動きます。さて、最初は横向きで、ランダムな方向もほぼ横向きだった場合、その 10 歩で脱出できます。どちらも直立の場合も同様です。しかし、横向きに始めて真っ直ぐ上に終わると、以前よりもラインの下になり、10 歩移動した後でさえ、その一部はまだパドルに触れています。10 歩か 20 歩の有利なスタートを切ることで、得点を台無しにせずに逃げることができるように思えます。

if <touching [Paddle v]?> then
    change [color v] effect by (pick random (1) to (1000))
    change [Score v] by (1)
    point in direction (pick random (-90) to (90))
    move (20) steps
end
于 2015-06-16T19:12:03.717 に答える
-1

スコアを 1 変更すると、パドルに触れているために数回カウントされる可能性があるため、ポイントの直後にランダム方向ブロックの待機ブロックを追加する必要があります。次のようになります。

    if <touching [Paddle v]?> then
    change [color v] effect by (pick random (1) to (1000))
    change [Score v] by (1)
    point in direction (pick random (-90) to (90))
    wait [0.1] sec
end
于 2016-09-09T11:23:31.850 に答える