REALbasic かってに連載します(第10回)


 アクションゲームの基本となりそうなルーチンです。REALbasicでの「Sprite」は、まだ素直に云うことを聞いてくれませんので、画面表示には不満が残ります。しかしながら、REALbasicは、いろいろな不満と不安定さを補っても余りある、マックで使えるBasic環境です。プログラムでサポートしていないところはアイデアで ............。これがプログラミングの楽しさです。できればソースコードをはじめ見ずに実行してみて、どんなプログラムを書いているのか謎解きをしてみて下さい。相変わらずのスパゲッティプログラムで申し訳ありません。(ついにゲームのサンプルに goto 文が登場しました。) 
 第10回 - ボールと壁との衝突ルーチン -

 微分方程式を使って、ボールの投げ上運動を追いかけてみます。壁との衝突も表現してみましょう。
     
  1.   - 準備 (前回を参考に)-
     
    1.  ボタン3つと、CanvasとRectangleを用意します(Rectangleは無くてもかまいません)。
    2.  後で、Canvasの位置を変更しても、プログラムを変更しなくてすむように、Window1.Open: にcanvas1の移動にいつでもrectangle1を追従させるコードを書いています。

  2.   - メインは、「発射」ボタンです。 -

    Window1.PushButton1.Action:
    Sub Action()
      dim dt as double
      dim ex as double
      dim ey , ytop , xleft as double
      dim ybottom , xright as double
      dim cw,ch as integer
      cw=canvas1.width
      ch=canvas1.height
      canvas1.graphics.foreColor=backcolor
      canvas1.graphics.fillrect 0,0,cw,ch
      canvas1.graphics.foreColor=rgb(0,0,0)
      //
      //「dt」は微分方方程式を計算するための、刻み値。
      dt=.01
      // 壁との衝突での、はねかえりの係数。1 以下です。
      ex=.9
      ey=.8
      // 出発点の位置
      x=0
      y=0
      // 水平方向の加速度「ax」、鉛直方向の加速度「ay」
      //「ay」は重力です。
      //「ax」は電車の中での運動などで使います。
      ax=0
      ay=-9.8
      // 左右の壁の位置
      xleft=0
      xright=cw
      // 上下の壁の位置
      ybottom=0
      ytop=ch
      // 出発点の速度
      vx=100
      vy=300
      //
      // 床の位置ではなく    y>0
      // 床に対する速度が1以上 (vy<-1or vy>1)
      // の間はwhile とwendの間の命令を繰り返し実行する
      //
      while y>0 or (vy<-1or vy>1)
        //上下の壁ではねかえるときの処理
        if yytop then
          y=ytop
          vy=-ey*vy
        end if
        // 左右の壁ではねかえるときの処理
        if x>xright  then
          x=xright
          vx=-ex*vx
        end if
        if x>xleft  then
          x=xleft
          vx=-ex*vx
        end if
        //
        // vxはx方向の速度、vyはy方向の速度、
        // axはx方向の加速度、ayはy方向の加速度、
        // dtは微少時間です。
        // ここが心臓部分です
        //
        x=x+vx*dt
        y=y+vy*dt
        vx=vx+ax*dt
        vy=vy+ay*dt
        canvas1.graphics.drawrect x,ytop-y,2,2
        //
        //「userCancelled」は「コマンド」+「ピリオド」で
        // 実行を止めるためのものです。
        // ヘルメットと同じく事故が起こったときに
        // ありがたさがわかります。
        if userCancelled then
          exit
        end if
      wend
    End Sub
    

     今回の「ボール投げ」の ソースプログラムです。基本サンプルとゲームのサンプルです。
      
      プロジェクトファイルのみです。REALbasicの最新バージョンが必要です。30 kバイト  

      ソースコードについての質問やご意見がありましたら以下のアドレスまでご連絡下さい。
              koko-@mx2.tiki.ne.jp

このホームページのホストは です。 無料ホームページをどうぞ!