-6

我正在尝试使用图片框开发一个简单的游戏

例如,如果您有 3 个不同的图片框,每个图片框都包含一个独特的图片 当加载表单时,一个框可见,而另外两个不可见 玩家必须在可见的图片框变为不可见之前单击它(为框指定时间保持可见)

示例:框 1 保持可见 5 秒,如果在 5 秒内没有单击框,框 1 变为不可见,另一个随机框将变为可见。当然,如果用户点击图片成功,他的分数就会被更新,可以通过缩短时间来制作不同的级别。

该代码可能是放置在表单加载中的一个代码有帮助吗?谢谢

4

2 回答 2

0

我可能会使用秒表 - 计时器会很困难,因为我不知道当用户成功点击时将计数重置回 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()。

(我没有意识到这会重置它,但显然它确实如此)

于 2013-02-28T17:48:06.893 回答
0

使用间隔为 5000 的计时器,然后在经过的事件处理程序中

Timer.stop()
Losses = Losses + 1
selectNewPictureBox()
Time.start()

然后在图片框处理程序中

Timer.stop()
Wins = Wins + 1
selectNewPictureBox()
Timer.start() 
于 2013-02-28T19:53:30.217 回答