カード・ゲームの制作 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プロシージャの次の部分を変更する。これに合わせて、フォームモジュールのCommand1_Clickプロシージャの次の部分も変更する。
'シャッフル
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
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 |