Excel 用vba 制作2048单机游戏 附部分代码

做什么?

vba不仅可以给工作带来便捷,提高工作效率(之前做了个Excel合并、拆分分割的工具),还能做单机小游戏。

网上看了下,可以做好多单机游戏。

怎么做?

通过网上看了下大致的算法逻辑,自己尝试写了个。

主要是理解算法逻辑就好写了:前(后)移动,合并(包括相加)。

学会了:

1.过程或函数中可选参数及默认值的写法,optionalisBFasboolean=true。

2.数组的重新定义,redimpreserve。

3.过程中怎么设置类似函数返回值。可以利用数组的地址引用byRef来获取返回值。

4.随机数的生成,Randomize,rnd()。

5.进一步熟悉数组使用。二维数组拆分一维数组,()。

6.按键监控触发事件,"{up}","过程名"向上键。

……

……

还有疑问:

1.就是按键监控触发事件,"{up}","过程名",过程是否可以带参数呢?

2.算法逻辑是否可以优化。

主要过程sub代码如下:
Sub数字前后移动(ByRefarr(),OptionalisBFAsBoolean=True)Dimi%,l%,u%,j%Diminx(1To4)l=LBound(arr)u=UBound(arr)IfisBFThenFori=lTouIfarr(i)""Andarr(i)0Thenj=j+1inx(j)=arr(i)IfNextiElsej=uFori=uTolStep-1Ifarr(i)""Andarr(i)0Theninx(j)=arr(i)j=j-1IfNextiIfFori=1To4arr(i)=inx(i)NextiSub
'isBFb表示back后开始相加f表示前相加forward,默认true为前Sub合并相加(ByRefinx(),OptionalisBFAsBoolean=True)Dimi%IfisBFThenFori=1ToUBound(inx)-1'(i)Ifinx(i)=""Orinx(i)=0ThenGoToAIfIfinx(i)=inx(i+1)Theninx(i)=inx(i)*2inx(i+1)=""IfA:NextiElseFori=UBound(inx)ToLBound(inx)+1Step-1Ifinx(i)=""Orinx(i)=0ThenGoToBIfIfinx(i)=inx(i-1)Theninx(i)=inx(i)*2inx(i-1)=""IfB:NextiIfSub
''向下移动SubmoveDown()DimshtAsWorksheetDimi%,j%,tempDimarr(),brr()Setsht=(2)arr=("a1:d4")ReDimcrr(1ToUBound(arr))arr=(arr)Fori=1To4crr=(arr,i)Call数字往前移动(crr,False)Call合并相加(crr,0)Call数字往前移动(crr,0)ReDimPreservebrr(1Toi)brr(i)=crrNextibrr=(brr)("a1:d4")=brrErasecrrErasebrrErasecrrSub
发布于 2026-02-08
61
目录

    推荐阅读