9ゲームの制作 VB6
 (3) タイルの移動 前へ 目次へ 次へ 

 8枚のタイルのいずれかをクリックすると移動するプログラムを考える。
 図3-1の場合、6または8のタイルをクリックすると表示されていない9番目のタイルの位置に移動する。

 1. 移動できるかどうかを判定する

図3-1

 例えば、6のタイルをクリックしたときの処理手順を考える。

(1) 6のタイルの上下左右に9のタイルがあるかどうかを調べる。
(2) 9のタイルがあれば、6と9のタイルの位置を入れ替える。

 6のタイルの上下左右に9のタイルがあるかどうかを調べるには、6と9のタイルの座標(Left, Top)を比較して調べる。すべてのタイルの大きさは、同じ(Height, Width)120twipなので、図3-1の場合、6のタイルのy座標(Top)に120を加算すると9のタイルのy座標(Top)と等しくなる。x座標(Left)は同じである。式で表すと次のようになる。(=は等しいという意味である。)

y座標  cmdTile(6).Top + cmdTile(1).Height = cmdTile(9).Top
x座標  cmdTile(6).Left = cmdTile(9).Left

 y座標の計算でタイルの大きさである120を加算しないでcmdTile(1).Heightを加算している。このようにしておけば、タイルの大きさを変えてもこの式を変更する必要がなくなる。

 同じように、8のタイルの場合は、次の式のようになる。(=は等しいという意味である。)

y座標  cmdTile(8).Top = cmdTile(9).Top
x座標  cmdTile(8).Left + cmdTile(1).Width = cmdTile(9).Left

 以上のように、判定することでクリックしたタイルの上下左右に9のタイルがあるかどうかを判定する。
 移動可能かどうかを調べる処理は関数 MoveOk として作成することにする。

・プログラムリスト

Private Sub cmdTile_Click(Index As Integer)
    If MoveOk(Index) = True Then
        MsgBox "移動可能です"
    End If
End Sub

Private Function MoveOk(num As Integer) As Boolean
'移動可能かどうかを調べる。
    '上に移動可能
    If cmdTile(num).Top - cmdTile(1).Height = cmdTile(9).Top And _
      cmdTile(num).Left = cmdTile(9).Left Then
        MoveOk = True
    '下に移動可能
    ElseIf cmdTile(num).Top + cmdTile(1).Height = cmdTile(9).Top And _
      cmdTile(num).Left = cmdTile(9).Left Then
        MoveOk = True
    '左に移動可能
    ElseIf cmdTile(num).Top = cmdTile(9).Top And _
      cmdTile(num).Left - cmdTile(1).Width = cmdTile(9).Left Then
        MoveOk = True
    '右に移動可能
    ElseIf cmdTile(num).Top = cmdTile(9).Top And _
      cmdTile(num).Left + cmdTile(1).Width = cmdTile(9).Left Then
        MoveOk = True
    Else
    '移動不可
        MoveOk = False
    End If
End Function

 If文、ElseIf文の行末の_(アンダーライン)は次の行へ続くこと(継続行)を表している。
 クリックしたタイルの番号は引数Indexに記憶されている。
 入れ替え可能かどうかを示す変数flagを用意し、最初にFalse(偽)を設定しておき、移動可能であればTrue(真)にする。変数flagは最初にBoolean型で宣言している。Boolean型とはTrue(真)とFalse(偽)の値だけを記憶できる変数型である。


 (3) タイルの移動 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system