-1

我在 vb 中制作了一个迷宫(使用 mdsn.com 上的教程),但你能够绕过迷宫并直接到达终点,所以我尝试添加一个名为 cheater 的布尔值,当用户退出表单然后给 ua 时它会变为 true如果你输入我用来完成的标签,mssgbox 会说作弊者而不是获胜者,但它总是给我作弊者

这是我关注最后一个子的代码

Public Class Form

Dim cheater As Boolean

Private BumpSoundPlayer = New System.Media.SoundPlayer("C:\Windows\Media\chord.wav")

Private finishSoundPlayer = New System.Media.SoundPlayer("C:\Windows\Media\tada.wav")

'Private cheaterSoundPlayer = New System.Media.SoundPlayer("C:\Windows\Media\\W\windows_critical_stop.wav")

Public Sub New()
    InitializeComponent()
    MoveToStart()
End Sub

Private Sub MoveToStart()
    Dim startingPoint = Panel1.Location
    startingPoint.Offset(40, 20)
    Cursor.Position = PointToScreen(startingPoint)
    cheater = False
End Sub

Private Sub wall_MouseEnter() Handles Label8.MouseEnter, Label9.MouseEnter, Label7.MouseEnter, Label60.MouseEnter, Label6.MouseEnter, Label59.MouseEnter, Label58.MouseEnter, Label57.MouseEnter, Label56.MouseEnter, Label55.MouseEnter, Label54.MouseEnter, Label53.MouseEnter, Label52.MouseEnter, Label51.MouseEnter, Label50.MouseEnter, Label5.MouseEnter, Label49.MouseEnter, Label48.MouseEnter, Label47.MouseEnter, Label46.MouseEnter, Label45.MouseEnter, Label44.MouseEnter, Label43.MouseEnter, Label42.MouseEnter, Label41.MouseEnter, Label40.MouseEnter, Label4.MouseEnter, Label39.MouseEnter, Label38.MouseEnter, Label37.MouseEnter, Label36.MouseEnter, Label35.MouseEnter, Label34.MouseEnter, Label33.MouseEnter, Label32.MouseEnter, Label31.MouseEnter, Label30.MouseEnter, Label3.MouseEnter, Label29.MouseEnter, Label28.MouseEnter, Label27.MouseEnter, Label26.MouseEnter, Label25.MouseEnter, Label24.MouseEnter, Label23.MouseEnter, Label22.MouseEnter, Label21.MouseEnter, Label20.MouseEnter, Label2.MouseEnter, Label19.MouseEnter, Label18.MouseEnter, Label17.MouseEnter, Label16.MouseEnter, Label15.MouseEnter, Label14.MouseEnter, Label13.MouseEnter, Label12.MouseEnter, Label11.MouseEnter, Label10.MouseEnter, Label1.MouseEnter
    BumpSoundPlayer.play()
    MoveToStart()
End Sub


Private Sub Panel1_MouseLeave() Handles Panel1.MouseLeave
    cheater = True
End Sub

Private Sub FinishLabel_MouseEnter() Handles FinishLabel.MouseEnter
    If cheater = True Then
        'cheaterSoundPlayer.play()
        MessageBox.Show("sneaky little cheater")
        MoveToStart()
    Else
        finishSoundPlayer.play()
        MessageBox.Show("yay you did it")
        'Close()
        MoveToStart()
    End If

End Sub

End Class
4

1 回答 1

0

如上面的评论所示,一个退出的控件 MouseLeave 事件在另一个控件的 MouseEnter 事件之前触发。下面的解决方案有效(虽然它有点笨拙,可能有一种更优雅的方式来做到这一点)。

在表单中添加一个计时器。

Dim cheaterCount As Integer = 0

Private Sub Panel1_MouseEnter(sender As Object, e As EventArgs) Handles Panel1.MouseEnter
    Timer1.Enabled = False
End Sub

Private Sub Panel1_MouseLeave(sender As Object, e As EventArgs) Handles Panel1.MouseLeave
    Timer1.Enabled = True
End Sub

Private Sub Label1_MouseEnter(sender As Object, e As EventArgs) Handles Label1.MouseEnter
    If cheaterCount >= 1 Then 'this equates to 1/10th second, but you can change this to whatever time interval you think is a valid time frame to move from your panel to the label.
        MsgBox("Cheater")
    Else
        MsgBox("Okay")
    End If
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    cheaterCount += 1
End Sub
于 2013-08-14T20:14:39.463 回答