[转][Echarts]俄罗斯方块
app.title = '俄罗斯方块';
var refreshT,fallBlockT;
var fallTimout;
var speed = 1000, downSpeed = 30, nomrlSpeed = 1000;
var fallLine = 20, rlMove = 4,score = 0,death=false; var data = [] ,data2 = []; Array.prototype.clone=function(){ var a=[]; for(var i=0,l=this.length;i<l;i++){ if(this[i] instanceof Array){ a.push(this[i].clone()); }else{ a.push(this[i]); }} return a; } var block1={
basePt : [[0,0],[0,1],[1,0],[1,1]],
roate: function(){ }
};
var block2={
basePt : [[0,0],[1,0],[2,0],[2,1]],
shapList:[
[[0,0],[1,0],[2,0],[2,1]],
[[0,0],[0,1],[0,2],[1,0]],
[[0,0],[0,1],[1,1],[2,1]],
[[0,2],[1,0],[1,1],[1,2]]
],
shapIndex : 0,
roate: function(){
this.shapIndex ++;
this.basePt = this.shapList[this.shapIndex%this.shapList.length].clone();
}
};
var block3={
basePt : [[0,1],[1,0],[1,1],[2,0]],
shapList:[
[[0,1],[1,0],[1,1],[2,0]],
[[0,0],[0,1],[1,1],[1,2]],
[[0,1],[1,0],[1,1],[2,0]],
[[0,0],[0,1],[1,1],[1,2]]
],
shapIndex : 0,
roate: function(){
this.shapIndex ++;
this.basePt = this.shapList[this.shapIndex%this.shapList.length].clone();
}
};
var block4={
basePt : [[0,0],[1,0],[1,1],[2,1]],
shapList:[
[[0,0],[1,0],[1,1],[2,1]],
[[0,1],[0,2],[1,0],[1,1]]
],
shapIndex : 0,
roate: function(){
this.shapIndex ++;
this.basePt = this.shapList[this.shapIndex%this.shapList.length].clone();
}
};
var block5={
basePt : [[0,0],[0,1],[1,0],[2,0]],
shapList:[
[[0,0],[0,1],[1,0],[2,0]],
[[0,0],[0,1],[0,2],[1,2]],
[[0,1],[1,1],[2,1],[2,0]],
[[0,0],[1,0],[1,1],[1,2]]
],
shapIndex : 0,
roate: function(){
this.shapIndex ++;
this.basePt = this.shapList[this.shapIndex%this.shapList.length].clone();
}
};
var block6={
basePt : [[0,0],[1,0],[1,1],[2,0]],
shapList:[
[[0,0],[1,0],[1,1],[2,0]],
[[0,0],[0,1],[0,2],[1,1]],
[[1,0],[0,1],[1,1],[2,1]],
[[0,1],[1,0],[1,1],[1,2]]
],
shapIndex : 0,
roate: function(){
this.shapIndex ++;
this.basePt = this.shapList[this.shapIndex%this.shapList.length].clone();
}
};
var block7={
basePt : [[-1,0],[0,0],[1,0],[2,0]],
shapList:[
[[-1,0],[0,0],[1,0],[2,0]],
[[0,0],[0,1],[0,2],[0,3]]
],
shapIndex : 0,
roate: function(){
this.shapIndex ++;
this.basePt = this.shapList[this.shapIndex%this.shapList.length].clone();
}
}; var blocks = [block1,block2,block3,block4,block5,block6,block7]; var randomBlock = function(){
var rnm= parseInt(Math.random()*100)%7;
var blk = blocks[rnm];
var ck = Math.random()*6;
for (var i = 0; i < ck; i++) {
blk.roate();
}
return blk;
};
var firstBlock = randomBlock();
// 全部方块
for (var j = 0; j < 20; j++) {
for (var i = 0; i < 10; i++) {
data.push([i,j,0]);
}
} option = {
backgroundColor: '#aaa',
title: [{
text: '俄罗斯方块'
},{
text: " 当前得分:0",
left:550,
top: '30%'
},
{
text: " ←、→ 左右移动\r\n\r\n↓ 加速下落,↑ 变形",
left:550,
top: '60%'
}],
grid:{
show:true,
borderColor :'#000',
z:2,
top:50,
left:200,
height:520,
width:260
},
legend: {
show:false
},
xAxis: {
interval :2,
splitLine: {
lineStyle: {
type: 'dashed'
}
},
max:10,
axisTick :{
show:false
},
axisLabel :{
show:false
} ,
axisLine :{
show:false
}
},
yAxis: {
interval :2,
splitLine: {
lineStyle: {
type: 'dashed'
}
},
max:20,
axisTick :{
show:false
},
axisLabel :{
show:false
} ,
axisLine :{
show:false
} },
series: [{
data: data,
type: 'scatter',
symbol :'rect',
symbolSize: function(v){
return v[2]*26;
},
symbolOffset :[13,-13],
label: {
emphasis: {
show: false
}
},
itemStyle: {
normal: {
shadowBlur: 10,
shadowColor: 'rgba(120, 36, 50, 0.5)',
shadowOffsetY: 5,
color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
offset: 0,
color: 'rgb(251, 118, 123)'
}, {
offset: 1,
color: 'rgb(204, 46, 72)'
}])
}
}
},{
data: data2,
type: 'scatter',
symbol :'rect',
symbolSize: function(v){
return v[2]*26;
},
symbolOffset :[13,-13],
label: {
emphasis: {
show: false
}
},
itemStyle: {
normal: {
shadowBlur: 10,
shadowColor: 'rgba(25, 100, 150, 0.5)',
shadowOffsetY: 5,
color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
offset: 0,
color: 'rgb(151, 218, 23)'
}, {
offset: 1,
color: 'rgb(104, 100, 5)'
}])
}
}
}]
};
var touchDistortionOther = function(){
var old_Pts = firstBlock.basePt.clone();
firstBlock.roate();
var isTouch = touchFallOther();
firstBlock.basePt = old_Pts;
firstBlock.shapIndex--; return isTouch;
} var touchFallOther = function(){
var pts = firstBlock.basePt.clone(); for (var i = 0; i < pts.length; i++) {
var da_i = pts[i][0]+rlMove;
var da_j = pts[i][1]+fallLine;
if(da_i<0 || da_i >=10){
return true;
}
if( option.series[0].data[da_j*10+da_i] && option.series[0].data[da_j*10+da_i][2] === 1){
return true;
}
}
return false;
}
var touchLeftRightOther = function(lrOffset){
var pts = firstBlock.basePt.clone();
var preLR_move = rlMove + lrOffset; for (var i = 0; i < pts.length; i++) {
var da_i = pts[i][0] + preLR_move;
var da_j = pts[i][1] + fallLine;
if(da_i<0 || da_i >=10){
return true;
}
if( option.series[0].data[da_j*10+da_i] && option.series[0].data[da_j*10+da_i][2] === 1){
return true;
}
}
return false;
}
var setScore = function(){
for (var j = 0; j < 20; j++) {
var rowBlok=0;
for (var i = 0; i < 10; i++) {
rowBlok+= option.series[0].data[j*10+i][2]
}
//消除一行
if(rowBlok == 10){
for (var k = j+1; k < 20; k++) {
for (var m = 0; m < 10; m++) {
option.series[0].data[(k-1)*10+m][2] = option.series[0].data[k*10+m][2];
}
}
score++;
option.title[1].text = ' 当前得分:'+score;
j--;
}
}
};
var checkDeath = function(){
for (var i = 0; i < 10; i++) {
if( option.series[0].data[19*10+i][2] === 1){
death = true;
option.title[1].text = '游戏结束\r\n\r\n 本次得分:'+score;
}
}
};
refreshT = function () {
var pts = firstBlock.basePt.clone(); if(fallLine < 0 || touchFallOther()){
for ( i = 0; i < pts.length; i++) {
var da_i = pts[i][0]+rlMove;
var da_j = pts[i][1]+fallLine+1;
if(option.series[0].data[da_j*10+da_i]){
option.series[0].data[da_j*10+da_i][2] = 1;
}
}
myChart.setOption(option);
//计算得分
setScore();
checkDeath();
option.series[1].data=[];
firstBlock = randomBlock();
rlMove = 4;
fallLine = 20;
speed = nomrlSpeed;
}else{
for (var i = 0; i < pts.length; i++) {
//横轴移动4
pts[i][0]+=rlMove;
pts[i][1]+=fallLine;
pts[i][2]=1;
}
option.series[1].data = pts;
}
//停止下落,
// option.series[1].data = pts;
// option.series[0].data = data;
myChart.setOption(option); }; fallBlockT = function () {
if(death) return;
fallLine--;
refreshT();
fallTimout = setTimeout( fallBlockT, speed);
};
fallBlockT();
document.onkeydown = function (event) {
if (event && event.keyCode === 37 ) {
if(!touchLeftRightOther(-1)){
rlMove--;
refreshT();
}
}
if (event && event.keyCode === 40 ) {
speed = downSpeed;
clearTimeout(fallTimout);
fallBlockT();
}
if (event && event.keyCode === 39 ) {
if(!touchLeftRightOther(1)){
rlMove++;
refreshT();
}
}
//变形
if (event && event.keyCode === 38 ) {
if(!touchDistortionOther()){
firstBlock.roate();
refreshT();
}
}
}
来自:http://gallery.echartsjs.com/editor.html?c=xrkJZ2pfeZ
[转][Echarts]俄罗斯方块的更多相关文章
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- Webstorm+Webpack+echarts构建个性化定制的数据可视化图表&&两个echarts详细教程(柱状图,南丁格尔图)
Webstorm+Webpack+echarts ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(I ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts
系列目录 ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fire ...
- echarts+php+mysql 绘图实例
最近在学习php+mysql,因为之前画图表都是直接在echart的实例demo中修改数据,便想着两相结合练习一下,通过ajax调用后台数据画图表. 我使用的是echart3,相比较第二版,echar ...
- 数据图表插件Echarts(一)
一.引言 最近做一个智慧城市项目,项目中需要图表和报表进行数据分析,从网上找了很多,最后找到了百度开放的echarts,一个很强大的插件. 二.介绍 ECharts,缩写来自Enterprise Ch ...
- ECharts数据图表系统? 5分钟上手!
目录: 前言 简介 方法一:模块化单文件引入(推荐) 方法二:标签式单文件引入 [前言] 最近在捣鼓各种插件各种框架,发现这个ECharts还是比较不错的,文档也挺全的,还是中文的,给大家推荐一下. ...
- knockout+echarts实现图表展示
一.需要学习的知识 knockout, require, director, echarts, jquery.简单的入一下门,网上的资料很多,最直接就是进官网校习. 二.效果展示 三.require的 ...
- ECharts 初识(基于MVC+jQuery+Angularjs实现的Demo)
一.背景: 我们这行做web开发的,很多时候都需要做数据统计报表,现在我所使用的是来自百度团队的ECharts.官方网址:http://echarts.baidu.com/ 我们知 ...
- 还是俄罗斯方块之android版
前面的,口水话 请直接跳过. 虽然现在不比以前了 也没多少人气了,放到首页 都不到几百的点击量.也许博客园整体水平也是在往水的方向发展.不谈那些了,哥也曾经辉煌过 有过一天上千的点击量 ,哥也曾经有过 ...
随机推荐
- php 添加环境变量
1.php添加环境变量主要为了能在 cmd和软件的客户端用php来运行 首先我们要做的第一步: 添加环境变量(记住php.exe的路径,然后再环境变量中编辑path 多个用逗号分隔开,保存重启电脑) ...
- ZZW_shell脚本中的调用MYSQL传参及注意的问题
[oracle@ip9140 db_pcc]$ cat zzw_cc.sh #!/bin/bash z_user='pcc_csuser22'z_pass='pcc_csuser22'z_db='db ...
- LOJ10155数字转换
题目描述 如果一个数 x 的约数和 y (不包括他本身)比他本身小,那么 x 可以变成 y,y 也可以变成 x.例如 4 可以变为 3,1 可以变为 7.限定所有数字变换在不超过 n 的正整数范围内进 ...
- MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map
MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map 一.前言 MapServer拥有非常灵活的标签 ...
- 注册Activity
<activity android:name=".类名" android:label="@string/ ...
- 四:(之八_Linux压力测试工具stress)Dockerfile语法梳理和实践
8.1 安装stress stress目前是在该目录下的可执行文件 --vm 创建几个进程 --vm-bytes 为每个进程分配多少内存 8.2 debug输出stress创建进程的过程 一直在创建有 ...
- 对聊天室项目的NABCD的分析
NABCD需求分析: 需求(N):我们的项目是制作一个局域网内的聊天室软件,为了解决一个公司或者小团体内小范围的局域的简单通讯问题,我们针对的需求是简单与安全. 做法(A):用Java来实现一个C/S ...
- git安装及基本用法
安装: 1先安装客户端,选择默认路径,直接下一步就可以了 2安装图形化客户端,选择默认路径安装完成 基本用法: 1同步coding上的文件 在桌面上点击鼠标右键,并选择Git Clone... 打开下 ...
- open live writer安装教程和账号配置
第一步:Open Live Writer软件下载.官方地址:http://openlivewriter.org/ 第二步:双击安装文件(OpenLiveWriterSetup.exe),然后点击下一步 ...
- Linux修改日期、时间,系统与硬件时间
Linux的时间分为两种,硬件时间和系统时间两种: 一.查看与修改系统时间 查看系统时间:date # date Fri Nov 26 15:20:18 CST 1999 用指定的格式显示系统时间: ...