ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:23.04KB ,
资源ID:9184312      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9184312.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(EXCEL 游戏.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

EXCEL 游戏.docx

1、EXCEL 游戏一:纸牌游戏启动Excel程序,依次点击工具栏中“工具/自定义”菜单,切换至“命令”标签页,选中左侧“类别”栏中的“工具”菜单,向下拖动右侧“命令”栏侧边滑块,找到带有纸牌图形的“自定义”选项(如图),将它拖至Excel工具栏中,点击“关闭”按钮将“自定义”对话框关闭。现在,Excel工具栏中就多了一个纸牌按钮,点击该按钮,熟悉的纸牌游戏界面就出现在你面前了。二: MicroSoft Excel 2000 暗藏赛车游戏 1.开启Excel之后随便开一新文档,将它另存成Web画面 ,按下发布后再将“添加交互对象”打勾,将档案储存为car.htm(文件名可自取)。2.在IE中开启c

2、ar.htm,你应该会看到电子表格出现在网页中央,如图1: 图1 3.在这个工作表中,先用PageDown键移动工作表的矩形光标直至第2000行,注意只能用PageDown键,然后用Tab键横向向右移动光标直至WC列,也是只能用键操作,到此,所有的准备工作已经完毕,该是调出游戏的时候了。 4.同时按住Shift+Crtl+Alt 然后点选左上方的 Office logo 。 5.开始玩了,如图2: 图2 6.玩法提示: 玩游戏的时候,被你控制的是那一辆浅蓝色的汽车,操作的主要是四个箭头按键。作用是:左右箭头可以控制汽车的方向:向上箭头可以加速, 向下的箭头减速;如果汽车运行到了夜间,可用H键打

3、开车灯。 绝对好玩!三:数字华容道先说个简单的。大家玩过那个数字华容道吧,就是有N*N个格,有一格是空的,其他格是次序混乱的拼图或数字,游戏的目的就是利用这唯一的这个空格移动各块拼图把混乱的拼图(数字)恢复(顺序)。这里我们小游戏的目的是要把1至15这15个次序混乱的数字恢复从1到15的顺序排列。打开Excel后打开代码编写器(Alt + F11),将如下代码写入模块中。程序首先是初始化。定义变量,选择4*4的空格,调整表格大小,改变单元格颜色(标示出游戏区域),然后是让1到15非重复随机分布到前15格空格中:Public Const PW = E 本游戏由Excel吧bengdeng整理!P

4、ublic Running As Boolean 用于判断游戏是否进行中,如果要中途退出或玩家需要重玩用此变量控制Public SRan As Range 游戏左上单元格Public BRan As Range 游戏空格单元格Public N As Integer 游戏区域大小Public GRan As Range 游戏区域,这里由N与SRan生成Public Bs As Integer 游戏步数Public STime As Date 游戏开始时间Sub GameStar()Dim i As IntegerDim ii As IntegerDim temp As IntegerDim a(

5、14) As IntegerDim down As VbMsgBoxResult判断游戏是否在运行If Running Then down = MsgBox(游戏正在进行!是否重玩?, vbYesNo, 提示 - & PW) If down = vbNo Then Exit SubEnd IfRunning = TrueN = 4 设定游戏区域为4*4Set SRan = Range(E5) 设定游戏开始单元格为E5Set BRan = SRan.Offset(N - 1, N - 1) 设定游戏空单元格Set GRan = Range(SRan, BRan)游戏区域(颜色)初始化,省略了单元

6、格大小的调整,大家可以应该加入相应语句让游戏外观整齐If ActiveSheet.ProtectContents Then ActiveSheet.Unprotect Password:=PWGRan.ClearContentsGRan.Interior.ColorIndex = 35随机数数组初始化,这里是编号0到编号14共15个数For i = 0 To (N * N - 2) a(i) = i + 1Next i不重复随机分布各数For i = N * N - 2 To 0 Step -1 Randomize ii = Int(Rnd * i) temp = a(i) a(i) = a(

7、ii) GRan.Item(i + 1) = a(i) a(ii) = tempNext iBs = 0STime = Now()ActiveSheet.Protect Password:=PWEnd Sub很明显,Excel的单元格是游戏的主角。初始化后游戏开始,逻辑很简单:玩家每单击一个单元格(产生Workbook中的SheetSelectionChange事件),游戏就判断这个格是否在游戏区域中,若是就判断上下左右4个方向是否有空格,如果有空格就把原单元格中的数传到空格中,原单元格清空(空格与原单元格交换),然后判断游戏是否结束(1到15顺序排序了?),若还没有,什么都不做,等下一次单击

8、事件发生。Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)Dim down As VbMsgBoxResultDim i As IntegerIf Running Then所单击单元格是否就是空格 If Len(ActiveCell) 0 Then所单击单元格是否在游戏区域 If Not (Application.Intersect(ActiveCell, GRan) Is Nothing) Then所单击单元格上下左右是否有空格 If (Abs(BRan.Column -

9、ActiveCell.Column) = 1 And BRan.row = ActiveCell.row) Or (Abs(BRan.row - ActiveCell.row) = 1 And BRan.Column = ActiveCell.Column) Then单元格与空格交换 If ActiveSheet.ProtectContents Then ActiveSheet.Unprotect Password:=PW BRan = ActiveCell ActiveCell.ClearContents Set BRan = ActiveCell Bs = Bs + 1 ActiveShe

