这个经典的小游戏被无数人玩过,也被很多数的程序员写过,在下也献丑写个出来。
由于在自己动手写之前没参考过别人写的这个游戏的代码,完全是根据自己玩这个游戏的体会写成的。也知水平有限,虽然已认真测试过,但仍可能有漏洞,感兴趣的朋友发现后还望不吝指出来。
说说自己的思路,以及编写过程中的重点难点。
思路:
1、我是在纸上先画出方块的几大类型,分成了十大类,每种类型在按“上方向键”时,有四种变化
(田字形实际只有一种形状;长条形,以及两种互相对称的“折线形”分别也只有两种变化),把
这些形状所在的位置信息放入数组中(xx,yy数组表示)。
2、把形状分类后,就要想办法把每种形状显示出来。这里利用构造函数block构造方块对象。然后
在“预览”显示的div里创建每种方块形状(initshape()),并把它们全部隐藏。
3、把“预览div”里的方块形状随机(实际有一定规律)显示一种。然后在主窗口里创建这种方块
(createBlock()),然后定时器让方块下落(fall()),下落过程中不断改变方块的位置
(setPosition()),判断是否越界(judgeLRside()和judgeBott())。当方块落到底部,或者与已
经落下的方块接触时,判断是否能消除行(removeBlocks())。然后把“预览div”里的方块形状再
显示一种(setVisible()),继续步骤三。
重点难点:
1、方块是否越界的精准控制,我实现起来有些复杂。
2、方块之间的接触条件,这里要把握好。
总结:
在FF和IE9里测试通过,由于几乎不用什么兼容性代码,其他浏览器应该也没问题。
没用什么能令人眼前一亮或拍手叫好的技巧,代码吗的相当朴实。
需要说明的是:主窗口每次创建和消去方块都要更新DOM,这需要耗费时间和内存,效率不一定高,
但是如没特别要求对浏览器来说一般也无压力。没有做封装,全局变量多,仅供朋友们交流参考,如果需要部署使用,还需要优化完善。
原来以为并不难的东西,自己独立去写,才发现要想做好做优秀仍是有难度的。
建议没独立写过的朋友,对此感兴趣的话,先不要看别人的代码和思路,自己独立尝试下,会有不少收获的。
后来在网上看到一个很精简的版本,JS部分一共一百行左右代码,看了看主要是利用“移位操作”简化了很多代码,感兴趣的朋友可以找找看。
运行示例: