9ゲームの制作 VB6
 (4) タイルのシャッフル 前へ 目次へ 次へ 

 2. タイルのシャッフル

 関数 Ransuu で生成した番号のタイルを移動させる。移動回数は、30回とする。2回目以降に移動するタイルは、直前に移動させたタイルとは別のタイルを移動させる。

 タイルのシャッフル処理は、プログラムを実行したとき(Form_Load)と「もう一度」のボタンをクリックしたときの両方で必要なのでサブプロシージャ(サブルーチン) GameStart として作成する。
 処理手順は次のようになる。

  1. 1から8の乱数を発生し、rdに記憶する。
  2. rd番目と直前の番号が同じかどうか調べる。同じ → 1.へ、 同じでない → 次へ
  3. rd番目のタイルが移動可能かどうかを調べる。移動可能 → 次へ、 移動不可 → 1.へ
  4. 移動させる。

・プログラムリスト

Private Sub GameStart()
    'タイルをでたらめに移動する。
    Dim before As Integer        '直前に移動したタイルの番号
    Dim n As Integer, rd As Integer

    before = 0
    For n = 1 To 30        '30回移動する。
        Do
            rd = Ransuu(1, 8)    '移動するタイル番号を生成
            If MoveOk(rd) = True And before <> rd Then
                Exit Do
            End If
        Loop
        TileMove rd        '移動(交換)
        before = rd
    Next n
End Sub

 プログラム開始時にGameStartプロシージャを呼び出すように処理を追加する。また、乱数のシード値の設定(乱数の初期化)もしておく。

Private Sub Form_Load()
    Dim n As Integer

    cmdTile(1).BackColor = &H80C040    '1つ目のオブジェクトの色を設定
    For n = 2 To 9
        Load cmdTile(n)        '新規にオブジェクトを追加
        With cmdTile(n)        '追加したオブジェクトのプロパティ設定
            .Top = cmdTile(1).Top + cmdTile(1).Height * Int((n - 1) / 3)
            .Left = cmdTile(1).Left + cmdTile(1).Width * Int((n - 1) Mod 3)
            .Caption = Str(n)
            .BackColor = cmdTile(1).BackColor + n * &H400
            .Visible = True
        End With
    Next n
    cmdTile(9).Visible = False        '9番目は表示しない
    Randomize        '乱数の初期化
    GameStart
End Sub

 「もう一度」のボタンをクリックしたときもGameStartプロシージャを呼び出すようにする。

Private Sub cmdRetry_Click()
    GameStart
End Sub


 (4) タイルのシャッフル 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system