我在vb中制作了一个迷宫(使用mdsn.com上的教程),但是你能够绕过迷宫直接到达终点,所以我尝试添加一个名为cheater的布尔值,当用户退出表单时,它变为true然后给你ua 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
答案 0 :(得分:0)
如上面的评论中所示,退出的控件MouseLeave事件在另一个控件的MouseEnter事件之前触发。下面的解决方案有效(虽然它有点笨拙,可能有一种更优雅的方式)。
在表单中添加一个Timer。
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