H5实现俄罗斯方块(三)

最高分的面板:

(function (window) {
  'use strict';
  function HighScore() {
    this.canvas = new Canvas('highscore', 100, 70);
    this.highScore = 0;

    this._init();
  }

  HighScore.prototype = {
    constructor: HighScore,
    _init: function () {
      //获取当前最高分
      this.highScore = this._getScore();
      this._render();
    },
    _render: function () {
      this.canvas.drawText(this.highScore);
    },
    _getScore: function () {
      return window.localStorage.getItem('high-score') || 0;
    },
    //存取值
    _setScore: function (value) {
      window.localStorage.setItem('high-score', value);
    },
    //检查的饭
    checkScore: function (score) {
      if (score > this.highScore) {
        //覆盖
        this.highScore = score;
        this._setScore(score);
        this._render();
      }
    }
   
  };

  window.HighScore = HighScore;
})(window);

 键盘操作的事件:

(function (window){
    'use strict';
   var keys = {
    38: 'top',
    39: 'right',
    40: 'down',
    37: 'left'
  }; 

   function  keyboard(){
     this.boad;
   }

keyboard.prototype={
   constructor:keyboard,
   init:function (board) {
     var self=this;
     
     //注册事件   keydown  可以连续按
       self.board = board;
      document.addEventListener('keydown', function (evt) {
        self.processKeyDown(evt);
      });
   },

   processKeyDown:function (evt) {
     //做相应事件的拦截
     if(this.board.gameInst._state!=='playing'){
       return;
     }
    if (keys[evt.keyCode]) {
       this.press(keys[evt.keyCode]); 
    }
   },

 press: function (key) {
   /**  console.log(key);*/
     //写一个标志性的变量
     var refresh=false;
   
      switch (key) {
        case 'top':
        //方块的反转
        this.board.shape.rotate();
        if(this.board.validMove(0,0)){
          refresh=true;
        }
          break;
        case 'right':
       if (this.board.validMove(1, 0)) {
            this.board.shape.x += 1;
            refresh=true;
          }
          break;
        case 'down':
          if (this.board.validMove(0, 1)) {
            this.board.shape.y += 1;
            refresh=true;
          }
          break;
        case 'left':
          if (this.board.validMove(-1, 0)) {
            this.board.shape.x -= 1;
            refresh=true;
          }
          break;
        }
        if(refresh){
          this.board.refresh();
          //重新绘制
            this.board.shape.draw(this.board.context);
         if (key === 'down') {
          var self = this;
          window.clearInterval(window.TetrisConfig.intervalId);
          window.TetrisConfig.intervalId = window.setInterval(function () {
            self.board.tick();
          }, TetrisConfig.speed);
          }
        }
      }
    

};
   window.keyboard=keyboard;
})(window); 

 等级的js:

(function (window) {
  'use strict';
  //自调用的函数
   var levelArr=(function(){
     var  arr=[0];
     //分数级别的计算  默认是个等级
     for(var i=0;i<10;i++){
       arr.push(Math.pow(2,i)*100);
     }
     return  arr;
   })();

   //得分的面板
  function Level() {
    this.canvas = new Canvas('level', 100, 70);
     //得分
   this.level = 1;

    this._init();
  }

 Level.prototype = {
    constructor: Level,
    _init: function () {
      this._render();
    },
     //绘制得分
    _render: function () {
      this.canvas.drawText('Level'+this.level);
    }, 
    //检查界别的方法
    checkLevel:function(score){
       if(score>=levelArr[this.level]){
         this.level++;
         this._render();
         //返回标示变量
         return this.level;
       }
       return 0;
    }
     //分数的变化
    /*** addScore:function(value){
       this.score+=value;
       //渲染
     this._render();
     }*/ 
   };


   window.Level=Level;
})(window);

 下一方块的js:

(function (window) {
  'use strict';
   //得分的面板
  function NextShape() {
    this.canvas = new Canvas('nextshape', 100, 70);
    this._init();
  }

 NextShape.prototype = {
    constructor: NextShape,
    _init: function () {
      this.rows=4;
      this.cols=6;
    
    },
    //进行渲染
    render:function(shape){
     this.canvas.clear();
     //size加了参数 
        shape.draw(this.canvas.context,16);
}
   };


   window.NextShape=NextShape;
})(window);
原文地址:https://www.cnblogs.com/sunliyuan/p/6219547.html