最高分的面板:

(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. Android IntentService完全解析 当Service遇到Handler

    一 概述 大家都清楚,在Android的开发中,凡是遇到耗时的操作尽可能的会交给Service去做,比如我们上传多张图,上传的过程用户可能将应用置于后台,然后干别的去了,我们的Activity就很可能 ...

  2. SQL 是什么?

    一.简介   SQL,Structured Query Language,结构化查询语言.  

  3. 。求推荐一个usb集线器的购买网址

    笔记本蓝屏了,虽然后来让笔记本自己呆了好久,它冷静下来后我重新启动它,它又恢复了正常,但是我至今也没搞懂蓝屏的原因,深切地领悟到没文化不可怕,像我这样一知半解的最可怕... ------LYQ --- ...

  4. C#连接上sql server 2008 第一次实践

    花了一早上的时间,终于连接上了我的本地数据库,我想应该记一下! 先贴个代码: using System; using System.Collections.Generic; using System. ...

  5. HDU 5832 A water problem(某水题)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  6. Hello World for U

    题目描述: Given any ) characters, you are asked to form the characters into the shape of U. For example, ...

  7. Linux系统信息查看

    转自:http://blog.chinaitlab.com/html/31/1365331-180901.html 查看redhat版本:cat /etc/redhat-release或者cat /e ...

  8. osg渲染数据高程文件

    使用gdal解析DEM文件,将高程数据转换为HeightField对象,然后在osg渲染. 1 源代码 #include <gdal_priv.h> #include <osgVie ...

  9. 解决方法 test: database removal failed: ERROR: database "test" is being accessed by other users

    select * from pg_stat_activity where datname='test'; 找出哪个进程用了这个数据库,然后删除这个进程(pid) kill -9 47182 然后再删除 ...

  10. selenium eclipse环境搭建

    1.python 3.5下载及安装 2.setuptools 与pip 下载地址是:http://pypi.Python.org/pypi/setuptools http://pypi.Python. ...