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 |