| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4102 人关注过本帖
标题:我也开新贴吧
只看楼主 加入收藏
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
修改完毕,但是我发现风版的代码似乎兼容性很差啊,我把代码进行了略微修改(核心未改),但是运行直接死机了……
放上源代码:
小游戏 修改版.rar (6.84 KB)

我做了很多断点,发现错误点详细到这段代码:
Do
    .X = Int(Rnd() * MaxX)
    .Y = Int(Rnd() * MaxY)
Loop While Abs(.X - DDian.X) < i And Abs(.Y - DDian.Y) < i              '如果有大点周围,重新去产生位置
再仔细查错,发现MaxX一直是0……不知道为什么,正在努力查错,大家也帮忙看看吧

[此贴子已经被作者于2016-5-30 16:09编辑过]


编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2016-05-30 16:03
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
刚才查错发现楼上所述的代码还是我的问题……我的这段代码被移到Form_Load环节了,当然没有来得及触发resize事件

解决方案:添加新的timer,interval为10,把一部分代码放到里面去,也就是延时加载,不会出错了
放上代码
小游戏 修改版.rar (6.82 KB)


还有一个小问题:FPS显示不正常,一直保持在32,没变过

[此贴子已经被作者于2016-5-30 16:27编辑过]


编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2016-05-30 16:10
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
Form2 代码中:
Private Sub Timer3_Timer()
这行改成:
Public Sub startgame()
同时去掉这个过程中最后一句,
Timer3.Enabled = False
删掉 Timer3 这个控件。

Form1 代码中:
Form2.Show
Call Form2.startgame            '加一句手动调用
Unload Me

------------------
FPS:肯定是游戏中段肯定稳定的,在游戏刚开始那下是比较低,然后稳定到正常水平,结束时,对应框显示时,FPS 会掉到 0 去。
如果不关掉FORM2 的话,就可以看到 FPS 会稳定在一个很高的水平,我自己电脑是可以达到 65 以上。

-------------------
你的 Difficulty 是从1-4,而我的名字数组是从 0-3 ,所以这段代码里需要 减 1 。
另外,计分,可以根据难度来计分。这句        Score = Score + 1   你可以按难度变化。

程序代码:
Private Sub Timer2_Timer()

Select Case GameMode
    Case Gamerun                '运行状态,按1秒2分进行 计分
        Score = Score + 1
        Me.Caption = "反应速度测试-难度:" & LdStr(Difficulty - 1) & " 得分:" & Score & "  FPS: " & FPS
        FPS = 0
    Case GameMin                '游戏最小化时,直接暂停,不需要处理
    Case Gamestop               '游戏结束状态
        Me.Caption = "反应速度测试-结束 FPS: " & FPS
        FPS = 0
    Case GamePause              '游戏暂停状态,需要提示暂停
        Me.Caption = "反应速度测试-难度:" & LdStr(Difficulty - 1) & " 得分:" & Score & " 暂停 FPS: " & FPS
        FPS = 0
End Select
End Sub


[此贴子已经被作者于2016-5-30 17:46编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2016-05-30 17:23
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
保存记录,不要用你那么复杂的方法,四个数值,竟然保存在四个文件里。
程序代码:
If GameEnd Then
    GameMode = Gamestop
    
    Dim s As String                     '记录文件
    Dim m(3) As Long                    '4个记录,按顺序来。0号是简单,1号是普通,2困难,3是爆炸,与 Difficulty 变量值对应
    Dim fr As Long                      '文件号
    
    s = App.Path                        '取程序路径
    If Right(s, 1) <> "\" Then          '根据程序路径最后是否存在 \ 符号,生成存盘文件名
        s = s & "\Score.sav"
    Else
        s = s & "Score.sav"
    End If
    
    fr = FreeFile                       '取空闲文件号,防止出错
    If Dir(s) <> "" Then                '文件存在
        Open s For Binary As #fr        '打开文件
            Get #fr, , m                '一次性读四个值,这里文件如果损坏,会导致程序报错,需要处理,这里省略,自己想。
        Close fr
    End If
    
    If Score > m(Difficulty - 1) Then   '如果破了指定难度的记录
        m(Difficulty - 1) = Score       '保存记录
        Open s For Binary As #fr        '打开文件
            Put #fr, , m                '写入记录
        Close fr
        MsgBox "你死了!游戏结束!你的分数是最高纪录!分数:" & CStr(Score)
    Else
        MsgBox "你死了!游戏结束!未破纪录。分数:" & CStr(Score)
    End If
    Form1.Show '显示开始界面
    Unload Me '卸载窗体
    Exit Sub
    
End If


Form3 的代码
程序代码:
Private Sub Form_Load()
Dim a As String
On Error Resume Next '无纪录依然可以显示

    Dim s As String
    Dim m(3) As Long
    Dim fr As Long
    
    s = App.Path
    If Right(s, 1) <> "\" Then
        s = s & "\Score.sav"
    Else
        s = s & "Score.sav"
    End If
    
    fr = FreeFile
    If Dir(s) <> "" Then
        Open s For Binary As #fr
            Get #fr, , m
        Close fr
    End If

Label1.Caption = m(0)
Label2.Caption = m(1)
Label3.Caption = m(2)
Label4.Caption = m(3)
End Sub


授人于鱼,不如授人于渔
早已停用QQ了
2016-05-30 17:42
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
难以至信的优化结果:
100000 个点,我的电脑达到了 32 FPS
再增加点,立即报错,感觉是数组占用的内存爆掉了。

优化方向,干掉 Circle 方法,而使用直接操作内存写入数据来生成图形的方法。
现在带来的后果就是 生成的圆,有毛刺,有点像的头样的。

现在就是一个问题,程序稳定性比较差,正在努力中。

----------------
照例,因多线程主体框架不是我的,所以只传编译后的文件。CPU占用率40%
VBMT.rar (10.93 KB)


------------去掉结束游戏那部分判断代码抓图测试代码----------------
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2016-5-30 22:06编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2016-05-30 21:53
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
回复 15楼 风吹过b
这两天没上线,谢谢风版的帮助!事实上这两天我也进行了一些改进,你所说的缺陷我也发现了部分,现在把新的源代码放上来
话说我准备加入成就系统,高难度动作加分……正在努力思考中
另外,你所说的存储方式我参考了一下,也很好,存储在了1个文件当中,但是我存储在4个文件是方便手动删除最高纪录值的,因此这段我没有改动(反正没多少影响嘛)
小游戏 修改版.rar (6.94 KB)

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2016-06-01 17:33
八云
Rank: 2
等 级:论坛游民
威 望:1
帖 子:4
专家分:20
注 册:2018-3-19
收藏
得分:0 
回复 15楼 风吹过b
能看到“直接操作内存写入数据来生成图形”的源码就好了
2018-03-19 03:09
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
回复 17楼 八云
源码在这: https://bbs.bccn.net/thread-481230-1-1.html

授人于鱼,不如授人于渔
早已停用QQ了
2018-05-10 22:21
快速回复:我也开新贴吧
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023146 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved