§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) カレントドライブ、カレントディレクトリは現在のファイル操作対象となっているドライブ、ディレクトリである。これを変更する命令がChDriveChDirである。この命令でカレントを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 

 

 

inserted by FC2 system