9ゲームの制作 VB6
 (6) 完成の判定 前へ 目次へ 次へ 

 タイルを移動していき、すべてが順番通りになったらゲームは終了である。この完成したかどうかの判定の処理を考える。
 最初、Form_Loadプロシージャでタイルを配置するのに使用した次の計算式が完成時の座標になる。

n番目タイルの座標
.Top = cmdTile(1).Top + cmdTile(1).Height * Int((n - 1) / 3)
.Left = cmdTile(1).Left + cmdTile(1).Width * ((n - 1) Mod 3)

 処理としては、9枚のタイルの座標がすべて上の計算式の値と一致すれば完成ということになる。タイルをひとつ移動させるごとに判定をする必要があるのでサブプロシージャGameOverとして作成する。

・プログラムリスト

Private Sub GameOver()
    Dim n As Integer, flag As Boolean

    flag = True
    For n = 1 To 9
        If cmdTile(n).Top <> cmdTile(1).Top + cmdTile(1).Height * Int((n - 1) / 3) Or _
          cmdTile(n).Left <> cmdTile(1).Left + cmdTile(1).Width * Int((n - 1) Mod 3) Then
            flag = False    '未完成
            Exit For
        End If
    Next n
    If flag = True Then     '終了
        MsgBox "9Game --- " & Str(Cnt) & "回で完成しました", vbOKOnly
    End If
End Sub
Private Sub TileMove(num As Integer)
    Dim work As Integer
    'Index番目と9番目のタイルの座標を交換
    work = cmdTile(num).Top
    cmdTile(num).Top = cmdTile(9).Top       'Top 入れ替え
    cmdTile(9).Top = work
    work = cmdTile(num).Left
    cmdTile(num).Left = cmdTile(9).Left     'Left 入れ替え
    cmdTile(9).Left = work
    Cnt = Cnt + 1
    lblKaisuu.Caption = "移動回数:" & Str(Cnt)
    GameOver
End Sub


終了ボタンの処理

 さて最後に、終了のボタンをクリックしたとき、プログラムを終了するようにプログラムを書く。とりあえず処理は、UnLoad MeとEndだけで良い。

・プログラムリスト

Private Sub cmdEnd_Click()
    Unload Me
    End
End Sub


 以上で一応完成である。




課 題

*タイルの枚数を増やす。(4×4、5×5...)
*最小の移動回数や最小移動回数のランキングなどが記録できるようにする。
*移動回数ではなく、時間制(タイムトライアル)にする。

などなど..... チャレンジしてみよう。


 (6) 完成の判定 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system