|

楼主 |
发表于 2004-8-2 09:43:00
|
显示全部楼层
Re:请各位大虾帮帮忙,为何我用VB做的小游戏在win98下可
各位大侠:你们好,下面这段代码是实现蛇移动的,但存在一个bug,至今无能为力(VB新手),还望大家赐教,设计思路为:定义一个方向变量way,默认值为"right"(当按上时way="up";当按下时way="down"...),通过计时器tmrMove每隔一端时间检测way变量(代码如下).并判断蛇的前进.这时,问题来了,假设蛇现在向右移动(way="right"),此时你很快的依次按"下","左",而巧就巧在计时器tmrMove未检测到way="down"(因每隔一端时间检测way变量,而当你按"下"时,计时器tmrMove将好处于"盲点"上,进一步说,如果tmrMove每隔一秒检测一次,而你按"下"时恰好在一秒内),致使
蛇撞上自己。???请各位大侠们帮帮忙,我应如何解决此bug,是否可以不使用计时器就能使蛇移动?还是......
Dim way AS string
Private Sub tmrMove_Timer()
'/*要点:设蛇头为n,则蛇的第(n-1)的坐标为n前一次的坐标,蛇的第(n-2)的坐标为(n-1)前一次的坐标*/'
'/*蛇的第(n-3)的坐标为(n-2)前一次的坐标………………蛇的第(n-x)的坐标为(n-x+1)前一次的坐标*/'
If SnakeLong / 100 = 70 Then mnuquestion.Visible = True '如果蛇长为70个点,则开启隐藏菜单
Select Case way
Case "right" '如果方向变量值为《右》,则实现蛇向右移动
For i = 1 To SnakeLong / 100
If i = 1 Then
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(1)
tempy(1) = pointy(1)
tempx(2) = pointx(1)
tempy(2) = pointy(1)
pointx(1) = pointx(1) + 100
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
Label3.Caption = "蛇头的x=" & pointx(i) '标记蛇头的x坐标
Label4.Caption = "蛇头的y=" & pointy(i) '标记蛇头的y坐标
Else
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(i)
tempy(1) = pointy(i)
pointx(i) = tempx(2)
pointy(i) = tempy(2)
tempx(2) = tempx(1)
tempy(2) = tempy(1)
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
End If
Next
Case "left" '如果方向变量值为《左》,则实现蛇向左移动
For i = 1 To SnakeLong / 100
If i = 1 Then
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(1)
tempy(1) = pointy(1)
tempx(2) = pointx(1)
tempy(2) = pointy(1)
pointx(1) = pointx(1) - 100
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
Label3.Caption = "蛇头的x=" & pointx(i) '标记蛇头的x坐标
Label4.Caption = "蛇头的y=" & pointy(i) '标记蛇头的y坐标
Else
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(i)
tempy(1) = pointy(i)
pointx(i) = tempx(2)
pointy(i) = tempy(2)
tempx(2) = tempx(1)
tempy(2) = tempy(1)
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
End If
Next
Case "up" '如果方向变量值为《上》,则实现蛇向上移动
For i = 1 To SnakeLong / 100
If i = 1 Then
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(1)
tempy(1) = pointy(1)
tempx(2) = pointx(1)
tempy(2) = pointy(1)
pointy(1) = pointy(1) - 100
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
Label3.Caption = "蛇头的x=" & pointx(i) '标记蛇头的x坐标
Label4.Caption = "蛇头的y=" & pointy(i) '标记蛇头的y坐标
Else
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(i)
tempy(1) = pointy(i)
pointx(i) = tempx(2)
pointy(i) = tempy(2)
tempx(2) = tempx(1)
tempy(2) = tempy(1)
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
End If
Next
Case "down" '如果方向变量值为《下》,则实现蛇向下移动
For i = 1 To SnakeLong / 100
If i = 1 Then
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(1)
tempy(1) = pointy(1)
tempx(2) = pointx(1)
tempy(2) = pointy(1)
pointy(1) = pointy(1) + 100
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
Label3.Caption = "蛇头的x=" & pointx(i) '标记蛇头的x坐标
Label4.Caption = "蛇头的y=" & pointy(i) '标记蛇头的y坐标
Else
picMain.PSet (pointx(i), pointy(i)), BackColor
tempx(1) = pointx(i)
tempy(1) = pointy(i)
pointx(i) = tempx(2)
pointy(i) = tempy(2)
tempx(2) = tempx(1)
tempy(2) = tempy(1)
picMain.PSet (pointx(i), pointy(i)), QBColor(snakecolor)
End If
Next
End Select
End Sub
|
|