计算机单击事件Visual Basic

时间:2014-04-06 08:03:26

标签: vb.net events random click

如何创建由计算机驱动的随机点击事件?用户无法选择点击的位置? 我创建了一个宽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

如何制作另类此类活动,但是随机发生?

1 个答案:

答案 0 :(得分: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确保您只在控件集合中添加按钮,因为当然可能还有其他控件。

完整示例

这可能更容易(添加一个尺寸= 275的FlowLayoutPanel; 275和一个表格的两个标签):

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功能。