[Top Page][Edit][Discussion][Edit History][All Pages][Recent Changes][->Japanese]

HSPコンテスト:ショートプログラム:数学・物理編:運動


    物体の運動は、座標と、速度で表現します。

    座標を(x,y)、速度を(speedX,speedY)とすると、基本的なメインループは以下のようになります。

    *l_loop
            await 33; まずウェイト
            redraw 1: redraw 0; 画面を更新、かつ次のループまで更新を抑制。
            
            color 255, 255, 255: boxf; 背景を描画。
    
            color 0, 0, 0: boxf x/10, y/10, x/10+2, y/10+2; 物体を描画。
    
            x + speedX: y + speedY; 物体を次の位置へ移動。
    
            stick key, 15   ; ★物体の速度を次の速度に加速。
            if key&1: speedX--
            if key&2: speedY--
            if key&4: speedX++
            if key&8: speedY++
    
    goto *l_loop
    

    boxf で x、y を 10 で割っているのは、HSP では小数を使えないからです。 あらかじめ 10 倍した数値で計算しておき、最後に描画するときに 10 で割っています。 他の場所でも、描画部分で謎の割り算が出てきたらそれだと思って間違いないです。

    どんなに複雑な動きも★の部分を書き換えるだけで実現できます。

    たとえばこう。

            x = 1000
            y = 1300; 1500 等に変更しても面白い。
    *l_loop
            await 33; まずウェイト
            redraw 1: redraw 0; 画面を更新、かつ次のループまで更新を抑制。
            
            ;color 255, 255, 255: boxf; 背景を描画しない。
    
            color 0, 0, 0: boxf x/10, y/10, x/10+2, y/10+2; 物体を描画。
    
            x + speedX: y + speedY; 物体を次の位置へ移動。
    
            if y<2000: speedY++     ; ★物体の速度を次の速度に加速。
            if y>2000: speedY--
            if x<3000: speedX++
            if x>3000: speedX--
    
    goto *l_loop