dポイントプレゼントキャンペーン実施中!

題名通りのコードを作っているのですが、どうもうまくいきません。以下のように表示したいのですが…。

(1)コンピュータの(出す手の)確率を表示したうえで、ユーザーの(出す手の)入力を得る。
   例:コンピュータの確率 グ(0) : 40, チ(1) : 12, パ(2) : 99

あなたの手は?(0,1,2)
(2)ユーザー、コンピュータの勝ち数、じゃんけんの結果、ユーザーの連勝数を表示。
例:YOU=2,PC=0, > Win : 1連勝
(3)3連勝したら経過時間を表示して終了。
例:TIME : 14秒

以下作成したコードです。
Sub Main()
Dim StartTime, StopTime As Variant
Dim man As Integer, com As Integer
Dim Prob_G, Prob_C, Prob_P, ProbSum As Integer
Dim kekka As String
Dim rand As Integer
Dim count As Integer

Randomize
StartTime = Time

count = 0
Do While count < 3
Prob_G = Int(Rnd * 100)
Prob_C = Int(Rnd * 100)
Prob_P = Int(Rnd * 100)

ProbSum = Prob_G + Prob_C + Prob_P
rand = Int(Rnd * ProbSum)

If Prob_G Then
com = 0
ElseIf Prob_C Then
com = 1
ElseIf Prob_P Then
com = 2
End If

man = InputBox("あなたの手は?(0,1,2)")

Select Case (com - man + 3) Mod 3
Case 0
kekka = "Draw"
Case 1
kekka = "Win"
count = count + 1
Case 2
kekka = "Lose"
count = 0
End Select

MsgBox "YOU=" & man & ",PC=" & com & " > " & kekka & " : " & count & "連勝"
Loop

StopTime = Time

MsgBox "TIME:" & Second(StopTime) & " 秒"
End Sub

穴が多くてすみません…このまま実行するとコンピュータの確率が表示されず、コンピュータの出す手がなぜかグーで固定されてしまいます。If文が機能していないようですorz
コードはできるだけこのままの形でお願いします。私はエクセル初心者で、独学ではこれが限界でした。ご教授お願いします。

A 回答 (2件)

こんな感じでどうでしょう。



Sub Main()
Dim StartTime As Long, StopTime As Long
Dim man As Integer, com As Integer
Dim Rnd_G As Single, Rnd_C As Single, Rnd_P As Single, RndSum As Single
Dim Prob_G As Integer, Prob_C As Integer, Prob_P As Integer
Dim kekka As String
Dim rand As Single
Dim count As Integer

Randomize
StartTime = Timer

Do While count < 3
Rnd_G = Rnd
Rnd_C = Rnd
Rnd_P = Rnd
RndSum = Rnd_G + Rnd_C + Rnd_P
Prob_G = Rnd_G / RndSum * 100
Prob_C = Rnd_C / RndSum * 100
Prob_P = 100 - Prob_G - Prob_C

rand = Rnd * 100

If rand < Prob_G Then
com = 0
ElseIf rand < Prob_G + Prob_C Then
com = 1
Else
com = 2
End If

On Error GoTo キャンセル処理
man = InputBox("コンピュータの確率 グ(0):" & Prob_G & _
"% チ(1):" & Prob_C & "% パ(2):" & Prob_P & "%" & vbCrLf & "あなたの手は?(0,1,2)")
On Error GoTo 0

Select Case (com - man + 3) Mod 3
Case 0
kekka = "Draw"
Case 1
kekka = "Win"
count = count + 1
Case 2
kekka = "Lose"
count = 0
End Select

MsgBox "YOU=" & man & ",PC=" & com & " > " & kekka & " : " & count & "連勝"
Loop

StopTime = Timer
MsgBox "TIME: " & StopTime - StartTime & "秒"
Exit Sub

キャンセル処理:
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます!まさかここまで完璧に回答してもらえるとは…!If文は不等号で乱数とつなげばよかったのですね。まったくきづきませんでした。ありがとうございます。

お礼日時:2010/11/28 11:02

If Prob_G Then


com = 0
ElseIf Prob_C Then
com = 1
ElseIf Prob_P Then
com = 2
End If

この部分では、何を判定しようとして 書いたコードですか?

 ※このままでは、常に com = 0  になります。

この回答への補足

そこは乱数で Prob_G, Prob_C, Prob_P をランダムに設定したいのです。でも言われてみれば確かにそうでした。特定のものをIfの先頭に置いちゃだめですよね。 ProbSum とおくべき…ですかね。それともそれに Int(Rnd * 3) をイコールでおくべき…? あいまいですみません。違ってたら訂正お願いします。

補足日時:2010/11/25 20:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!