JavaScript版俄罗斯方块Easy Tetris实现原理(3)
来源:DHTML精英,WEB前端专家 发布时间:2009-07-16 10:25:00
变形部分相对简单,如,Z的变形为:
[
[0,0,1,0]
[0,1,1,0]
[0,1,0,0]
[0,0,0,0]
]
只要将此形状同时保存到方块数组中即可,由于所有方块中,最多变形次数为4次,所以,所有方块都4个一组的来表示,每一个维度表示每一次形变后的形状,在变形方法中只要通过这个索引值来进行递增即可获得下一次形变的样子,然后重新渲染出来即可。
投影部分
需要一个和方块部分一一对应的数组,记录每个方块的投影区域,还是以Z为例,它可以表示为:
[1,1,1,0,1,1,0,0]
前4位 1,1,1,0 表示,在一个4列的格子中,Z,前面3个格子是要进行投影的
后4位 1,1,0,0 表示,投影跟随下落方块的时候,Y坐标在下落方块下面第1个位置(1的个数-1)
投影部分除了需要一个对应的数据外,还需要一个DOM元素进行表示,很简单,就是一个1*4的表格,它需要在下落方块移动、变形的时候做相应的处理。
边界检测
边界检测应该是俄罗斯方块中最重要的算法部分了。在Easy Tetris中采用的是“位与”判断的方法进行处理,即,将下落的方块4*4个区域与即将落在的游戏区域中相应的4*4个区域进行“位与”比较,如果返回0,则说明可以移动,否则,不能移动。
下落的方块每调用一次“移动”的方法之前,都要进行边界检测;
下落的方块每调用一次“变形“的方法之前,也要进行边界检测;
所以,如果你能够足够的优化移动、变形、边界检测这三部分的算法,那么你的俄罗斯方块将会给玩家一个非常高的控制灵敏度,从而大大提高可玩性!
好了,在WEB中用JavaScript编写俄罗斯方块的大体原理就是这样了,下面,我们一起来玩玩这个写好的俄罗斯方块游戏Easy Tetris吧:http://www.v-ec.com/games/tetris/


猜你喜欢
- 概述从前面的对Python基础知识方法介绍中,我们几乎是围绕Python内置方法进行探索实践,比如字符串、列表、字典等数据结构的内置方法,和
- 有过网页制作经验的朋友一定知道:一般来讲,把表格的边框定义为1px时,即border=1,而实际上是2
- 如果在c#中,我们只要用hashtable或者dictionary根据key取value的特性,就可以很轻松地实现这个功能了。其实我们稍作处
- auto-push-oss Action虽然在 Github 市场有推送 OSS 相关的 Action,但是我还是选择改造我运行了好多年的脚
- Mybatis插入mysql报主键重复的问题首先思路是这样的,先去数据表里面去找有没有这个主键的数据(如果有会有返回值,如果没有则返回nul
- 一、PsutilPython当中的Psutil模块是个跨平台库,它能够轻松获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息
- 一、分工和流程在土豆网,以项目开发为核心,谁都可以带项目,担任项目经理。一个典型的土豆网项目中,当进入正式开发阶段,通常参与者包括:1名设计
- import reimport urllib2import cookielibdef renren():
- 方法说明: 同步版的fs.writeFile() 。语法:fs.writeFileSync(filename, data, [o
- 在GUI程序中,主线程也叫GUI线程,因为它是唯一被允许执行GUI相关操作的线程。对于一些耗时的操作,如果放在主线程中,就是出现界面无法响应
- 一.问题描述当我们在做项目的时候,创建一张用户表,如何让该表的主键id从0开始自增?网上搜索了很多解决方案,最后发现了一种方法必实现且有效的
- 如下所示:#求一个数的最大约数(不算本身)def getmaxnum(n): num = n //2 while n
- django 返回数据的主要是用django.http.HttpResponse 中的HttpResponse 完成的具体的我直接贴代码吧
- #!/usr/bin/env pythonimport sockets = socket.socket(socket.AF_PACKET,
- 概念节流 (throttle) 让一个函数不要执行的太频繁,减少执行过快的调用,叫节流去抖 (debounce) 去抖就是对于一定时间段的连
- PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,来介绍下p
- 本文实例为大家分享了python3实现基于用户协同过滤的具体代码,供大家参考,具体内容如下废话不多说,直接看代码。#!/usr/bin/py
- 在 ASP 的内建对象中除了用于发送、接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个
- 我们在做诸如人群密集度等可视化的时候,可能会考虑使用热力图,在Python中能很方便地绘制热力图。下面以识别图片中的行人,并绘制热力图为例进
- 扫雷是一款益智类小游戏,最早于 1992 年由微软在 Windows 上发行,游戏适合于全年龄段,规则简单,即在最短的时间内找出所有非雷格子