カード・ゲームの制作 VB6
 (e) 標準モジュールの作成2 前へ 目次へ 次へ 

 前ページの続き。

 3. 標準モジュールの作成2

(@) メニューから[ファイル(F)]→[プロジェクトを開く(O)]を選択する。変更点を保存するかどうかのダイアログが表示されるので、[はい(Y)]をクリックし、「(b) カードのシャッフル」で作成したプログラムを開く。

(A) メニューから[プロジェクト(P)]→[標準モジュール(M)]を選択すると、図e-1のようなダイアログが表示される。@[既存のファイル]タブ、Aファイル名(CardGame.bas)、B[開く(O)]をクリックする。プログラムに作成済みの標準モジュールを追加する方法である。


図e-1

(B) 標準モジュールを追加した後、標準モジュールのコードウィンドウを表示する。図e-2のようにプロジェクトウィンドウの、@標準モジュールの前の+記号、AModule1、Bコードの表示アイコンをクリックする。


図e-2

(C) フォームモジュール(Form1)から次のグローバル変数宣言を標準モジュールの先頭に移動する。
    Dim CARDstock(53) As Integer   'カードの山
    Dim CARDmax As Integer   'カードの使用枚数

(D) 宣言の“Dim”を“Public”に変更する。
    Public CARDstock(53) As Integer   'カードの山
    Public CARDmax As Integer   'カードの使用枚数

(E) フォームモジュール(Form1)からCARDShuffleとRansuuの2つのプロシージャを標準モジュールに移動する。標準モジュールにはすでにCardMoveとxwaitがあるが、移動先はそれらの前でも後ろでもかまわない。

(F) 標準モジュールに移動したCARDShuffleとRansuuの2カ所の“Private”を“Public”に変更する。
    プロシージャの先頭  Private Sub CARDShuffle(UsedCard As String)

 カードシャッフルのプロシージャではスペードのAを1番としているが、処理としてはスペードのAを0番とした方が便利である。13で割った商が0ならスペード、1ならクラブというようにマークが計算で求まる。また、13で割った余りに1を加算するとカードの数字が求まる。そこで、CARDShuffleプロシージャの次の部分を変更する。
'シャッフル
For n = 1 To CARDmax
    Do
        c = Ransuu(1, CARDmax)
        If CardUse(c) Then
            CardUse(c) = False
            CARDstock(n) = c - 1  '←ココ
            Exit Do
        End If
    Loop
Next n
 これに合わせて、フォームモジュールのCommand1_Clickプロシージャの次の部分も変更する。
    For n = 1 To CARDmax
        xx = 40 * (CARDstock(n) Mod 13)   '←ココ
        yy = 55 * Int(CARDstock(n) / 13)  '←ココ
        Picture1(n - 1).PaintPicture Image1.Picture, 0, 0, , , xx, yy, 40, 55
    Next n

(G) メニューから[ファイル(F)]→[名前を付けてCardGame.basの保存(A)...]または[ファイル(F)]→[CardGame.basの上書き保存(S)]を選択して保存する。



【参考】標準モジュールCardGame.basのリスト

Public CARDstock(53) As Integer    'カードの山
Public CARDmax As Integer            'カードの使用枚数
 
Public Sub CardMove(pic1 As Object, pic2 As Object)
'移動処理
    Dim x0 As Integer, y0 As Integer    'Picture1の元の座標
    Dim dx As Integer, dy As Integer    '移動量
    Dim n As Integer
    Const NN = 20    '分割数
 
    x0 = pic1.Left    '元の座標保存
    y0 = pic1.Top
   pic1.Visible = True    '移動するオブジェクト表示
    dx = (pic2.Left - pic1.Left) / NN    '移動量計算
    dy = (pic2.Top - pic1.Top) / NN
    For n = 1 To NN
        pic1.Left = pic1.Left + dx    '移動
        pic1.Top = pic1.Top + dy
        xwait 0.05
    Next n
    pic2.Picture = pic1.Image    '移動先に画像コピー
    pic1.Visible = False           '移動するオブジェクト非表示
    pic2.Visible = True            '移動先のオブジェクト表示
    pic1.Left = x0    '元の座標に戻す
    pic1.Top = y0
End Sub
 
Public Sub xwait(sec As Single)
    Dim ima As Single, wt As Single
 
    ima = Timer
    Do
        wt = Timer
        DoEvents
    Loop While wt - ima < sec And wt >= ima
End Sub
 
Public Sub CARDShuffle(UsedCard As String)
'カードシャッフル
'引数 UsedCard = 53個の1と0の文字列。 1:使用する、0:使用しない
    Const CMax = 53
    Dim CardUse(53) As Boolean
    Dim c As Integer, n As Integer, n1 As Integer, NN As Integer
 
    'カード初期化
    CARDmax = 0    '使用枚数
    For n = 1 To CMax
        If Mid(UsedCard, n, 1) = "1" Then
            CARDmax = CARDmax + 1    '使用枚数のカウント
            CardUse(n) = True    '使用する
        Else
            CardUse(n) = False    '使用しない
        End If
    Next n
    'シャッフル
    For n = 1 To CARDmax
        Do
            DoEvents
            c = Ransuu(1, CMax)
            If CardUse(c) Then
                CardUse(c) = False
                CARDstock(n) = c - 1
                Exit Do
            End If
        Loop
    Next n
End Sub
 
Public Function Ransuu(min, max) As Integer
'整数範囲の乱数
    Ransuu = Int((max - min + 1) * Rnd + min)
End Function


 (e) 標準モジュールの作成2 前へ 目次へ 次へ 
Copyright © 2004 Hiroshi Masuda 

 

 

inserted by FC2 system