60行JavaScript代码俄罗斯方块游戏全解析(5)

//俄罗斯方块下落
            function down(){
           
                //pos就是当前的(前台)俄罗斯方块,这里y坐标++,就相当于下落
                ++pos.y;
               
                //如果俄罗斯方块和场景实体重合了的话
                if(is()){
               
                    //这里的作用是消行
                    for(var i = 0; i < 4 && pos.y + i < 22; i++) {
                   
                        //和实体场景进行位或并且赋值,如果最后赋值结果为0xfff,也就说明当前行被完全填充了,可以消行
                        if((map[pos.y + i] |= pos.fk[i]) == 0xfff) {
                       
                            //行删除
                            map.splice(pos.y + i, 1);
                            //首行添加,unshift的作用是在数组第0号元素之前添加新元素,新的元素作为数组首元素
                            map.unshift(0x801);
                        }
                    }                               
                   
                    //如果最上面一行不是空了,俄罗斯方块垒满了,则游戏结束
                    if(map[1] != 0x801) {
                       
                        return over();
                    }
                   
                    //这里重新产生下一个俄罗斯方块
                    start(); 
                }
               
                //否则的话更新,因为这里不是局部更新,是全局更新,所以重新绘制一下map就可以了
                update(); 
            } 

//左右移动,t参数只能为2或者是0.5
            //这样实现左移右移(相当于移位运算)这种方法也很丑陋,但是为了简短只能这样了
            //这样做很丑陋,但是可以让代码简短一些
            function move(t, k){ 
           
                pos.x += k; 
               
                for(var i = 0; i < 4; i++) {
                   
                    //*=t在这里实现了左右移1位赋值的功能
                    pos.fk[i] *= t; 
                }
               
                //左右移之后的更新,这里同样进行了重合判断,如果和左右墙重合的话,那么一样会撤销操作并且不更新场景
                update(is()); 
            } 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/00d24c0ff618be9a598dac43d4563e18.html