キャッチゲームの制作 VB6 | |
(8) 時間制限の処理 |
このゲームはいつまでたっても終わることがない。そこで制限時間内の得点を競うゲームにする。
タイマーをもう一つ用意して時間を計測する。ゲーム時間は30秒間とする。
処理手順はおおよそ次のようになる。
フォームにタイマーコントロールを一つ追加する。オブジェクト名は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 |