【问题标题】:Computer Click Event Visual Basic计算机单击事件 Visual Basic
【发布时间】:2014-04-06 08:03:26
【问题描述】:

如何创建由计算机驱动的随机点击事件?用户无法选择点击的位置? 我创建了一个 5 个按钮宽和 5 个按钮高的表格,并创建了一个单击事件,用户单击一个按钮并将随机数值添加到他们的分数中。

Dim RandomNumbers = Enumerable.Range(0, 100).ToList()
Dim RandomNumber As New Random()
For Me.TableColunm = 0 To 4 Step 1
    For Me.TableRow = 0 To 4 Step 1
        Dim TemporaryNumber = RandomNumbers(RandomNumber.Next(0, RandomNumbers.Count))
        RandomNumbers.Remove(CInt(TemporaryNumber))
        TableButtons = New Button()
        With TableButtons
            .Name = "TextBox" & TableColunm.ToString & TableRow.ToString
            .Text = TemporaryNumber.ToString
            .Width = CInt(Me.Width / 4)
            .Left = CInt(TableColunm * (Me.Width / 4))
            .Top = TableRow * .Height
            '.Tag = TemporaryNumber
            AddHandler TableButtons.Click, AddressOf UserTableButtonClickEvent
        End With
        GameScreen.Controls.Add(TableButtons)
    Next TableRow
Next TableColunm
Catch ex As Exception
    MsgBox(ex.StackTrace & vbCrLf & "index1= " & TableColunm & vbCrLf & "index2= " & TableRow)
End Try


Private Sub UserTableButtonClickEvent(sender As Object, e As EventArgs)
    CType(sender, Button).BackColor = Color.LightSteelBlue
    OverAllScoreInteger += CInt(CType(sender, Button).Tag)
    GameScreen.UserScoreBox.Text = OverAllScoreInteger.ToString
    Dim TableButton As Button = CType(sender, Button)
    TableButton.Text = "#"
    TableButton.Enabled = False
End Sub

我如何随机制作另一个这样的事件?

【问题讨论】:

    标签: vb.net events random click


    【解决方案1】:

    枚举GameScreen.Controls 集合中的所有控件,如果它们是按钮,则将它们添加到临时列表中。然后在列表长度范围内生成一个随机数,点击这个索引的按钮:

    Dim TempButtonList As New List(Of Button)
    For Each c as Control in GameScreen.Controls
      If TypeOf(c) Is Button Then TempButtonList.Add(CType(c, Button))
    Next
    Dim Rnd as New Random
    TempButtonList(rnd.Next(0, TempButtonList.Count-1)).PerformClick()
    

    PerformClick() 方法的作用与用鼠标单击该按钮完全相同。循环中的If 确保您只在控件集合中添加按钮,因为其中当然可能还有其他控件。

    完整示例

    这样可能更容易(添加一个 Size=275; 275 和两个标签到表单的 FlowLayoutPanel):

    Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim Rnd As New Random
        For i = 1 To 25
            Dim b As New Button With {.Text = Rnd.Next(0, 100)}
            b.Width = 40
            b.Height = 40
            FlowLayoutPanel1.Controls.Add(b)
            AddHandler b.Click, AddressOf b_hndl
        Next
    End Sub
    Private MyScore As Integer = 0
    Private HisScore As Integer = 0
    Dim Zug As Boolean = True
    Private Sub b_hndl(sender As Object, e As EventArgs)
        Dim ThisB As Button = CType(sender, Button)
        Dim CurrScore As Integer = CInt(ThisB.Text)
        Dim CurrZug As Boolean = Zug
        Zug = Not Zug
        ThisB.Enabled = False
        ThisB.Text = "#"
        If CurrZug Then
            MyScore += CurrScore
            Label1.Text = MyScore.ToString
            ComputerMove()
        Else
            HisScore += CurrScore
            Label2.Text = HisScore.ToString
        End If
    End Sub
    Private Sub ComputerMove()
        Dim TempButtonList As New List(Of Button)
        For Each c As Control In FlowLayoutPanel1.Controls
            If TypeOf (c) Is Button Then
                Dim thisb As Button = CType(c, Button)
                If thisb.Enabled Then TempButtonList.Add(thisb)
            End If
        Next
        If TempButtonList.Count = 0 Then Exit Sub
        Dim Rnd As New Random
        TempButtonList(Rnd.Next(0, TempButtonList.Count - 1)).PerformClick()
    End Sub
    End Class
    

    Dim Zug As Boolean = True 确定播放器或计算机当前是否在队列中以选择按钮。每次按下按钮都会打开它,因此玩家轮流进行。 ComputerMove函数在玩家点击按钮后执行。

    【讨论】:

    • 似乎没有工作......我需要将它添加到事件处理程序中吗?或者我在哪里,但它哈
    • 你把它放在你想让电脑点击一个按钮的地方。再说一遍:“不起作用”不是对错误的有用描述。
    • 表单出现空白,没有单元格/按钮可供点击游戏。
    • 我是否会创建另一个名为“ComputerTableButtonClickEvent”的子程序并将您给我的代码复制到子程序中,或者复制到上面的“使用 TableButtons”部分?
    • 查看编辑。作为一般建议:首先考虑您的游戏逻辑:此时会发生什么?写下来,画流程图。这样您自己就可以更轻松地找到解决方案。
    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多