来论坛第二天 看到一个javascript编写的俄罗斯方块 有地方不懂 希望大哥们 解惑 /*定义这些事什么作用*/ l:['#9F0','#FF3','#F33','#C0C','#33C','#0F3','#F93'],
v:[0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0xFFFF],
d: [[0xCC00], [0x4444, 0xF0], [0x8C40, 0x6C00], [0x4C80, 0xC600], [0x44C0, 0x8E00, 0xC880, 0xE200], [0x88C0, 0xE800, 0xC440, 0x2E00], [0x4E00, 0x8C80, 0xE400, 0x4C40]],/*定义这些事什么作用*/ move:function(x,y,t){
var m = [];
for(var k=0;k<4;k++){
m[y+k] = (G.d[G.n][t]>>(3-k)*4&0xF)<<Math.max(x,0)>>-Math.min(x,0); //这一句是什么意思 没看懂
if(m[y+k] & G.v[y+k]){
return false;
}
}
G.x = x;
G.y = y;
G.t = t;
G.m = m;
G.draw();
return true;
},讲解详细点希望
v:[0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0xFFFF],
d: [[0xCC00], [0x4444, 0xF0], [0x8C40, 0x6C00], [0x4C80, 0xC600], [0x44C0, 0x8E00, 0xC880, 0xE200], [0x88C0, 0xE800, 0xC440, 0x2E00], [0x4E00, 0x8C80, 0xE400, 0x4C40]],/*定义这些事什么作用*/ move:function(x,y,t){
var m = [];
for(var k=0;k<4;k++){
m[y+k] = (G.d[G.n][t]>>(3-k)*4&0xF)<<Math.max(x,0)>>-Math.min(x,0); //这一句是什么意思 没看懂
if(m[y+k] & G.v[y+k]){
return false;
}
}
G.x = x;
G.y = y;
G.t = t;
G.m = m;
G.draw();
return true;
},讲解详细点希望
解决方案 »
- 这段表情正则替换的代码哪里出错了。请教。
- 这个script语句什么意思
- 仿google搜索,成功了,但不支持键盘操作
- access数据库写入问题
- 如何在tr上禁止mouseover事件多次触发????
- javascript(好像是DOM的事件响应的问题) help 谢谢
- Webstorm开发AngularJS,数据如何及时显示在 chrome浏览器中
- 如何把javascript的变量b的值 赋给同一个页面的vbscript的变量a
- 滚动条的问题
- 求助!
- 斜线,圆圈等问题
- json对象 参数名带点 怎么引用var people = { ‘object.name':'hello'} 直接people.object.name肯定不行
提醒一下,这个代码可能被作者压缩(优化)过,可以找一下比较常规的代码,便于理解
0x801的2进制
1000 0000 0001
1表示在这个位置有画格子
这样你就有个“U”型的背景边框了。
d 的每个元素表示一个方块
0xCC00分4行写
1100
1100
0000
0000
就是一个正方形方块
第2个是长条,怎么旋转也只有横竖2种状态。
然后就是如何绘制了。
>>是移位
如果你要取一个方块的第2行,就右移8位,再屏蔽掉非这一行位置的位。
如:
0xCC00 >> 8 = 0x00CC
0x00CC & 0xF = 0x000C