0

私は三目並べのプログラムを書いていて、ボードをセットアップしました。ゲームは大部分で動作します。誰が勝つかを決定します。私が今やろうとしているのは、勝者が決定された後、メッセージ ボックスがポップアップして誰が勝つかを言うことです。メッセージ ボックスに 2 つのボタンを含めたいと思います。1 つのボタンには "Ok for new game" というテキストが表示され、2 つ目のボタンには "Cancel to exit" というテキストが表示されます。Visual Basic 2010 Express を使用しています。

ここに私が持っているコードがあります:

Public Class Form1
    Private turn As Integer = 1
    Private play() As String = {"O", "X"}
    Private board(2, 2) As String

    Private Structure arrayIndex
        Dim x As Integer
        Dim y As Integer
    End Structure

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For x As Integer = 1 To 9
            Dim b As New Button With { _
                .Width = 80, _
                .Height = 80, _
                .Text = "", _
                .Location = New Point(60 + (((x - 1) Mod 3) * 80), 60 + (((x - 1) \ 3) * 80)), _
                .Tag = New arrayIndex With {.x = (x - 1) Mod 3, .y = (x - 1) \ 3}}
            Me.Controls.Add(b)
            AddHandler b.Click, AddressOf buttons_click

        Next
        Me.SetClientSizeCore(360, 360)


    End Sub

    Private Sub buttons_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If DirectCast(sender, Button).Text <> "" Then Return
        DirectCast(sender, Button).Text = play(turn Mod 2)
        Dim index As arrayIndex = DirectCast(DirectCast(sender, Button).Tag, arrayIndex)
        board(index.x, index.y) = play(turn Mod 2)
        turn += 1
        winner()
    End Sub

    Private Sub winner()
        Dim rows(7) As String

        rows(0) = board(0, 0) & board(1, 0) & board(2, 0)
        rows(1) = board(0, 1) & board(1, 1) & board(2, 1)
        rows(2) = board(0, 2) & board(1, 2) & board(2, 2)
        rows(3) = board(0, 0) & board(0, 1) & board(0, 2)
        rows(4) = board(1, 0) & board(1, 1) & board(1, 2)
        rows(5) = board(2, 0) & board(2, 1) & board(2, 2)
        rows(6) = board(0, 0) & board(1, 1) & board(2, 2)
        rows(7) = board(2, 0) & board(1, 1) & board(0, 2)

        For x As Integer = 0 To 7
            If rows(x).Length = 3 AndAlso (rows(x)(0) = rows(x)(1) AndAlso rows(x)(0) = rows(x)(2)) Then
                MessageBox.Show(rows(x)(0) & "'s winsssss!", "We have a winner!", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)
            If DialogResult.OK Then
            turn = 1
            ReDim board(2, 2)
            For Each ctrl As Control In Controls
            ctrl.Text = ""
            Next
            Return
            Else
               Me.Close()


            End If
    End Sub
End Class
4

3 に答える 3

2

これを行う最も簡単な方法は、Formとして機能する新しい を作成することMessageBoxです。APIカスタマイズすることはたくさんありますがMessageBox、余分な時間を与えてくれます。これがあなたがやろうとしていることです。

  • 新しいフォームを作成する
  • MaximizeButton、MinimizeButton、および ShowOnTitleBar を次のように設定します。False
  • FormBorderStyleサイズが大きくならないように FixedDialog に設定します
  • その上に 2 つのボタンを追加します (Ok for new gameおよびCancel to exit)
  • StartUpPositionに設定CenterForm

On for New Game Buttonこのコードを( Click イベント)に追加します。

DialogResult = DialogResult.Yes

Cancel to exitこのコードを( Click イベント)に追加します。

DialogResult = DialogResult.No

ゲームが終了したら、作成した新しいフォームを呼び出してみてください。

Dim xForm as new frmAsk ' Assuming that frmAsk is the name of your new form
If xForm.showDialog = DialogResult.Yes Then
    ' New game here
Else
    ' exit game
End If

これがお役に立てば幸いです。

于 2012-04-11T23:54:46.993 に答える
1

これを試してみませんか:

If Msgbox("Your text here") <> MsgboxResult.Yes then
    Exit
Else
    Your code there to continue the game.
End if

お役に立てれば。

于 2012-04-12T02:33:01.753 に答える