我在我的excel上运行一个非常简单的" Snake"类游戏,这意味着我需要在我的main-while循环中连续更新屏幕。 "蛇" (基本上是一个彩色单元格)在20x20表中随机移动。
它可以工作几秒钟,然而,某些点屏幕停止更新; ans excel停止响应,同时仍然运行代码。这会导致崩溃。
我使用For循环进行循环,这避免了崩溃,但仍然会停止更新,直到循环结束。当循环停止时,屏幕最后一次更新。 我还包括了#34;睡眠"但是,每个函数之后的语句都没有帮助。 这是主要代码:
Sub main()
Dim table(20, 20) As Integer
Dim index_move As Integer
'Position class contains only X and Y parameters
Dim index_actual_head_pos As Position
Set index_actual_head_pos = New Position
Dim i As Long
index_actual_head_pos.x = 5
index_actual_head_pos.y = 15
Application.ScreenUpdating = True
For i = 1 To 50 'this remplaces the initial while loop
'next line generates a random movement, bounded by a 20x20 matrix
index_move = generer_movement(index_actual_head_pos)
'next line updates the "snake" position params
Call update_position(index_actual_head_pos, index_move)
'next line deletes previous snake and draws a new one
Call draw(index_actual_head_pos)
Sleep (200)
Next i
End Sub
请注意,问题实际上是屏幕更新。如前所述,我不知道如何强制excel连续更新屏幕
非常感谢,
丹尼斯
答案 0 :(得分:1)
您应该放弃Sleep(200)
并让Excel应用程序对象进行200毫秒的处理。
dim dTill as double 'should be at the top with the other var declarations
dtill = Timer + 0.200
do while timer < dTill and timer > 0.200: DoEvents: loop
timer > 0.200
很重要,因为Timer会在午夜重置,如果你在¹/ 5秒内过夜,你不会希望它在24小时内停止运转。