10、et.Protect Password:=PW判断游戏是否结束? i = 1 Do While (i N * N And GRan.Item(i) = i) i = i + 1 Loop If i = N * N Then MsgBox 祝贺你!你成功了! & vbCrLf & _ 一共用了 & Bs & 步! & vbCrLf & _ 一共用用时 & Format(Now - STime, h:m:s), , PW Running = False End If End If End If End IfElse down = MsgBox(游戏还未进行,是否开始?, vbYesNo, 提示 -

11、 & PW) If down = vbYes Then GameStarEnd IfEnd Sub四:跑跑卡丁车.xls网上到处可下!注:打开Excel后,若不能玩,点菜单栏上的工具宏安全性,将安全级别设为低,便可以玩了五:贪吃蛇源码首先要解决游戏显示的问题。对我们来说,小游戏最好的平台是Excel的工作区,由于大小可调、颜色可填的单元格操作方便,我们完全可以把它们当像素来使用。于是我们的贪吃蛇游戏就有了以单元格为基础的像素形式的显示方式了。其次是游戏的控制方法。在这里我摸索了好久,其中走了弯路不说,我最后的结论是在Excel中要实现按键事件的方法是引入窗体,然后在窗体中响应Keydown与K

12、eypress事件。这样的话,既可以快速响应还可以根据情况修改对应按键。 最后是游戏的定时问题。所有的游戏事实上都是在一个时间大循环里面定时接收输入信息更新状态的程序,我们的小游戏都不例外。老实说,我写这个游戏大部分的思考时间就浪费在如何实现游戏定时这里。Excel的VBA中与定时有关的只有onTime函数,没有其他相关函数提供了,onTime函数可以实现某一事件在指定时间发生,但只能以秒为最小单位,对我们要在一秒内更新数十次信息的小游戏不适合,我们只能另找方法。用过VB的人都知道VB控件中有个定时控件,用它来实现游戏定时是最好的,但在Excel中却没有,难道我要把VB中的定时控件移植到VBA

13、中?这也是个很值得研究的课题,但是我想到了另外的方法。VB的程序员都知道要想VB程序发挥大作用一定离不开调用系统的API,于是我查看了系统相关API的帮助,发现系统API中实现相应功能的有settimer与killtimer函数,具体定义和用法大家可以参考相关帮助,但从字面大家都已经可以知道它们就是我们要找的东西了。那么现在的问题就是如何在vba环境下调用系统API。心想微软称vba就是office中的vb,那么在vba中调用系统API应该也与在VB中的一样。一试,呵呵,果然非虚,这微软真不是盖的(后在msdn中发现ms office vba从2000版本开始支持调用系统API,大家可以拓展o

14、ffice应用了)。就这样游戏输入、输出、逻辑定时的问题都解决了,我们的吃蛇游戏就仅剩下算法逻辑部分了。我们的游戏逻辑是,游戏初始化后,启动定时器。在每次定时循环中,程序分别实现蛇头移动与蛇尾移动。首先是移动蛇头,游戏判断在移动方向上蛇头下一个的位置是否为空格,若是则把这位置的空格填上颜色(蛇头移动),蛇尾移动标志设为真;如果蛇头下一个位置不是空格(即有食物),则把这位置的空格填上颜色(蛇头移动)后把蛇尾移动标志设为假。接着到蛇尾移动部分,若蛇尾移动标志为真则把蛇尾原所在单元格填回白色(蛇尾移动),并更新蛇尾位置;如果蛇尾移动标志为假,则什么都不做(蛇尾不动蛇头动,蛇身长了)。对于整个游戏来说

