最高分的面板:

(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);

H5实现俄罗斯方块(三)的更多相关文章

  1. H5版俄罗斯方块(2)---游戏的基本框架和实现

    前言: 上文中谈到了H5版俄罗斯方块的需求和目标, 这次要实现一个可玩的版本. 但饭要一口一口吃, 很多东西并非一蹴而就. 本文将简单实现一个可玩的俄罗斯方块版本. 下一步会引入AI, 最终采用coc ...

  2. H5版俄罗斯方块(3)---游戏的AI算法

    前言: 算是"long long ago"的事了, 某著名互联网公司在我校举行了一次"lengend code"的比赛, 其中有一题就是"智能俄罗斯方 ...

  3. 俄罗斯方块(三):"流动"的方块

    问题的提出: 俄罗斯方块允许90度的坡,是不是有点不够科学#(滑稽) 想办法加一种会“滑坡”的方块 本文两大部分: 详细的描绘是怎样的“流动” 写代码,并整合进游戏 本文基于我写的 俄罗斯方块(一): ...

  4. H5版俄罗斯方块(1)---需求分析和目标创新

    前言: 俄罗斯方块和五子棋一样, 规则简单, 上手容易. 几乎每个开发者, 都会在其青春年华时, 签下"xx到此一游". 犹记得大一老师在布置大程作业的时候提过: "什么 ...

  5. H5版俄罗斯方块(4)---火拼对战的雏形

    前言: 勿忘初心, 本系列的目标是实现一款类似QQ"火拼系列"的人机对战版俄罗斯方块. 在完成了基本游戏框架和AI的算法探索后, 让我们来尝试一下人机大战雏形编写. 本系列的文章链 ...

  6. H5实现俄罗斯方块(一)

    这几天一直忙于公司的项目,涉及到流程问题,(有时间会写成博客的)...一直没有更新... 为了更加巩固js的基础,自己封装类似于JQuery的操作库来对dom进行操作. 一:前度页面的绘制. < ...

  7. H5学习第三周

    今天主要总结弹性布局 flex使用 1.给父容器添加display flex/inline-flex;属性 2.父容器可以使用的属性值有 >>>flex-direction 属性决定 ...

  8. 03 (H5*) Vue第三天

    目录: 1:Vue-resource中的全局配置. 2:Vue动画2部曲 3:animate动画 4:钩子函数动画 5:组件三部曲,推荐使用template标签来创建组件模板 1:Vue-resour ...

  9. 13 (H5*) JS第三天 数组、函数

    目录 1:数组的定义和创建方式 2:数组的总结 3:for循环遍历数组 4:数组的案例 5:冒泡排序 6:函数的定义 7:函数的参数 8:函数的返回值 复习 <script> /* * * ...

随机推荐

  1. RabbitMQ入门教程(转)

    http://blog.csdn.net/column/details/rabbitmq-for-java.html http://blog.csdn.net/anzhsoft/article/det ...

  2. 理解GRUB2工作原理及配置选项与方法

    GRUB2是借鉴GRUB改写到更加安全强大到多系统引导程序,现在大部分较新的Linux发行版都是使用GRUB2作为引导程序的.GRUB2采用了模块化设计,使得GRUB2核心更加精炼,使用更加灵活,同时 ...

  3. MySQL 常用命令

    mysql -uroot -pXXXXXXXXX //登陆mysql mysqladmin -u 用户名 -p 旧密码 password 新密码 创建数据库并分配用户 create database ...

  4. 管道函数(%>%)很简单

    %>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存 符号%>%,这是管道操作,其意思是将%> ...

  5. Android的UI设计

    一.Android控件 1.TextView 属性:id.width.height.gravity(对齐方式).textSize(文字大小).textColor(文字颜色) 2.Button 属性:i ...

  6. web.xml配置详情 - 简要介绍

    <!--web.xml 元素简介--> <?xml version="1.0" encoding="UTF-8"?><web-ap ...

  7. docker-registry使用笔记

    在国内docker-hub是肯定用不了的,不解释:sweat:. 所以最好还是建一个私有的docker-registry,存储一些常用的images方便随时pull. 相关链接 github:http ...

  8. storm-kafka组件中KafkaOffsetMetric相关统计指标说明

    storm-kafka组件中KafkaOffsetMetric相关统计指标说明 storm-kafka是storm提供的一个读取kakfa的组件,用于从kafka队列中消费数据.KafkaOffset ...

  9. 从零开始HTML(二 2016/9/20)

    1.布局 ① 使用 <div> 元素的 HTML 布局,<div> 元素常用作布局工具,因为能够轻松地通过 CSS 对其进行定位. <!DOCTYPE html> ...

  10. 学习mongo系列(五) AND,$or,$type

    MongoDB OR 条件 MongoDB OR 条件语句使用了关键字 $or,语法格式如下: >db.col.find( { $or: [ {key1: value1}, {key2:valu ...