VB.NETで○×ゲームを作る方法を教えてください
Private Sub hantei(ByVal t As Integer, ByVal y As Integer)
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim i As Integer 'ループ制御変数
Dim j As Integer 'ループ制御変数
'横判定
For i = 1 To 7 Step 3
blnWin = True
For j = i To i + 2
If P1.Tag <> strPlayer Then
blnWin = False
Exit For
End If
Next j
If Val(P1.Tag) + Val(P2.Tag) + Val(P3.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P4.Tag) + Val(P5.Tag) + Val(P6.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P7.Tag) + Val(P8.Tag) + Val(P9.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P1.Tag) + Val(P2.Tag) + Val(P3.Tag) = -3 Then
MsgBox("×の勝ち!!")
ElseIf Val(P4.Tag) + Val(P5.Tag) + Val(P6.Tag) = -3 Then
MsgBox("×の勝ち!!")
ElseIf Val(P7.Tag) + Val(P8.Tag) + Val(P9.Tag) = -3 Then
MsgBox("×の勝ち!!")
Exit Sub
End If
Next i
'縦判定
For i = 1 To 3
blnWin = True
For j = i To i + 6 Step 3
If P1.Tag > strPlayer Then
blnWin = False
Exit For
End If
Next j
If Val(P1.Tag) + Val(P4.Tag) + Val(P7.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P2.Tag) + Val(P5.Tag) + Val(P8.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P3.Tag) + Val(P6.Tag) + Val(P9.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P1.Tag) + Val(P4.Tag) + Val(P7.Tag) = -3 Then
MsgBox("×の勝ち!!")
ElseIf Val(P2.Tag) + Val(P5.Tag) + Val(P8.Tag) = -3 Then
MsgBox("×の勝ち!!")
ElseIf Val(P3.Tag) + Val(P6.Tag) + Val(P9.Tag) = -3 Then
MsgBox("×の勝ち!!")
Exit Sub
End If
Next i
'斜め判定(左上から右下へ)
blnWin = True
For i = 1 To 9 Step 4
If P1.Tag <> strPlayer Then
blnWin = False
Exit For
End If
Next i
If Val(P1.Tag) + Val(P5.Tag) + Val(P9.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P1.Tag) + Val(P5.Tag) + Val(P9.Tag) = -3 Then
MsgBox("×の勝ち!!")
Exit Sub
End If
'斜め判定(右上から左下へ)
blnWin = True
For i = 3 To 7 Step 2
If P1.Tag <> strPlayer Then
blnWin = False
Exit For
End If
Next i
If Val(P3.Tag) + Val(P5.Tag) + Val(P7.Tag) = 3 Then
MsgBox("○の勝ち!!")
ElseIf Val(P3.Tag) + Val(P5.Tag) + Val(P7.Tag) = -3 Then
MsgBox("×の勝ち!!")
Exit Sub
End If
'交代
blnTurn = Not blnTurn
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
P1.Text = ""
P2.Text = ""
P3.Text = ""
P4.Text = ""
P5.Text = ""
P6.Text = ""
P7.Text = ""
P8.Text = ""
P9.Text = ""
End Sub
Private Sub P1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P1.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P1.Tag = -1
Else
strPlayer = "○"
P1.Tag = 1
End If
'記号を表示
P1.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P2.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P2.Tag = -1
Else
strPlayer = "○"
P2.Tag = 1
End If
'記号を表示
P2.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P3.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P3.Tag = -1
Else
strPlayer = "○"
P3.Tag = 1
End If
'記号を表示
P3.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P4.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P4.Tag = -1
Else
strPlayer = "○"
P4.Tag = 1
End If
'記号を表示
P4.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P5.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P5.Tag = -1
Else
strPlayer = "○"
P5.Tag = 1
End If
'記号を表示
P5.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P6.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P6.Tag = -1
Else
strPlayer = "○"
P6.Tag = 1
End If
'記号を表示
P6.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P7.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P7.Tag = -1
Else
strPlayer = "○"
P7.Tag = 1
End If
'記号を表示
P7.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P8.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P8.Tag = -1
Else
strPlayer = "○"
P8.Tag = 1
End If
'記号を表示
P8.Text = strPlayer
hantei(t, y)
End Sub
Private Sub P9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P9.Click
Dim strPlayer As String 'プレイヤーの記号
Dim blnWin As Boolean '勝ち判定フラグ
Dim t As Integer 'ループ制御変数
Dim y As Integer 'ループ制御変数
'記号をセット
If blnTurn Then
strPlayer = "×"
P9.Tag = -1
Else
strPlayer = "○"
P9.Tag = 1
End If
'記号を表示
P9.Text = strPlayer
hantei(t, y)
End Sub
POI さん
足し算で判断するのはグットアイデア。(^^
クリアーボタンを押した時Tagの内容も
クリアーした方が良いと思われ。
Pを配列にするとコードが簡単になるかも。
我龍院忠太へ
クリアーボタンを押したときのTagの内容のクリアーってどんなしたらできますか?
さっきの○×のソースで引き分けを表示させるのを忘れていました(|| ゜Д゜)
自分はまだ勉強不足でそのソースがわからないので、他の人に聞いてくださいъ( ゜ー^) 誤爆スマソ
>自分はまだ勉強不足でそのソースがわからないので、他の人に聞いてくださいъ( ゜ー^) 誤爆スマソ
まあそう言わずにどんどん行ってみよう。
>クリアーボタンを押したときのTagの内容のクリアーってどんなしたらできますか?
ベタでやるなら
P1.Tag = 0:P2.Tag=0.....
で良いのでは。
For Eachを使うと
Dim ct As Control
For Each ct In Controls
If TypeOf ct Is TextBox And ct.Text = "" Then
ct.Texr = ""
ct.Tag = 0
End If
Next
blnTurn = False 'これもやった方が良い
と言うか、Tagにこだわる必要は無いのでは、テキストボックスは 3X3で並んでいるとして
POIさんのコードをちょっと書き換えると
Dim blnTurn As Boolean
Private Sub hantei(ByVal s As String)
If hantei2(s, P1, P2, P3) = True Or hantei2(s, P4, P5, P6) = True Or hantei2(s, P7, P8, P9) = True Or _
hantei2(s, P1, P4, P7) = True Or hantei2(s, P2, P5, P8) = True Or _
hantei2(s, P3, P6, P9) = True Or hantei2(s, P3, P5, P7) = True Or _
hantei2(s, P1, P5, P9) = True Or hantei2(s, P3, P5, P7) = True Then
MsgBox(s + "の勝ち!!")
ElseIf hantei3() = True Then
MsgBox("引き分けです")
Else
blnTurn = Not blnTurn
End If
End Sub
Private Function hantei2(ByVal s As String, ByVal t1 As TextBox, _
ByVal t2 As TextBox, ByVal t3 As TextBox) As Boolean
If t1.Text = s And t2.Text = s And t3.Text = s Then
hantei2 = True
Else
hantei2 = False
End If
End Function
Private Function hantei3() As Boolean
Dim ct As Control
For Each ct In Controls
If TypeOf ct Is TextBox And ct.Text = "" Then
hantei3 = False
Exit Function
End If
Next
hantei3 = True
End Function
Private Sub P1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
P1.Click, P2.Click, P3.Click, P4.Click, P5.Click, P6.Click, P7.Click, P8.Click, P9.Click
Dim txt As New TextBox
txt = DirectCast(sender, TextBox)
If txt.Text = "" Then
If blnTurn Then
txt.Text = "×"
Else
txt.Text = "○"
End If
hantei(txt.Text)
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Dim ct As Control
For Each ct In Controls
If TypeOf ct Is TextBox Then
ct.Text = ""
End If
Next
blnTurn = False
End Sub
みんな返信ありがとうございます。
○×ゲームで○は自分で、×はコンピュータがやるようにプログラムを作ることってできますか?
出来る、出来ないで言えば、出来ます。
あとはコンピュータの思考ルーチンをの作り込み次第で
強いか弱いかは別れるかと思いますが・・・
きっと次は『どうやればできますか?』だな。
そのソースを教えてください。
>きっと次は『どうやればできますか?』だな。
って言うのは一生懸命勉強をがんばっている人に失礼ですよ。
> そのソースを教えてください。
一生懸命勉強をがんばっている人ではないですね。
> そのソースを教えてください。
ここは、自分の課題の作成依頼をするところではありません。
(作成依頼ならば、それなりのところに高いお金を払ってつくってもらってください)
自分で考えてみて、どこまでできるけど、ここが分からないとかそういう質問をしてください。
まず、あなたはどのように考えて、○×ゲームをやりますか?
それをプログラムにする前に、紙かなんかに書いてみてはどうでしょうか?
>POI氏へ
>って言うのは一生懸命勉強をがんばっている人に失礼ですよ。
とおっしゃいますが、
>VB.NETで○×ゲームを作る方法を教えてください
という最初の質問からそう思われますか?
結果はご覧の通り。
| ツイート |
|