カード・ゲームの制作 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 |