楼主 ldy |
拼图游戏 纯粹的EXCEL VBA制作 支持2007纯粹的EXCEL VBA制作的拼图游戏。 没有API、没有外部引用,EXCEL提供很多强大实用的功能, 这个小游戏所反映出来的仅仅是Excel多元化应用的冰山一角。 此游戏系由简体中文版EXCEL2003制作,其他版本版的用户运行此游戏如有问题请回帖说明一下。 修改了部分语句,可以支持 Excel2007 游戏方法 开始游戏:任何时候点击 分图 按钮即可开始新游戏 点击空白旁边的小图,可以把小图移动到空白处。 所有小图恢复原始位置后,游戏结束。 选择图片:有两种途径 1是可导入电脑中图片,如果图片太大,会影响游戏效果,可以手工调整图片大小 2是可以从游戏自带图库中选图 选择难度:调整蓝色和绿色滚动条,确定图片切割的行列数量 从 2*2 到 7*7 ,修改滚动条控件的MAX属性可以把图片分割得更细 但是难度太大就失去游戏的趣味性了,建议玩3*3 或 4*4 辅助选项:在点击 分图 按钮时有效 初学乍练:显示有切割线的对照图 心中有数:显示原始图片 记忆超人:以上都不显示 重置按钮:返回游戏前状态,此时可以调整原图的大小和旋转角度,可以得到不同的游戏体验 VBA密码:LDY 拼图游戏-LDY.rar |
2楼 toby08 |
谢谢分享。不过还是出错: |
3楼 ldy |
奇怪,我这里没问题。我是2003和2007 都装了的,难道和这个有关。 出错时,点击一下调试,看看是那句出错? |
4楼 toby08 |
这两处出现问题: 指定的值超出了范围 → a.Top = kRg.Top 对象变量或With块变量未设置 → If yy = kRg.Column Then |
5楼 ldy |
第二个错误是 第一个错误发生后点击了结束造成的。 第一个问题很奇怪,krg 是公共变量,是图中的空白单元格,这变量是在分图时就指定了的。 我这里不管怎么弄,都不会出现这个错误,按照错误编号,应该是公共变量被清空,VBA访问不到,才会出现这种情况, 公共变量被清空,出现这种情况的原因 1是进入了设计状态 ,2是在编辑器中点击了终止按钮。 从你的录像来看,并没有这样的操作,有一种可能性,就是加载宏中有类似代码实现了上述两种操作(例如有END 语句)。 如果有条件,你换一台电脑试试,或者禁用第三方加载宏。 初步判断,游戏本身没有错误,应该是其他方面的原因(其他代码中有END语句,并被触发了) 具体原因,还需要进一步测试,你把下面的 moveP 过程替换文件中moveP,再测试一次 代码中仅仅多了红色部分 看看对话框返回的是 什么内容。 Sub moveP(nm As String, Optional F As Boolean) Dim a As Shape Set a = Sheet1.Shapes(nm) Dim r As Range Set r = a.TopLeftCell xx = r.Row yy = r.Column If yy = kRg.Column Then If xx + 1 = kRg.Row Or xx - 1 = kRg.Row Then If Not F Then MsgBox kRg.Address & " " & kRg.Top a.Top = kRg.Top a.Left = kRg.Left Set kRg = r clicks = clicks + 1 If F = False Then Range("b1") = "第 " & clicks & " 步" End If End If If xx = kRg.Row Then If yy + 1 = kRg.Column Or yy - 1 = kRg.Column Then If Not F Then MsgBox kRg.Address & " " & kRg.Top a.Top = kRg.Top a.Left = kRg.Left Set kRg = r clicks = clicks + 1 If F = False Then Range("b1") = "第 " & clicks & " 步" End If End If Set r = a.TopLeftCell xx = r.Row - 1 yy = r.Column - 1 If (xx - 1) * x + yy & "P" = nm And F = False Then 检验 End If End Sub |
6楼 ldy |
这是一个开始从社区下载文件,到运行游戏的完整全屏录像,一切正常。 |
7楼 toby08 |
出现了对话框: |
8楼 ldy |
接下来还出错吗? a.Top = kRg.Top 相当于 a.top = 99.75 |
9楼 ldy |
如果你的Excel2007 连这样的语句都不支持,而你又没时间深究的话,建议重装一下。 |
10楼 toby08 |
好像还出错了,很奇怪,点击空白单元格上方的图片后,调试代码后,用鼠标指向a.Top时,显示=27; 指向kRg.Top 时,显示=99.75。点左边的图片,则a.Top=kRg.Top =99.75不知道为什么会这样 |
11楼 toby08 |
也许真的是我的office2007出了问题, |
12楼 ldy |
确实很离奇,因为 “错位” 过程中已经多次调用过 moveP,但不会出错 试一下这样 把 a.top = krg.top 改为 Sheet1.Shapes(nm).top = krg.top *1 如果还出错,没辙了,恐怕要重装一下了。 |
13楼 ldy |
EH的网友进行了其他尝试,估计可能是版本问题,分图后,你直接取消保护看是否能运行? 保护工作表是为了避免游戏是图片被随意拖动,我的2007下保护后图片不能被选中,但可以接受VBA代码移动图片。 看来你的那个版本在保护后 图片不能被选中,也不接受VBA代码移动图片。 下面代码加两行,红色部分代码,可以避免游戏中拖动图片的行为。 Sub movePIC() Dim nm As String nm = Application.Caller Sheet1.Unprotect moveP nm Sheet1.Protect End Sub |
14楼 toby08 |
分图后直接取消保护就可以运行了。原来是保护工作表的缘故, |
15楼 HHAAMM |
刚刚看到帖子,真不错,赞赞赞! Sub 分图() 还不明白是个什么道理,有时间仔细看代码 |
16楼 HHAAMM |
点击分图后,去掉表保护,复制一个小图到别的表,再保存为网页。看到被分解后的小图了,原来还以为是障眼法那,现在知道真的是把图分解了。 这个功能不错,有用 |
17楼 HHAAMM |
还没仔细看,但居然没用到API,这是excel的强大,也是刘版的强大 |
18楼 HHAAMM |
还不清楚是个什么道理,先问下刘版 这个引出的问题,图片可以按曲线分割不 要是可以,俺准备做的地图工具,就不用找别的软件来分割图片了 |