这个经典的小游戏被无数人玩过,也被很多数的程序员写过,在下也献丑写个出来。

  由于在自己动手写之前没参考过别人写的这个游戏的代码,完全是根据自己玩这个游戏的体会写成的。也知水平有限,虽然已认真测试过,但仍可能有漏洞,感兴趣的朋友发现后还望不吝指出来。

  说说自己的思路,以及编写过程中的重点难点。

思路:

1、我是在纸上先画出方块的几大类型,分成了十大类,每种类型在按“上方向键”时,有四种变化

(田字形实际只有一种形状;长条形,以及两种互相对称的“折线形”分别也只有两种变化),把

这些形状所在的位置信息放入数组中(xx,yy数组表示)。

2、把形状分类后,就要想办法把每种形状显示出来。这里利用构造函数block构造方块对象。然后

在“预览”显示的div里创建每种方块形状(initshape()),并把它们全部隐藏。

3、把“预览div”里的方块形状随机(实际有一定规律)显示一种。然后在主窗口里创建这种方块

(createBlock()),然后定时器让方块下落(fall()),下落过程中不断改变方块的位置

(setPosition()),判断是否越界(judgeLRside()和judgeBott())。当方块落到底部,或者与已

经落下的方块接触时,判断是否能消除行(removeBlocks())。然后把“预览div”里的方块形状再

显示一种(setVisible()),继续步骤三。

 

重点难点:

1、方块是否越界的精准控制,我实现起来有些复杂。

2、方块之间的接触条件,这里要把握好。

 

总结:

  在FF和IE9里测试通过,由于几乎不用什么兼容性代码,其他浏览器应该也没问题。

没用什么能令人眼前一亮或拍手叫好的技巧,代码吗的相当朴实。

  需要说明的是:主窗口每次创建和消去方块都要更新DOM,这需要耗费时间和内存,效率不一定高,

但是如没特别要求对浏览器来说一般也无压力。没有做封装,全局变量多,仅供朋友们交流参考,如果需要部署使用,还需要优化完善。

  原来以为并不难的东西,自己独立去写,才发现要想做好做优秀仍是有难度的。

  建议没独立写过的朋友,对此感兴趣的话,先不要看别人的代码和思路,自己独立尝试下,会有不少收获的。

后来在网上看到一个很精简的版本,JS部分一共一百行左右代码,看了看主要是利用“移位操作”简化了很多代码,感兴趣的朋友可以找找看。

 

运行示例: