キャッチゲームの制作 VB6
 (8) 時間制限の処理 前へ 目次へ 次へ 

 このゲームはいつまでたっても終わることがない。そこで制限時間内の得点を競うゲームにする。
 タイマーをもう一つ用意して時間を計測する。ゲーム時間は30秒間とする。
 処理手順はおおよそ次のようになる。

  1. 開始して良いかどうかのメッセージを出す。
  2. 開始ボタンがクリックされたらゲーム開始とともに時間の計測を始める。
  3. ゲームを実行する。
  4. 30秒たったら終了のメッセージと得点を表示する。
  5. 続けるかどうかの確認をする。
  6. 続ける場合は、リンゴをすべて消し、得点も初期化して 1. に戻る。続けないときは終了する。

 フォームにタイマーコントロールを一つ追加する。オブジェクト名はTimer2とする。Timer2コントロールのIntervalプロパティを30000 (30秒)に、EnabledプロパティをFalseに設定する(タイマーを停止する)。
 また、Timer1コントロールのEnabledプロパティもFalseに設定する(リンゴが落下してこないようにするため)。

 ゲーム開始の処理はサブプロシージャ GameStart として作成する。

・プログラムリスト

Private Sub Form_Load()
      … 省略 …
    Tensuu = 0
    GameStart      'ゲーム開始
End Sub

Private Sub GameStart()
    MsgBox "ゲームを開始します。", vbOKOnly, Form1.Caption
    lblTokuten.Caption = Tensuu     '点数表示
    Timer1.Enabled = True    'タイマー始動
    Timer2.Enabled = True    'タイマー始動
End Sub

 Form_Loadプロシージャの最後にGameStartプロシージャを呼び出す命令を追加しておく。
 開始のメッセージを表示し、ボタンがクリックされたら2つのタイマーを始動させてゲームを開始する。

 制限時間(30秒)になるとTimer2_Timerプロシージャが処理される。すなわち、ゲーム終了の処理をここへ書けばよい。

Private Sub Timer2_Timer()
'ゲーム終了・継続確認
    Dim rd As Integer, n As Integer

    Timer1.Enabled = False    'タイマー停止
    Timer2.Enabled = False    'タイマー停止
    MsgBox "得点は" & Str(Tensuu) & "点でした。", vbOKOnly, Form1.Caption
    rd = MsgBox("ゲームを続けますか?", vbYesNo, Form1.Caption)
    If rd = vbYes Then
        For n = 1 To MaxApple
            imgApple(n).Visible = False    'すべてのリンゴを非表示
        Next n
        Tensuu = 0    '点数を初期化
        GameStart     'ゲーム開始
    Else
        Unload Me
    End If
End Sub




ちょっと改善1

 プログラム起動時、開始確認のメッセージだけが表示され、ゲーム画面(ウィンドウ)が表示されない。ウィンドウはForm_Loadプロシージャの処理がすべて終わったとき、すなわち、Form_LoadプロシージャのEnd Subが実行されてから表示される。
 Form_Loadプロシージャがすべて終了しない間にウィンドウを表示させるにはShowメソッドを使用する。ここでは、Form_Loadプロシージャ内のGameStartプロシージャ呼び出しの直前に書くと良い。

Private Sub Form_Load()
      … 省略 …
    Tensuu = 0
    Form1.Show
    GameStart        'ゲーム開始
End Sub


ちょっと改善2

 オブジェクト(部品)の使用数が少なければそれだけメモリの消費量が少なくてすむ。使用メモリの節約になり、処理のスピードアップにもつながる。ちょっと改善として、タイマー1つ減らしてTimer1だけにするヒントだけを示しておく。

 Timer1は50m秒ごとに呼び出される。したがって次のような計算(考え方)ができる。

30秒 = 30×1000 = 30000m秒
30000m秒÷50m秒 = 600回

 すなわち、Timer1が600回呼び出されたときが30秒後ということになる。グローバル変数またはStatic変数を1つ用意して600回数える式を追加する。600回になったときの終了の処理はTimer2_Timerプロシージャに書いたものと同じで良い。


 (8) 時間制限の処理 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system