EXCEL实现简易的贪吃蛇小程序

学习的过程中,总会有一些新的想法,有些东西,总要努力把它实现了,然后才有可能进一步做得更好!

能够一下子就把事情做好的,要么这件事情太简单了(不必学),要么你的经验已经足够了(不必学)~


表格有时能很形象的反映一个程序的组织结构,也比较利于理解。


昨天试着用链表解决了蛇的身体增加及移动的函数,脑子里就不停的思考如果没有指针的其它语言,应该怎样来做?在EXCEL里是否也容易实现?

一个念头一旦起来,便一时间抑制不住,不把它做个大概出来总是觉着不踏实。

还好RUN起来了(也仅仅是能RUN起来了),基本功能也实现了七七八八,至少蛇的移动、吃蛋、改变方向搞出来了,可以踏实的继续后面的C++学习了~


下面简单记录一下: EXCEL 简易贪吃蛇

界面设计:

          EXCELSHEET1中,使用单元格16*16做界面

          加入四个箭头图做方向控制,加入开始和结束图控制开始和结束

          六个宏sub UpArrow(); DownArrow(); LeftArrow(); RightArrow() ; Start(); EndArrow()

思路:

    因暂时无法解决While循环+wait会造成运行时不能点按键,采用OnTime的方法,1秒钟执行一次,在期间可以进行点方向箭头图控制转向

         snake_init() '使用INIT初始化界面(围栏)(二维数组arr)、三节蛇身(二维数组snake)、第一个蛋("E")

         myTime() '利用Application.Ontime实现无限1秒1次的循环,

Application.OnTime Now() + TimeSerial(0, 0, 1), "mytime", , True

               judgeArrow() '在myTime()中,调用此函数判断下一步能否移动、是否GameOver、是否吃蛋并再产生蛋getEgg(),然后实现移动(先把蛇头数据用tempX,tempY,tempZ临时变量存起来,并清理围栏中的蛇坐标所赋的值)

               show() ‘显示函数功能,输出数组

     Range("D2:S17").Resize = arr

关注点:

         如何实现蛇身移动(增长后仍能移动)?         snake[255][3] :

         必须先缓存蛇头的数据,t = snake(1,1)  然后for循环实现数据交换

         

 

Excel实现贪吃蛇小游戏 上次我们在Excel实现了一个华容道式的小游戏,使用了Excel中的小部分属性和功能,不到100行语句就完成了。这次我们要把贪吃蛇搬到Excel中,就不那么容易了。 首先要解决游戏显示的问题。对我们来说,小游戏最好的平台是Excel的工作区,由于大小可调、颜色可填的单元格操作方便,我们完全可以把它们当像素来使用。于是我们的贪吃蛇游戏就有了以单元格为基础的像素形式的显示方式了。 其次是游戏的控制方法。在这里我摸索了好久,其中走了弯路不说,我最后的结论是在Excel中要实现按键事件的方法是引入窗体,然后在窗体中响应Keydown与Keypress事件。这样的话,既可以快速响应还可以根据情况修改对应按键。 最后是游戏的定时问题。所有的游戏事实上都是在一个时间大循环里面定时接收输入信息更新状态的程序,我们的小游戏都不例外。老实说,我写这个游戏大部分的思考时间就浪费在如何实现游戏定时这里。Excel的VBA中与定时有关的只有onTime函数,没有其他相关函数提供了,onTime函数可以实现某一事件在指定时间发生,但只能以秒为最小单位,对我们要在一秒内更新数十次信息的小游戏不适合,我们只能另找方法。用过VB的人都知道VB控件中有个定时控件,用它来实现游戏定时是最好的,但在Excel中却没有,难道我要把VB中的定时控件移植到VBA中?这也是个很值得研究的课题,但是我想到了另外的方法。VB的程序员都知道要想VB程序发挥大作用一定离不开调用系统的API,于是我查看了系统相关API的帮助,发现系统API中实现相应功能的有settimer与killtimer函数,具体定义和用法大家可以参考相关帮助,但从字面大家都已经可以知道它们就是我们要找的东西了。那么现在的问题就是如何在vba环境下调用系统API。心想微软称vba就是office中的vb,那么在vba中调用系统API应该也与在VB中的一样。一试,呵呵,果然非虚,这微软真不是盖的(后在msdn中发现ms office vba从2000版本开始支持调用系统API,大家可以拓展office应用了)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值