ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 17098|回复: 18

[分享] Excel版【坦克大战】

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-9-26 19:53 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
(用"Timer类"编写的【坦克大战】)
【坦克大战】是个古老的游戏,大家都很熟悉。以前也设想过在excel里实现它,怎奈如果按顺序依次执行的办法实现许多物体同时都在移动,代码很不好写,效果也不好,而且,这些物体的移动频率不相同,实现起来就更困难了。
  前几天在测试文小峰版主提供的"Timer类"时发现多个类实例同时调用一个函数也没有问题,这真是太好了。
  游戏还没写完,敌方的6个坦克已经实现,目前只有一个能开炮,击中目标的代码还没有写。之所以急着放出来,是想和大家分享下这个类的功能。
(按F1开始,按小键盘回车结束)
更新:第二个附件里,除了玩家控制的坦克外,其余部分都完成了

[ 本帖最后由 HHAAMM 于 2011-6-14 13:48 编辑 ]
1.jpg

坦克大战.rar

63.33 KB, 下载次数: 518

坦克大战.rar

79.25 KB, 下载次数: 739

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-26 19:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
截图
tkdz.gif

TA的精华主题

TA的得分主题

发表于 2010-9-26 20:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Timer本身就是可以多个同时运行的,因为在启用的时间上有一定的时间差,所以Windows消息会依次发送,并且因为各个类是在不同的内存中,所以每个类都会在指定的时间内激活一次事件。不过它不是多线程更不是多进程。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-26 20:06 | 显示全部楼层
原帖由 joforn 于 2010-9-26 20:01 发表
Timer本身就是可以多个同时运行的,因为在启用的时间上有一定的时间差,所以Windows消息会依次发送,并且因为各个类是在不同的内存中,所以每个类都会在指定的时间内激活一次事件。不过它不是多线程更不是多进程。

"启用的时间"
下面代码
cTimer1.Interval = sd
cTimer2.Interval = sd + 20
cTimer3.Interval = sd + 40
cTimer4.Interval = sd + 60
cTimer5.Interval = sd + 80
cTimer6.Interval = sd + 100
改成
cTimer1.Interval = sd
cTimer2.Interval = sd
cTimer3.Interval = sd
cTimer4.Interval = sd
cTimer5.Interval = sd
cTimer6.Interval = sd
不知算不算时间相同,运行起来也没问题,但画面不好看

[ 本帖最后由 HHAAMM 于 2010-9-26 20:08 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-26 20:10 | 显示全部楼层
测试过,多个类同时调用一个要运行很长时间的函数时,也互不干扰

TA的精华主题

TA的得分主题

发表于 2010-9-26 20:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
牛!像楼主学习!

TA的精华主题

TA的得分主题

发表于 2010-9-26 20:16 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-26 20:16 | 显示全部楼层
多线程、多进程俺真的不懂,但“多个类实例同时调用一个函数也没有问题,就像是每个类实例各自有一套人马”,这个是什么现象,该如何解释。

TA的精华主题

TA的得分主题

发表于 2010-9-26 20:17 | 显示全部楼层
原帖由 HHAAMM 于 2010-9-26 20:06 发表

"启用的时间"
下面代码
cTimer1.Interval = sd
cTimer2.Interval = sd + 20
cTimer3.Interval = sd + 40
cTimer4.Interval = sd + 60
cTimer5.Interval = sd + 80
cTimer6.Interval = sd + 100
改成
cTim ...

严格上来讲,它们的启动时间还是不相同。
你每执行一条语句就会花掉一点时间,虽然很短。并且系统消息是轮询的,所以它发送一条消息过来后很快就转到其它的窗体上去了,一轮下来时间又花掉不少。并且这种Timer的时间并不精确,会有很大的误差(大概10毫秒以上)。

TA的精华主题

TA的得分主题

发表于 2010-9-26 20:20 | 显示全部楼层
原帖由 HHAAMM 于 2010-9-26 20:16 发表
多线程、多进程俺真的不懂,但“多个类实例同时调用一个函数也没有问题,就像是每个类实例各自有一套人马”,这个是什么现象,该如何解释。



应该不算多线程吧,更不能算多进程吧。

就像VB里面的Timer控件一样 大家都可以同时调用。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 22:33 , Processed in 0.036386 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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