可使用的简易版俄罗斯方块

控制对象变化

在前一篇“失败的俄罗斯方块”文章中是使用数组来存储当前的方块的点位的,现在换成对象来存储当前方块的所有点位。

1、对象控制与数组控制的区别

  1. 使用数组cell存储当前方块点位时,由于数组中所有元素还是数组对象
[[1,1],[1,2],[1,3],[1,4]] ;

当 cell 的坐标发生改变的时候就会污染模板中的值。所以当下一次再随机到该对象时就会得到错误的信息;

  1. 应对方法
    使用对象来存储当前俄罗斯方块中的所有点位。由于前面已经完成了大量的判断等操作,若是改写所有的判断赋值、判断等操作过于繁琐,于是将新的对象 cell 的属性按照数组的操作习惯来改写。
// cellCtrl 中的方法,生成新的方块
       var cell={};
       F.random=function(){
           var index=Math.floor(Math.random()*6+1);
           for(var i=0,len=cells[(index-1)].length;i<len;i++){
               cell[i]=[];
               cell[i][0]=cells[(index-1)][i][0];
               cell[i][1]=cells[(index-1)][i][1];
           }
           cell.length=cells[(index-1)].length;
           cell=mapCtrl.receiveCell(cell);
           if(!cell||cell==[]){
               alert('游戏结束');
           }
           mapCtrl.renderMap();
       }
  1. 改写完就可以运行了
    在这里插入图片描述

2、总结

  1. bug 目前没有发现,不过依然有瑕疵。
    该游戏输了一次后需刷新以重新开始,并没有添加开新游戏的功能。也没有添加查看游戏历史成绩的功能,也没有添加存储游戏进度的功能
  2. 最大的瑕疵在于方块的翻转,由于使用数学公式计算方块的中心点,俄罗斯方块顺时针90度翻转后的坐标往往带小数点,小数数值不论是向上取整还是向下取整亦或是四舍五入,俄罗斯方块的翻转总会发生偏移。目前的解决方法是以模板中第二个点为中心旋转(方块都能转动。。。)。目前有两个思路,a) 每一个方块模板备4种型态,每次方块都取一种形态进行坐标计算。b) 计算时进行选择计算即 if-else。
  3. 目前可以预见需要解决问题应该都可以优化解决,所以就不去深究了。
  4. 感受:此次单独做此页面感觉还是挺有意思的,有许多自己本应提早警觉到的问题却在报错后才发现,因此也花费了大量的时间。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值