§2 モグラたたきゲームの制作 VB6 | |
(6) 改良いろいろ W |
4. ハイスコアを記録できるようにする。
ハイスコアに関する必要な処理は次の3点である。
ハイスコアを記録するときのファイル名は"mogura.ini"とする。ファイル名は定数HFnameとして定義しておく。また、プログラム中でハイスコアを記憶しておく変数はHTenとし、グローバル変数として宣言する。
Const MoguraMax = 8 Const HFname = "mogura.ini" 'ファイル名定義 Dim Tensuu As Integer Dim HTen As Integer 'ハイスコア用
ファイルがないのに開こうとするとエラーになるので、ハイスコアを記録するファイルがあるかどうかを調べる必要がある。ここではファイル名を指定して呼び出すとそのファイルの有無を調べるユーザ関数FileExistを作成する。ほかのプログラムでも利用できるだろう。
指定したファイルがあればTure、なければFalseが返却される。
Private Function FileExist(fname As String) As Boolean 'ファイルの有無を調べる。 On Error GoTo ferr Open fname For Input As #1 Close #1 FileExist = True 'ファイルあり Exit Function ferr: FileExist = False 'ファイルなし End Function
(A) ハイスコアを記録したファイルを読み込み、表示する処理は実行後一度だけでよいのでForm_Loadプロシージャに書く。
Private Sub Form_Load() Dim n As Integer ChDrive App.Path '(#1)カレントドライブ設定 ChDir App.Path '(#1)カレントディレクトリ設定 If FileExist(HFname) Then 'ファイル確認 Open HFname For Input As #1 'ファイルを開く Input #1, HTen 'ハイスコア読み込み Close #1 'ファイルを閉じる Else HTen = 0 End If Label2.Caption = "ハイスコア=" & HTen 'ハイスコア表示 Command1(0).BackColor = QBColor(8) 'ボタンの色 … 以下省略 …
(#1) カレントドライブ、カレントディレクトリは現在のファイル操作対象となっているドライブ、ディレクトリである。これを変更する命令がChDriveとChDirである。この命令でカレントをApp.Pathに変更している。App.Pathはこのプログラムが保存されているフォルダのパス名(ドライブ名+ディレクトリ名)である。
ファイルを開くとき Open "mogura.ini" とするとカレントのファイルmogura.iniが開かれることになる。
このように必要なデータファイルなどをプログラムと同じフォルダ内に保存させておくと、ひとまとまりになって管理がしやすくなる。
今回のように、プログラム自身がデータファイルを使う場合は、Form_Loadプロシージャなどプログラムの最初でカレントディレクトリをプログラムが保存されているディレクトリと同じものに設定しておく方がよい。
ChDrive App.Path 'カレントドライブ設定
ChDir App.Path 'カレントディレクトリ設定 プログラムによっては、同時に一つだけしか実行できないようにしたい場合がある。すでにプログラムが実行されているかどうかは App.PrevInstance を調べる。例えば、Form_Loadプロシージャで次のように書いておけば同時に実行されることがない。 Private Sub Form_Load()
If App.PrevInstance = True Then Unload Me End End If ChDrive App.Path 'カレントドライブ設定 ChDir App.Path 'カレントディレクトリ設定 |
(B) ゲーム終了後、得点とハイスコアを比較して、得点の方が高ければハイスコアに記憶させ、表示する、と (C) プログラム終了後(終了直前)、ハイスコアをファイルに書き込む、の処理はTimer2_Timerプロシージャに書く。
Private Sub Timer2_Timer() Dim msg As String 'メッセージ用 Dim yn As VbMsgBoxResult Timer1.Enabled = False 'タイマー停止 Timer2.Enabled = False 'タイマー停止 If HTen < Tensuu Then '(B)ハイスコア? HTen = Tensuu 'ハイスコア記憶 Label2.Caption = "ハイスコア=" & HTen 'ハイスコア表示 msg = "ハイスコア" & Tensuu & "点でした。ゲームを続けますか?" Else msg = "得点は" & Tensuu & "点でした。ゲームを続けますか?" End If yn = MsgBox(msg, vbYesNo, "モグラたたき") If yn = vbYes Then Tensuu = 0 '点数初期化 Label1.Caption = "得点=" & Str(Tensuu) Timer1.Enabled = True 'タイマー作動 Timer2.Enabled = True 'タイマー作動 Else Open HFname For Output As #1 '(C)ハイスコア Print #1, HTen 'ハイスコア書き込み Close #1 Unload Me End End If End Sub
ハイスコアはファイルmogura.iniを削除すればクリアされる。
今回のようにプログラムに必要なデータなどを保存しておくファイル名の拡張子はiniとされることが多い。iniはinitialize(初期化)の略である。現在では、必要なデータなどはiniファイルよりもレジストリに記憶させるのが一般的なようである。
ボーナスモグラの確率を低くしたり、制限時間を変更するなど、ゲームらしくなるようにいろいろと改良してみよう。
(6) 改良いろいろ W | |
Copyright © 2001,2002 Hiroshi Masuda |