HyperCard tribute

簡単もぐらたたき


 ここでは、もぐらたたきを作ってみます。今回はできる限り、シンプルなものを目指しましたので、スクリプトも大変簡単なものになっています。
 もぐらは0.1秒ごとにランダムに出たり入ったりします。制限時間30秒の間にできるだけ多くのもぐらを叩いて下さい。


簡単もぐらたたき「mogura」
 ダウンロード(3KB)




画面構成

(1)フィールド「time」
(2)フィールド「score」
(3)ボタン(左上から右へ順に)「m1」「m2」・・・「m10」
(4)ボタン「スタート」



ボタン「スタート」のスクリプト

 このボタンをクリックするとゲームが始まります。
 1 
 2 
 3 
 4 
 5 
 6 
 7 
on mouseUp
  global startTime
  put 0 into cd fld "score"
  play "harpsichord" "c r c r c r g5"
  wait until the sound is done
  put the ticks into startTime
end mouseUp
 まず、フィールド「score」に0を代入し、始まりのサウンドを鳴らします。音が鳴りやむまで待ってから、現在の時間を変数に代入します。

  • play "harpsichord" "c r c r c r g5"
     4行目では、harpsichord の音で始まりのサウンドを鳴らしています。


  • wait until the sound is done
     5行目ではサウンドが鳴りやむまでwaitしています。
    「the sound(サウンド)」
      が(is)
    「done(終わる)」
      まで(until)
    「wait(待つ)」


  • put the ticks into startTime
     現在の、ticks(Macintosh起動時点からの経過時間)を変数startTimeに代入します。この後、必要時にこのticksを取り出し、引き算をしてゲームスタート時からの経過時間を計算します。



    ボタン「m1」〜「m10」のスクリプト(もぐらボタンのスクリプトです)
     1 
     2 
     3 
     4 
    
    on mouseDown
      put cd fld "score"+1 into cd fld "score"
      hide me
    end mouseDown
    
     もぐらをクリックするとこのハンドラが呼び出されます。メッセージはmouseDownですので、マウスボタンが押し下がった時に実行されます。ここで、メッセージmouseUpは使うべきではありません。それは何故かというと、もぐらたたきというのはマウスをすばやく動かしながらクリックしているゲームですので、自分ではもぐらをクリックしたつもりなのに、次のもぐらの位置へカーソルを移動している間にmouseUpメッセージが発生してしまいもぐらを叩いたことにならないことが起こる恐れがあるからです。



    ハンドラ「idle」のスクリプト
     1 
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9 
    10 
    11 
    12 
    13 
    14 
    15 
    16 
    17 
    18 
    19 
    20 
    
    on idle
      global startTime
      if startTime<>empty then
        put 30-round((the ticks-startTime)/60) into cd fld "time"
        if (the ticks-startTime)/60>30 then
          put empty into startTime
          repeat with i=1 to 10
            put "m"&i into name
            hide cd btn name
          end repeat
        else if (the ticks-startTime)/60 mod 0.1=0 then
          put "m"&random(10) into name1
          put "m"&random(10) into name2
          put "m"&random(10) into name3
          hide cd btn name1
          show cd btn name2
          show cd btn name3
        end if
      end if
    end idle
    
     ハンドラ「idle」は、ゲーム中のみ処理を実行します。その処理とは、ゲーム終了、もぐらの出現と隠れるの2つです。

  • if startTime<>empty then
     3行目では、変数startTimeの値を調べることで、ゲーム中であるかどうかのチェックをしています。ゲーム中であれば、変数startTimeには値が入っています。


  • put 30-round((the ticks-startTime)/60) into cd fld "time"
     現在のticksから、スタート時のticksを引き算することで、スタート時からの経過時間を計算しています。その値を30(ゲームスタート時の秒数)から引くことで、ゲーム時間をカウントダウンさせることができます。


  • if (the ticks-startTime)/60>30 then
     5〜10行目では、ゲーム終了時の処理をしています。変数startTimeにemptyを入れ、全てのもぐらを隠します。


  • else if (the ticks-startTime)/60 mod 0.1=0 then
     11〜17行目では、ランダムでもぐらを出したり隠したりします。0.1秒ごとにこの処理を実行します。



     このもぐらたたきはシンプルなものですが、もぐらたたきに必要な部分は全て備わっています。このもぐらたたきを発展させ、独自の演出や、ゲーム性を追加すればオリジナルのゲームがすぐに作れることと思いますので、是非挑戦してみて下さい。