カード・ゲームの制作 VB6
 (3) カード選択と点数入力 前へ 目次へ 次へ 

 場に配布された4枚のカードから1枚のカードをクリックして選択する。次に点数を入力する所までの処理を作成する。

 1.オブジェクトの追加

 下図のようにオブジェクトを追加する。

◆ プロパティ

・コンボ(ComboBox)のプロパティ
(オブジェクト名) cmbKaketen
Style 2 - ドロップダウンリスト

・ラベル(Label)のプロパティ
(オブジェクト名) lblMessage
BackColor &hFF00
Caption ""(なし)
Font Size=10
・ラベル(Label)のプロパティ
(オブジェクト名) lblTokuten
AutoSize True
BackColor &h80C0FF
Caption 100
Font Size=12

 コンボのStyleプロパティを「2 - ドロップダウンリスト」に設定すると、リスト以外から入力できなくなる。


 2. コンボボックスの初期設定

 賭け点に制限を設けるため点数入力にコンボボックスを利用する。コンボボックスは用意されたリストからだけ選択して入力することができる。点数は10〜50の範囲とし、その初期設定をForm_Loadプロシージャで行う。ついでに、マークのメッセージも設定しておく。

・プログラムリスト(追加)

Option Explicit    '変数宣言の強制
Const BASYO = 4                '場に配布するカード数
Dim CARDNext As Integer      '取り出すカード番号
Dim Tefuda(16) As Integer    '配布されたカード
Dim CardM(3) As String       'カードマーク
 
Private Sub Form_Load()
    Randomize        '乱数の初期化
    frmKabu.Show    'フォームの表示

    CardM(0) = "スペード"
    CardM(1) = "クラブ"
    CardM(2) = "ハート"
    CardM(3) = "ダイヤ"
    cmbKaketen.AddItem "賭け点"    '賭け点設定
    cmbKaketen.AddItem "10点"
    cmbKaketen.ItemData(1) = 10
    cmbKaketen.AddItem "20点"
    cmbKaketen.ItemData(2) = 20
    cmbKaketen.AddItem "30点"
    cmbKaketen.ItemData(3) = 30
    cmbKaketen.AddItem "40点"
    cmbKaketen.ItemData(4) = 40
    cmbKaketen.AddItem "50点"
    cmbKaketen.ItemData(5) = 50
    cmbKaketen.ListIndex = 0
    InitGame    'ゲームの初期化
End Sub

 AddItemメソッドでリストに表示させるメッセージを設定する。追加した順で0,1,2,・・・番目に設定される。ItemDataプロパティはリストから選択したとき取り出すデータである。"賭け点"の後、ItemDataプロパティを設定していないが、設定しなければ0である。

コンボボックス cmbKaketen
0 "賭け点" 未設定(=0)
1 "10点" 10
2 "20点" 20
5 "50点" 50


 3. カードの選択

 場のカードがクリックされると、カードに枠が表示されるようにする。具体的にはクリックしたカードのBorderStyleプロパティを「1-実線」にするだけである。
 カードの配布中など、いつでもカードがクリックできるので、1枚目のカードをすべての場に配布した後だけクリック(選択)できるようにする必要がある。今、何ができる状態であるかを変数State(Integer型)で管理することにする。また、選択したカードを記憶しておくため変数SelCard(Integer型)を用意する。変数StateとSelCardはグローバル変数とする。

・プログラムリスト(追加)

Option Explicit    '変数宣言の強制
Const BASYO = 4                '場に配布するカード数
Dim CARDNext As Integer      '取り出すカード番号
Dim Tefuda(16) As Integer    '配布されたカード
Dim CardMark(3) As String    'カードマーク

Dim State As Integer        '現在の状態
Dim SelCard As Integer     '選択したカード
 
Private Sub InitGame()
    'ゲームの初期化
    Dim n As Integer
    Dim used As String

 
    State = 0    '現在の状態
    lblMessage.Caption = ""        'メッセージクリア
    cmbKaketen.Enabled = False    '賭け点使用不可
    'オブジェクトの設定
    picWork.Visible = False    '移動用カードを非表示に設定
   << 省 略 >>
        CARDNext = CARDNext + 1    '次に取り出すカード番号
    Next n

    lblMessage.Caption = "カードを選択してください。"
    State = 1    '現在の状態
