游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3065|回复: 5

请各位大虾帮帮忙,为何我用VB做的小游戏在win98下可以运

[复制链接]

8

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2004-8-1 16:43:00 | 显示全部楼层 |阅读模式
各位大虾,你们好,本人在2003年才接触电脑,之后便迷上编程,接着
开始自学VB(VB新手[学龄半年])。现自己编了个桌面小游戏-----贪吃蛇(画面不太好),但在win98下可以运行,而在win2000下运行一段时间会产生错误,不知为什么。我是用VB6.0开发的,全部使用标准控件,采用pset()语句画蛇,起初蛇长为十个点,吃一个豆子增加一个点,当蛇长为整数时(十除外),便升一级,蛇的颜色随机改变(有声音)。
{因为今天在网吧上网,源程序明天上传,希望各位大虾到时帮帮忙!}
                                                                     求助!
                                                                     真诚的感激大虾们 [em24]

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2004-8-1 18:36:00 | 显示全部楼层

Re:请各位大虾帮帮忙,为何我用VB做的小游戏在win98下可

具体的错误呢!!

我的个别程序也有类似情况!
我就在2000的机器上编译!就好了!^_^

8

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
 楼主| 发表于 2004-8-1 18:46:00 | 显示全部楼层

Re:请各位大虾帮帮忙,为何我用VB做的小游戏在win98下可

谢谢!
源程序明天上传

8

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
 楼主| 发表于 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

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2004-8-2 11:51:00 | 显示全部楼层

Re:请各位大虾帮帮忙,为何我用VB做的小游戏在win98下可

两种方法解决bug!
1.操作判定,蛇动之前只接受一次操作!多余全部略过!
2.提高响应,不用记时器,换循环

12

主题

54

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2004-8-2 18:30:00 | 显示全部楼层

Re:请各位大虾帮帮忙,为何我用VB做的小游戏在win98下可

do while myQuit= flase
   if  (lngNum mod intSpeed)=0 then'当移动完一格后,intSpeed为移动动一格所要的循环次数
      if bytNextWay<>0 then  bytNowWay=bytNextWay
     '------------------------
     '判断是否相撞的代码段
     '------------------------
   endif
'+++++++++++++++++++
蛇向bytNowWay方向移动的代码段
画蛇的代码段
'+++++++++++++++++++
   lngNum=lngNum+1
   if lngNum=10000000 then lngNum=0
loop

sub form_keypress( keyi... )
select case keyi... '这个参数单词有点记不清了
case vbkeyescape '是ESC
myQuit= true
case vbkeyup'
bytNextWay=1
case vbkeyright
bytNextWay=2
case vbkeydown
bytNextWay=3
case vbkeyleft
bytNextWay=4
end select
end sub
随手写的,大概结构

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-14 15:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表