canvas版本的俄罗斯方块,俄罗斯方块还是复杂一些
代码:
<!Doctype html>
<html lang="zh_cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>俄罗斯方块</title>
<meta name="Keywords" content="">
<meta name="Description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
</head>
<body>
<div style="display: flex; justify-content: left; align-items: center; height: 100%;">
<canvas id="myCanvas" width="600" height="600" style="border:1px;">
</canvas>
</div>
<script>
var margin = 10;
var pading = 3;
var maxLineNum = 25;
var maxFieldNum = 25;
var score = 0;
var pieceNow = createRandPiece();
var pieceWill = createRandPiece();
var nowStatus = 0;
var jileiList = new Array();
var myCanvas = document.getElementById("myCanvas");
var page_width = window.innerWidth;
var page_height = window.innerHeight;
//console.log("页面尺寸:宽:"+page_width+",高:"+page_height);
var paint_width = page_width - 2 * margin - page_width / 6;
var paint_height = page_height - 2 * margin;
myCanvas.width = paint_width;
myCanvas.height = paint_height;
//console.log("画布尺寸:宽:"+paint_width+",高:"+paint_height);
var left_width = paint_height - 2 * pading;
var left_height = paint_height - 2 * pading;
var right_width = paint_width - 2 * pading - left_width;
var right_height = paint_height - 2 * pading;
var perWidth = left_width / maxFieldNum;
var perHeight = left_height / maxLineNum;
function getT(){
var mystartx = maxFieldNum % 2 == 1 ? (maxFieldNum-1) / 2 : maxFieldNum / 2;
var mystarty = 0;
var color = "rgb("+getRandomInt(1, 255)+","+getRandomInt(1, 255)+","+getRandomInt(1, 255)+")";
var piecesList = new Array();
//状态0
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp1.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp2.x;
tmp4.y = tmp2.y+1;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp4.x;
tmp5.y = tmp4.y+1;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
//状态1
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty+1;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp1.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y-1;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp3.x;
tmp5.y = tmp3.y+1;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
//状态2
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x-1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp3.x+1;
tmp5.y = tmp3.y;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
//状态3
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp2.x+1;
tmp4.y = tmp2.y;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp4.x+1;
tmp5.y = tmp4.y;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
return piecesList;
}
function getL(){
var mystartx = maxFieldNum % 2 == 1 ? (maxFieldNum-1) / 2 : maxFieldNum / 2;
var mystarty = 0;
var color = "rgb("+getRandomInt(1, 255)+","+getRandomInt(1, 255)+","+getRandomInt(1, 255)+")";
var piecesList = new Array();
//状态0
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x+1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态1
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x-1;
tmp3.y = tmp1.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态2
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态3
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty+1;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp2.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y-1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
return piecesList;
}
function getJ(){
var mystartx = maxFieldNum % 2 == 1 ? (maxFieldNum-1) / 2 : maxFieldNum / 2;
var mystarty = 0;
var color = "rgb("+getRandomInt(1, 255)+","+getRandomInt(1, 255)+","+getRandomInt(1, 255)+")";
var piecesList = new Array();
//状态0
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x-1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态1
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp2.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x+1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态2
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x;
tmp3.y = tmp1.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态3
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp2.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
return piecesList;
}
function getZ(){
var mystartx = maxFieldNum % 2 == 1 ? (maxFieldNum-1) / 2 : maxFieldNum / 2;
var mystarty = 0;
var color = "rgb("+getRandomInt(1, 255)+","+getRandomInt(1, 255)+","+getRandomInt(1, 255)+")";
var piecesList = new Array();
//状态0
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp4.x+1;
tmp5.y = tmp4.y;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
//状态1
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty+1;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x+1;
tmp3.y = tmp1.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x+1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp4.x;
tmp5.y = tmp4.y-1;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
//状态2
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp4.x+1;
tmp5.y = tmp4.y;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
//状态3
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty+1;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x+1;
tmp3.y = tmp1.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x+1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
var tmp5 = new Object();
tmp5.x = tmp4.x;
tmp5.y = tmp4.y-1;
tmp5.color = color;
pieces.push(tmp5);
piecesList.push(pieces);
return piecesList;
}
function getS(){
var mystartx = maxFieldNum % 2 == 1 ? (maxFieldNum-1) / 2 : maxFieldNum / 2;
var mystarty = 0;
var color = "rgb("+getRandomInt(1, 255)+","+getRandomInt(1, 255)+","+getRandomInt(1, 255)+")";
var piecesList = new Array();
//状态0
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x;
tmp3.y = tmp1.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x-1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态1
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp2.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态2
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x;
tmp3.y = tmp1.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x-1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态3
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp2.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
return piecesList;
}
function getO(){
var mystartx = maxFieldNum % 2 == 1 ? (maxFieldNum-1) / 2 : maxFieldNum / 2;
var mystarty = 0;
var color = "rgb("+getRandomInt(1, 255)+","+getRandomInt(1, 255)+","+getRandomInt(1, 255)+")";
var piecesList = new Array();
//状态0
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x;
tmp3.y = tmp1.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp2.x;
tmp4.y = tmp2.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态1
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x;
tmp3.y = tmp1.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp2.x;
tmp4.y = tmp2.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态2
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x;
tmp3.y = tmp1.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp2.x;
tmp4.y = tmp2.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态3
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp1.x;
tmp3.y = tmp1.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp2.x;
tmp4.y = tmp2.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
return piecesList;
}
function getI(){
var mystartx = maxFieldNum % 2 == 1 ? (maxFieldNum-1) / 2 : maxFieldNum / 2;
var mystarty = 0;
var color = "rgb("+getRandomInt(1, 255)+","+getRandomInt(1, 255)+","+getRandomInt(1, 255)+")";
var piecesList = new Array();
//状态0
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp2.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x+1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态1
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态2
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx-1;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x+1;
tmp2.y = tmp1.y;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x+1;
tmp3.y = tmp2.y;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x+1;
tmp4.y = tmp3.y;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
//状态3
var pieces = new Array();
var tmp1 = new Object();
tmp1.x = mystartx;
tmp1.y = mystarty;
tmp1.color = color;
pieces.push(tmp1);
var tmp2 = new Object();
tmp2.x = tmp1.x;
tmp2.y = tmp1.y+1;
tmp2.color = color;
pieces.push(tmp2);
var tmp3 = new Object();
tmp3.x = tmp2.x;
tmp3.y = tmp2.y+1;
tmp3.color = color;
pieces.push(tmp3);
var tmp4 = new Object();
tmp4.x = tmp3.x;
tmp4.y = tmp3.y+1;
tmp4.color = color;
pieces.push(tmp4);
piecesList.push(pieces);
return piecesList;
}
//生成随机方块坐标
function createRandPiece(){
var shapes = new Array('T','L','J','Z','S','O','I');//
var shapeType = shapes[getRandomInt(0, shapes.length-1)];
//console.log(shapeType);
var res = new Array();
if(shapeType == 'T'){
res = getT();
} else if(shapeType == 'L'){
res = getL();
} else if(shapeType == 'J'){
res = getJ();
} else if(shapeType == 'Z'){
res = getZ();
} else if(shapeType == 'S'){
res = getS();
} else if(shapeType == 'O'){
res = getO();
} else if(shapeType == 'I'){
res = getI();
} else {
console.log('我擦,你想干啥');
}
return res;
}
//处理键盘事件
function doKeyDown(e){
var keyId = e.keyCode ? e.keyCode : e.which;
var key = e.key ? e.key : e.key;
var code = e.code ? e.code : e.code;
//console.log('keyId:'+keyId+' key:'+key+' code:'+code);
//验证是否越界
//a
if(keyId == 65 || keyId == 37){
for(var j = 0; j < pieceNow[nowStatus].length; j++){
if(pieceNow[nowStatus][j].x-1 < 0){
return false;
}
}
}
//d
if(keyId == 68 || keyId == 39){
for(var j = 0; j < pieceNow[nowStatus].length; j++){
if(pieceNow[nowStatus][j].x+1 > maxFieldNum-1){
return false;
}
}
}
//w
if(keyId == 87 || keyId == 38){
return false;
for(var j = 0; j < pieceNow[nowStatus].length; j++){
if(pieceNow[nowStatus][j].y-1 < 0){
return false;
}
}
}
//s
if(keyId == 83 || keyId == 40){
for(var j = 0; j < pieceNow[nowStatus].length; j++){
if(pieceNow[nowStatus][j].y+1 > maxLineNum-1){
return false;
}
}
}
//移动
//a
if(keyId == 65 || keyId == 37){
for(var i = 0; i < pieceNow.length; i++){
for(var j = 0; j < pieceNow[i].length; j++){
pieceNow[i][j].x--;
}
}
}
//d
if(keyId == 68 || keyId == 39){
for(var i = 0; i < pieceNow.length; i++){
for(var j = 0; j < pieceNow[i].length; j++){
pieceNow[i][j].x++;
}
}
}
//w
if(keyId == 87 || keyId == 38){
for(var i = 0; i < pieceNow.length; i++){
for(var j = 0; j < pieceNow[i].length; j++){
pieceNow[i][j].y--;
}
}
}
//s
if(keyId == 83 || keyId == 40){
for(var i = 0; i < pieceNow.length; i++){
for(var j = 0; j < pieceNow[i].length; j++){
pieceNow[i][j].y++;
}
}
}
var changeFlag = false;
for(var j = 0; j < pieceNow[nowStatus].length; j++){
if(pieceNow[nowStatus][j].y+1 > maxLineNum-1){
changeFlag = true;
score++;
break;
}
}
for(var j = 0; j < pieceNow[nowStatus].length; j++){
for(var i = 0; i < jileiList.length; i++){
if(pieceNow[nowStatus][j].x == jileiList[i].x && pieceNow[nowStatus][j].y+1 == jileiList[i].y){
changeFlag = true;
score++;
break;
}
}
}
if(changeFlag == true){
for(var j = 0; j < pieceNow[nowStatus].length; j++){
var tmp = new Object();
tmp.x = pieceNow[nowStatus][j].x;
tmp.y = pieceNow[nowStatus][j].y;
tmp.color = "rgb(139,129,76)";//pieceNow[nowStatus][j].color;
jileiList.push(tmp);
}
pieceNow = pieceWill;
pieceWill = createRandPiece();
nowStatus = 0;
//消除填满的整行
for(var i = 0; i < maxLineNum; i++){
var tmp = true;
for(var j = 0; j < maxFieldNum; j++){
if(injileilist(jileiList, j, i) == false){
tmp = false;
break;
}
}
if(tmp == true){
jileiList = jileiList.filter(function(item) {
return item.y != i;
});
for(var k = 0; k < jileiList.length; k++){
if(jileiList[k].y < i){
jileiList[k].y += 1;
}
}
score += 10;
}
}
}
//换方向
if(code == 'Space'){
nowStatus = (nowStatus + 1) % 4;
}
draw();
}
function draw(){
//清理画布
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.clearRect(0, 0, paint_width, paint_height);
//画布背景
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.fillStyle = "rgb(147,112,219)";
ctx.fillRect(0,0,paint_width,paint_height);
//console.log("画布背景尺寸:宽:"+paint_width+",高:"+paint_height);
//左侧背景
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.fillStyle = "rgb(255,250,240)";
ctx.fillRect(pading,pading,left_width,left_height);
//console.log("左侧背景尺寸:宽:"+left_width+",高:"+left_height);
//右侧背景
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.fillStyle = "rgb(230,230,250)";
ctx.fillRect(left_width+pading,pading,right_width,right_height);
//console.log("右侧背景尺寸:宽:"+right_width+",高:"+right_height);
//横线
for(var i = 0; i <= maxLineNum; i++){
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(pading, pading+perHeight*i);
ctx.lineTo(pading+left_width, pading+perHeight*i);
ctx.strokeStyle = 'black';
ctx.lineWidth = 1;
ctx.stroke();
}
//竖线
for(var i = 0; i <= maxFieldNum; i++){
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(pading+perWidth*i, pading);
ctx.lineTo(pading+perWidth*i, pading+left_height);
ctx.strokeStyle = 'black';
ctx.lineWidth = 1;
ctx.stroke();
}
//画当前的块
//console.log(pieceNow);
if(nowStatus < pieceNow.length){
for(var i = 0; i < pieceNow[nowStatus].length; i++){
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.fillStyle = pieceNow[nowStatus][i].color;
ctx.fillRect(pieceNow[nowStatus][i].x*perWidth+pading,pieceNow[nowStatus][i].y*perHeight+pading,perWidth,perHeight);
}
}
//画积累的块
for(var i = 0; i < jileiList.length; i++){
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.fillStyle = jileiList[i].color;
ctx.fillRect(jileiList[i].x*perWidth+pading,jileiList[i].y*perHeight+pading,perWidth,perHeight);
}
//画未来的块部分的文字
ctx.beginPath();
ctx.fillStyle="rgb(255,130,71)";
ctx.font="14px Arial";
ctx.fillText('下一个', left_width+pading+right_width/3,right_height/4);
//画未来的块
//console.log(pieceWill);
if(0 < pieceWill.length){
for(var i = 0; i < pieceWill[0].length; i++){
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.fillStyle = pieceWill[0][i].color;
ctx.fillRect((pieceWill[0][i].x+17)*perWidth+pading,(pieceWill[0][i].y+7)*perHeight+pading,perWidth,perHeight);
}
}
//显示得分按钮和文字
var tmpcolor = "rgb(238,197,145)";
var ctx = myCanvas.getContext("2d");
ctx.beginPath();
ctx.fillStyle = tmpcolor;
ctx.fillRect(left_width+pading+right_width/4,perHeight/2,120,35);
//获取反色,展示文字序号
var pattern = /[0-9]+/g;
var matches = tmpcolor.match(pattern);
var r = 255-matches[0];
var g = 255-matches[1];
var b = 255-matches[2];
ctx.beginPath();
ctx.fillStyle="rgb("+r+","+g+","+b+")";
ctx.font="14px Arial";
ctx.fillText("得分:"+score, left_width+pading+right_width/4+35,perHeight/2+23);
myCanvas.addEventListener('keydown', doKeyDown,true);
myCanvas.focus();
window.addEventListener('keydown', doKeyDown, true);
}
function injileilist(jileis, x, y){
for(var i = 0; i < jileis.length; i++){
if(jileis[i].x == x && jileis[i].y == y){
return true;
}
}
return false;
}
function getUnixTime(){
return Math.floor(Date.now() / 1000);
}
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
draw();
</script>
</body>
</html>
截图:

本文来自博客园,作者:河北大学-徐小波,转载请注明原文链接:https://www.cnblogs.com/xuxiaobo/p/18398937

浙公网安备 33010602011771号