VB.NETで○×ゲームを作るには?


イチロー  2005-12-06 14:30:48  No: 93097

VB.NETで○×ゲームを作る方法を教えてください


POI  2005-12-07 15:37:24  No: 93098

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


我龍院忠太  2005-12-07 18:12:59  No: 93099

POI さん
足し算で判断するのはグットアイデア。(^^
クリアーボタンを押した時Tagの内容も
クリアーした方が良いと思われ。
Pを配列にするとコードが簡単になるかも。


POI  2005-12-08 09:46:13  No: 93100

我龍院忠太へ
クリアーボタンを押したときのTagの内容のクリアーってどんなしたらできますか?


POI  2005-12-08 11:22:43  No: 93101

さっきの○×のソースで引き分けを表示させるのを忘れていました(||  ゜Д゜)
自分はまだ勉強不足でそのソースがわからないので、他の人に聞いてくださいъ( ゜ー^) 誤爆スマソ


我龍院忠太  2005-12-08 13:06:12  No: 93102

>自分はまだ勉強不足でそのソースがわからないので、他の人に聞いてくださいъ( ゜ー^) 誤爆スマソ
まあそう言わずにどんどん行ってみよう。

>クリアーボタンを押したときの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


イチロー  2005-12-09 10:30:26  No: 93103

みんな返信ありがとうございます。
○×ゲームで○は自分で、×はコンピュータがやるようにプログラムを作ることってできますか?


KG  2005-12-09 12:22:23  No: 93104

出来る、出来ないで言えば、出来ます。

あとはコンピュータの思考ルーチンをの作り込み次第で
強いか弱いかは別れるかと思いますが・・・


名無し  2005-12-10 03:29:32  No: 93105

きっと次は『どうやればできますか?』だな。


イチロー  2005-12-13 11:10:38  No: 93106

そのソースを教えてください。


POI  2005-12-13 11:12:23  No: 93107

>きっと次は『どうやればできますか?』だな。
って言うのは一生懸命勉強をがんばっている人に失礼ですよ。


ヤレヤレ  2005-12-13 11:29:04  No: 93108

> そのソースを教えてください。
一生懸命勉強をがんばっている人ではないですね。


Blue  2005-12-13 11:33:05  No: 93109

> そのソースを教えてください。
ここは、自分の課題の作成依頼をするところではありません。
(作成依頼ならば、それなりのところに高いお金を払ってつくってもらってください)

自分で考えてみて、どこまでできるけど、ここが分からないとかそういう質問をしてください。

まず、あなたはどのように考えて、○×ゲームをやりますか?
それをプログラムにする前に、紙かなんかに書いてみてはどうでしょうか?


名無し  2005-12-13 18:47:48  No: 93110

>POI氏へ
>って言うのは一生懸命勉強をがんばっている人に失礼ですよ。
とおっしゃいますが、
>VB.NETで○×ゲームを作る方法を教えてください
という最初の質問からそう思われますか?
結果はご覧の通り。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加