15、,效率的瓶颈在于像素操作(对单元格频繁填色)。但从以上算法可以看到,在每次循环中程序只需处理蛇头及蛇尾所在单元格;如果贪吃蛇吃到食物,则只需要更新蛇头单元格。每个时间循环里较少的数据处理量实现了游戏较快的响应速度,贪吃蛇游戏在Excel中实现也有了实际意义。游戏还是以宏的形式实现。大家新建一个宏,输入如下代码。 熟悉VB的程序员知道首先是对调用系统API的声明Public Declare Function SetTimer Lib user32 (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal l

16、pTimerFunc As Long) As Long Public Declare Function KillTimer Lib user32 (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long 定义数据结构Type pos_ row As Long col As LongEnd TypePublic timerset As Long SetTimer函数的返回值,用以标记已存在的Timer,KillTimer以此为参数销毁所标记的TimerPublic gaming As BooleanPublic pulsed As BooleanP

17、ublic head_movement As Long 蛇头新移动方向标志,1、2、3、4代表右上左下Public tail_movement As Long 蛇尾移动方向标志,意义同上Public oldhead_movement As Long 蛇头旧有移动方向标志Dim tailmove As Boolean 蛇尾移动标志Dim origin_size As Long 贪吃蛇原始大小Public score As LongDim steps As LongDim clean As BooleanDim sth As pos_Dim headrow As Long 蛇头所在行位置Dim h

18、eadcol As Long 蛇头所在列位置Dim tailrow As Long 蛇尾所在行位置Dim tailcol As Long 蛇尾所在列位置Dim startpos As pos_ 贪吃蛇起始位置Dim color As LongConst left As L 5 游戏区域左边边界Const right As L 30 游戏区域右边边界Const top As L 3 游戏区域上边边界Const bottom As L 25 游戏区域下边边界Function main() 主函数 gaming = False If Worksheets.Count = 6 Then steps =

19、 0 Randomize sth.row = Int(bottom - top) * Rnd) + top + 1 Randomize sth.col = Int(right - left) * Rnd) + left + 1 Do While sth.row = bottom sth.row = sth.row - (bottom - top) + 1 Loop Do While sth.col = right sth.col = sth.col - (right - left) + 1 Loop Cells(sth.row, sth.col) = * clean = False End I

20、f End If 蛇头移动部分 tailmove = True If oldhead_movement head_movement Then If Abs(oldhead_movement - head_movement) 2 Then oldhead_movement = head_movement Cells(headrow, headcol) = head_movement 当方向改变时在蛇头当前单元格记下前进方向,待蛇尾运行至此时可以按正确方向前进。本来应该用个数组记录,但我懒得再琢磨了。 End If End If Select Case oldhead_movement Case

21、1 right nextrow = headrow nextcol = headcol + 1 Case 2 up nextcol = headcol nextrow = headrow - 1 Case 3 left nextrow = headrow nextcol = headcol - 1 Case 4 down nextcol = headcol nextrow = headrow + 1 End Select 看是否超出游戏区域了。If nextcol = left Then nextcol = right - 1 ElseIf nextcol = right Then nextc

22、ol = left + 1 End If If nextrow = top Then nextrow = bottom - 1 ElseIf nextrow = bottom Then nextrow = top + 1 End If If Cells(nextrow, nextcol).Interior.ColorIndex = color Then 蛇头碰到蛇身了,游戏结束 Call game_over: Exit Sub End If If Cells(nextrow, nextcol) = * Then Call score_ Cells(nextrow, nextcol).Clear

23、Contents End If Cells(nextrow, nextcol).Interior.ColorIndex = color headrow = nextrow headcol = nextcol 蛇尾移动部分 If tailmove Then Select Case tail_movement Case 1 right nextrow = tailrow nextcol = tailcol + 1 Case 2 up nextrow = tailrow - 1 nextcol = tailcol Case 3 left nextrow = tailrow nextcol = tai

24、lcol - 1 Case 4 down nextcol = tailcol nextrow = tailrow + 1 End Select If nextcol = left Then nextcol = right - 1 ElseIf nextcol = right Then nextcol = left + 1 End If If nextrow = top Then nextrow = bottom - 1 ElseIf nextrow = bottom Then nextrow = top + 1 End If If Cells(nextrow, nextcol) 0 Then

25、If (Asc(Cells(nextrow, nextcol) 42) Then tail_movement = Cells(nextrow, nextcol) Cells(nextrow, nextcol).ClearContents End If End If Cells(tailrow, tailcol).Interior.ColorIndex = 0 tailrow = nextrow tailcol = nextcol End If End IfEnd SubFunction game_over() If timerset 0 Then timerset = KillTimer(0, timerset) pulsed = False End If If MsgBox(Game over.temporarily. Try again?, vbOKCancel, ?) = vbOK Then Range(Cells(top + 1, left + 1), Cells(bottom - 1, right - 1).Interior.ColorIndex = 0 Range(Cells(top + 1, left + 1), Cells(bottom - 1, right

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1