カード・ゲームの制作 VB6
 (7) 継続の確認 前へ 目次へ 次へ 

 ここまでで1ゲームが終わり、勝ち負けの判定と得点計算の処理までできた。
 フローチャートでは続けるかどうかを入力する処理となっているが、その前にゲームオーバーの判定処理を追加する。

 1. ゲームオーバー

 得点はラベルオブジェクトlblTokutenのCaptionに格納されている。この値が0以下になればゲームオーバーである。ゲームオーバーになったとき、(1)続けるかどうか確認する、(2)続けるときは得点を100に設定し、(3)ゲームを初期化する、という処理が必要である。
 処理はGame2プロシージャの勝敗判定・得点計算の処理の後に追加する。

Private Sub Game2()
    Dim n As Integer, pp As Integer
    Dim rr As Integer
    Dim oya As Integer, ko As Integer
   << 省 略 >>
        lblHantei(n).Visible = True
    Next n

    'ゲームオーバー
    If Val(lblTokuten.Caption) <= 0 Then
        rr = MsgBox("ゲームオーバーです。" & vbCrLf & "もう一度ゲームをしますか?", vbYesNo, "カブ")
        If rr = vbYes Then
            lblTokuten.Caption = "100"    '持ち点初期化
            InitGame    'ゲームの初期化
            Exit Sub    'このサブプロシージャを抜け出す
        Else
            End
        End If
    End If
End Sub

 まだ、実行しても1ゲームだけしかできない。


 2. 継続の確認

 処理はGame2プロシージャのゲームオーバーの処理の後に追加する。

Private Sub Game2()
    Dim n As Integer, pp As Integer
    Dim rr As Integer
    Dim oya As Integer, ko As Integer
   << 省 略 >>
    'ゲームオーバー
    If Val(lblTokuten.Caption) <= 0 Then
        rr = MsgBox("ゲームオーバーです。" & vbCrLf & "もう一度ゲームをしますか?", vbYesNo, "カブ")
        If rr = vbYes Then
            lblTokuten.Caption = "100"    '持ち点初期化
            InitGame    'ゲームの初期化
            Exit Sub    'このサブプロシージャを抜け出す
        Else
            Unload Me
            End
        End If
    End If

    '継続の確認
    xwait 1.5    '時間待ち
    rr = MsgBox("もう一度しますか?", vbYesNo, "カブ")
    If rr = vbYes Then
        InitGame
    Else
        End
    End If
End Sub

 これで、一応の完成である。


 3. その他の処理

(1) 継続確認のあと、ラベルオブジェクトlblHanteiに表示したメッセージが表示されたままになる。
  → GameInitサブプロシージャにメッセージを消去する処理をInitGameプロシージャに追加する。

Private Sub InitGame()
    'ゲームの初期化
    Dim n As Integer
    Dim used As String
 
    State = 0    '現在の状態
    << 省 略 >>
        If n Mod 3 > 0 Then    '最初の置き場所以外は非表示に設定
            picCard(n).Visible = False
        End If
        Tefuda(n) = -1
    Next

    For n = 0 To 4
        lblHantei(n).Caption = ""
    Next n
    used = "1111111111000"    'スペード

(2) 継続確認のあと、賭け点がそのままの状態になっている。
  → 賭け点を初期値(賭け点)に戻す処理をInitGameプロシージャに追加する。

Private Sub InitGame()
    'ゲームの初期化
    Dim n As Integer
    Dim used As String
 
    State = 0    '現在の状態
    << 省 略 >>
        If n Mod 3 > 0 Then    '最初の置き場所以外は非表示に設定
            picCard(n).Visible = False
        End If
        Tefuda(n) = -1
    Next
    For n = 0 To 4
        lblHantei(n).Caption = ""
    Next n

    cmbKaketen.ListIndex = 0
    used = "1111111111000"    'スペード

(3) 勝敗判定と得点計算の処理(Game2プロシージャ)で親と子の役をファンクションプロシージャhyoukaで計算させると、リーチ状態の値が得られることもある。例えば、スペードの4とハートの4の2枚のとき、708という値が得られる。
  → リーチ状態は3枚目を引くかどうかの判定にのみ使われるものなので、リーチ状態(500,700,800台)の値は1けたに計算し直す。新たにファンクションプロシージャhyouka2を作成する。

Private Sub Game2()
    Dim n As Integer, pp As Integer
    << 省 略 >>
 
    '勝敗判定・得点計算
    oya =
hyouka2(0)    '親の役
    lblHantei(0).Caption = Yaku(oya)    '役メッセージ
    lblHantei(0).Visible = True
    For n = 1 To 4
        pp = n * 3
        ko =
hyouka2(pp)    '子の役
        If oya = 999 Then    '親 999

Private Function hyouka2(nn As Integer)
    Dim yaku As Integer, aa As Integer
 
    yaku = hyouka(nn)    '元の役計算を呼び出す
    aa = Int(yaku / 10)    '50x,70x,80xを50,70,80にする
    If aa = 50 Or aa = 70 Or aa = 80 Then
        hyouka2 = yaku - Int(yaku / 10) * 10
    Else
        hyouka2 = yaku
    End If
End Function


 課題

・プレーヤ名と得点などがディスクに記録できるようにする。
・場の数を増やせるようにする。
・複数の場が選択できるようにする。
など


 (7) 継続の確認 前へ 目次へ 次へ 
Copyright © 2005 Hiroshi Masuda 

 

 

inserted by FC2 system