我正在尝试使用图片框开发一个简单的游戏
例如,如果您有 3 个不同的图片框,每个图片框都包含一个独特的图片 当加载表单时,一个框可见,而另外两个不可见 玩家必须在可见的图片框变为不可见之前单击它(为框指定时间保持可见)
示例:框 1 保持可见 5 秒,如果在 5 秒内没有单击框,框 1 变为不可见,另一个随机框将变为可见。当然,如果用户点击图片成功,他的分数就会被更新,可以通过缩短时间来制作不同的级别。
该代码可能是放置在表单加载中的一个代码有帮助吗?谢谢
我可能会使用秒表 - 计时器会很困难,因为我不知道当用户成功点击时将计数重置回 0 的方法。
像这样声明一个秒表:
Private maxWaitTimer As New Stopwatch
然后,也许可以在您的表单加载事件中使用“游戏循环”类型的东西......也许是这样的:
maxWaitStopwatch.Start()
While(GameIsRunning)
If maxWaitStopwatch.ElapsedMilliseconds > 5000 Then
Losses = Losses + 1
selectNewPictureBox()
maxWaitStopwatch.Restart()
Else
Application.DoEvents() 'this gives the program a chance to execute the picture box click event, among other things (resize, drag, etc... since we are spinning in a loop)
End If
'System.Threading.Thread.Sleep(100) 'uncommenting this line will prevent it from maxing out your processor, although it will be slightly less responsive
End While
你的图片框可以实现这样的东西:
Wins = Wins + 1
selectNewPictureBox()
maxWaitStopwatch.Restart()
基本上,您的程序在一个循环中旋转,检查计时器是否已过,如果是,则移动图片。
点击事件增加分数 - 它有机会在循环的“application.doevents()”部分运行。
添加 sleep(100) 会稍微减慢它的速度(并使它稍微不准确,大约 100 毫秒),但它会阻止它使用大量的 CPU。您可能不会注意到速度的差异。
不过,可能有更好的方法来做到这一点......
编辑 - 反映史蒂文所说的,如果你使用计时器而不是循环会更好:
用户点击图片时使用stop(),之后调用start()。
(我没有意识到这会重置它,但显然它确实如此)
使用间隔为 5000 的计时器,然后在经过的事件处理程序中
Timer.stop()
Losses = Losses + 1
selectNewPictureBox()
Time.start()
然后在图片框处理程序中
Timer.stop()
Wins = Wins + 1
selectNewPictureBox()
Timer.start()