End Sub
 
Private Sub picCard_Click(Index As Integer)
'カードの選択
    Dim n As Integer
 
    If State = 1 Then
        For n = 1 To BASYO
            picCard(n * 3).BorderStyle = 0    'カード選択解除
        Next n
        SelCard = Index    '選択したカード
        picCard(Index).BorderStyle = 1    '枠線ありに設定
        lblMessage.Caption = "賭け点を選択してください。"
        cmbKaketen.Enabled = True    '賭け点使用可
    End If
End Sub

 カードの配布中は変数Stateが0で、配布が完了後に1になるようにしている。カードがクリックされたときに呼び出されるpicCard_Clickプロシージャ内では、If文で変数Stateが1のときだけカード選択ができるようにしている。
 引数Indexの値はクリックしたpicCardの配列の添字である。

 実行すると、クリックしたカードに枠が付き、少しへこんだように見える。この状態で別のカードを選択することもできる。また、賭け点が選択入力できるようになる(選択入力しても何も起こらない)。


 4. 点数の入力

 カードを選択すると賭点のコンボボックスが使用できるようになる。ここでは、コンボボックスから点数を選択入力したときの処理をプログラムする。点数を選択入力すると、確認のメッセージが表示されて、OKのときは次の処理へ進み、NOのときは再度カード選択に戻る。

・プログラムリスト

Option Explicit    '変数宣言の強制
Const BASYO = 4                '場に配布するカード数
Dim CARDNext As Integer      '取り出すカード番号
Dim Tefuda(16) As Integer    '配布されたカード
Dim CardMark(3) As String    'カードマーク
Dim State As Integer        '現在の状態
Dim SelCard As Integer     '選択したカード

Dim Kaketen As Integer     '賭点
 
Private Sub cmbKaketen_Click()
'賭け点の選択
    Dim n As Integer, mark As Integer, number As Integer
    Dim msg As String, rr As VbMsgBoxResult
 
    If cmbKaketen.ListIndex = 0 Then    '点数以外
        Exit Sub
    End If
    If State = 1 Then
        lblMessage.Caption = ""
        Kaketen = cmbKaketen.ItemData(cmbKaketen.ListIndex)    '賭け点
        If Kaketen > Val(lblTokuten.Caption) Then        '持ち点オーバー
            lblMessage.Caption = "持ち点を超えています。選択しなおしてください。"
            Exit Sub
        End If
        CardMark Tefuda(SelCard), mark, number    '選択カードのマークと数字計算
        msg = CardM(mark)        'メッセージの組み立て
        msg = msg & str(number)
        msg = msg & " - 賭点" & Kaketen & vbCrLf
        rr = MsgBox(msg & "よろしいですか?", vbYesNo, "カブ")    '確認
        If rr = vbYes Then    'OK
            cmbKaketen.Enabled = False    '賭け点使用不可
            State = 2    '次の状態に設定
            ' Game2        '※1 次の処理へ(2枚目以降の配付など)
        Else        'NO
            For n = 1 To BASYO
                picCard(n * 3).BorderStyle = 0    'カード選択解除
            Next n
            cmbKaketen.ListIndex = 0      '賭け点初期化
            cmbKaketen.Enabled = False    '賭け点使用不可
        End If
    End If
End Sub

※1 次の処理をGame2サブプロシージャとして作成し、ここで呼び出す予定である。まだ、作っていないのでコメントにしている。

 実行して、カードを選択し、賭け点を選択入力すると、確認のメッセージか出る。[はい]をクリックすると選択したカードと賭け点が変更できなくなる。[いいえ]をクリックするとカード選択に戻る。


 (3) カード選択と点数入力 前へ 目次へ 次へ 
Copyright © 2004 Hiroshi Masuda 

 

 

inserted by FC2 system