zoukankan      html  css  js  c++  java
  • 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);
    
  • 相关阅读:
    树上倍增求LCA(最近公共祖先)
    NOI题库分治算法刷题记录
    NOI题库刷题日志 (贪心篇题解)
    O(nlogn)LIS及LCS算法
    BLOG搬家
    『素数 Prime判定和线性欧拉筛法 The sieve of Euler』
    『扩展欧几里得算法 Extended Euclid』
    『NOIP2018普及组题解』
    P25、面试题1:赋值运算符函数
    字符串转成整数
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/6219547.html
Copyright © 2011-2022 走看看