カード・ゲームの制作 VB6
 (5) 2枚目配布 前へ 目次へ 次へ 

 カードを選択して賭け点を決めた後、2枚目配布以降の処理をGame2プロシージャとしてプログラムしていく。
 まず、点数入力のcmbKaketen_ClickプロシージャでコメントにしていたGame2プロシージャ呼び出しのコメントをとる。

・プログラムリスト(修正)

Private Sub cmbKaketen_Click()
'賭け点の選択
    Dim n As Integer, mark As Integer, number As Integer
   << 省 略 >>
        If rr = vbYes Then    'OK
            cmbKaketen.Enabled = False    '賭け点使用不可
            State = 2    '次の状態に設定
            Game2         'コメント(')を削除
        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としているので、ゲーム初期化の処理に次の1行を追加する。

Private Sub InitGame()
    'ゲームの初期化
    Dim n As Integer
    Dim used As String
 
    State = 0 '現在の状態
    lblMessage.Caption = "" 'メッセージクリア
    cmbKaketen.Enabled = False '賭け点使用不可
    'オブジェクトの設定
    picWork.Visible = False '移動用カードを非表示に設定
    For n = 0 To 14
        picCard(n).Picture = LoadPicture("") '画像データの消去
        picCard(n).BackColor = &HCC00& 'カード置き場所の色設定
        picCard(n).BorderStyle = 0 '枠線なしに設定
        If n Mod 3 > 0 Then '最初の置き場所以外は非表示に設定
            picCard(n).Visible = False
        End If

        Tefuda(n) = -1
    Next
    used = "1111111111000" 'スペード
<<以下省略>>


 1. 場(プレーヤー)の2枚目配布以降

 点数入力以降の処理は、Game2プロシージャとして作成していく。
 まずは、2枚目配布の処理であるが、プローチャート(左図)より、親と場の4枚のカードについて処理する必要がある。順番は場のカードの後に親のカードの処理となる。

 場に2枚目を1枚ずつ配付し、選択したカードかどうか判定する。選択した場の番号(3,6,9,12)はグローバル変数SelCardに格納されている。
 場の1枚目がオブジェクトpicCardの3,6,9,12であるからFor文で4回繰り返す。おおよその処理は次のようになる。

For n = 3 to BASYO * 3 Step 3
    2枚目をpicCard(n+1)に配付する
    If n = SelCard Then  '選択したカード
        If 3枚目希望する=yes Then
            rr = 1
        else
            rr = 0
        End If
    Else    '選択していないカード
        rr = 判定
    End If
    if rr = 1 then
        3枚目をpicCard(n+2)に配付する
Next n

・プログラムリスト(2,3枚目配付)

Private Sub Game2()
Dim n As Integer, pp As Integer
Dim rr As Integer
 
    '場の処理
    For n = 3 To BASYO * 3 Step 3
        pp = n + 1
        Tefuda(pp) = CARDStock(CARDNext)      '2枚目
        GetCardPic picWork, Tefuda(pp)        'カード画像取り出し
        CardMove picWork, picCard(pp)          'カード移動
        CARDNext = CARDNext + 1      '次に取り出すカード番号
 
        If n = SelCard Then    '選択したカード
            If MsgBox("もう一枚引きますか?", vbYesNo, "カブ") = vbYes Then
                rr = 1
            Else
                rr = 0
            End If
        Else                '選択していないカード
            rr = Hantei(n)
        End If
 
        If rr = 1 Then
            pp = pp + 1
            Tefuda(pp) = CARDStock(CARDNext)        '3枚目
            GetCardPic picWork, Tefuda(pp)          'カード画像取り出し
            CardMove picWork, picCard(pp)            'カード移動
            CARDNext = CARDNext + 1      '次に取り出すカード番号
        End If
    Next n
End Sub

・プログラムリスト(3枚目を引くかどうか判定)

Private Function Hantei(num As Integer) As Integer
    Dim yaku As Integer, goukei As Integer
    Dim rs As Integer, kekka As Integer
' クッピン(親のみの役)…Aと9     最強    999   ///
' シッピン(子のみの役)…Aと4     3倍返し  998   ///
' 嵐…3枚とも同じ数字(A,3,5,10)    10倍返し 888   800
' 嵐…3枚とも同じ数字(2,4,6,7,8,9) 5倍返し 777   700
' 順子(シュンツ)…同じマークの連番   5倍返し 555   500
' 合計の1の位             2倍返し 9,8,7,6,5,4,3,2,1,0  ///

 
    yaku = Hyouka(num)    '役の評価
    goukei = yaku - Int(yaku / 10) * 10   '数字合計
    rs = ransuu(1, 100)    '乱数1〜100
    kekka = 0    '0=引かない、1=引く
    If yaku = 999 Then         '親クッピン
        kekka = 0
    ElseIf yaku = 998 Then    '親以外シッピン
        kekka = 0
    ElseIf yaku >= 500 Then    '順子リーチ以上
        If goukei >= 6 Then
            If rs <= 20 Then    '2割
                kekka = 1
            Else
                kekka = 0
            End If
        Else
            kekka = 1
        End If
    ElseIf goukei >= 8 Then    '以下のif文は役がないとき
        kekka = 0
    ElseIf goukei = 7 Then
        If rs <= 30 Then    '3割
            kekka = 1
        Else
            kekka = 0
        End If
    ElseIf goukei = 6 Then
        If rs <= 40 Then    '4割
            kekka = 1
        Else
            kekka = 0
        End If
    ElseIf goukei <= 5 Then
        kekka = 1
    Else
        kekka = 0
    End If
    Hantei = kekka
End Function

 実行して、カードを選択する。かけ点を入力する。場に2枚目と場合によっては3枚目のカードが配布される。今のところ、4つの場にカードが配布されて終了である。


 2. 親の2枚目配布以降

 基本的に、場の処理と同じである。2枚目を配布した後、3枚目を引くかどうかをHanteiプロシージャで判定する。親の処理はGame2プロシージャの場の処理の後に追加する。

・プログラムリスト

Private Sub Game2()
Dim n As Integer, pp As Integer
Dim rr As Integer
 
    '場の処理
    For n = 3 To BASYO * 3 Step 3
    << 省 略 >>
    Next n

    '親の処理
    Tefuda(1) = CARDStock(CARDNext)  '2枚目
    GetCardPic picWork, Tefuda(1)    'カード画像取り出し
    CardMove picWork, picCard(1)     'カード移動
    CARDNext = CARDNext + 1            '次に取り出すカード番号
    If Hantei(0) = 1 Then
        Tefuda(2) = CARDStock(CARDNext)  '3枚目
        GetCardPic picWork, Tefuda(2)    'カード画像取り出し
        CardMove picWork, picCard(2)      'カード移動
        CARDNext = CARDNext + 1            '次に取り出すカード番号
    End If
End Sub

 実行して、カードを選択する。かけ点を入力する。場に2枚目と場合によっては3枚目のカードが配布される。4つの場にカードが配布されたあと、親に配布されて終了である。


 (5) 2枚目配布 前へ 目次へ 次へ 
Copyright © 2005 Hiroshi Masuda 

 

 

inserted by FC2 system