-
Notifications
You must be signed in to change notification settings - Fork 0
/
Tetris.html
34 lines (34 loc) · 2.82 KB
/
Tetris.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<canvas id="myCanvas" width="300" height="600" style="border:1px solid #000000;margin-left: auto;margin-right: auto;margin-top: auto;margin-bottom: auto;display: block;" />
<script>
var context = document.getElementById("myCanvas").getContext("2d"), canvas = context.canvas,
shapes = [[3840, 17476], [26112], [17984, 19968, 19520, 3648], [3712, 25120, 11776, 35008], [3616, 17600, 36352, 51328], [1728, 35904], [3168, 19584]],
e = '0000000000', scene = [e, e, e, e, e, e, e, e, e, e, e, e, e, e, e, e, e, e, e, e, e], canvasWidth = canvas.width, width = canvasWidth / 10, height = canvas.height / 20,
x = 3, y = -1, renderLoop = 0, shape, shapeIndex, activeScene = scene, score = 0, frameDelay = 165, levelIndicator = 5, intervalId, q;
function move(tempScene, tempShape, tempX, tempY) {
var shapeLine = (e + '000000' + tempShape.toString(2)).slice(-16);
function check(row) {
for (var i = 0, sceneLine = (tempScene[tempY + row] || '').split(''); i < 4; i++)
shapeLine.substring(row * 4, row * 4 + 4)[i] != 0 && (sceneLine[tempX + i] == 0 ? sceneLine[tempX + i] = shapeIndex + 1 : tempScene = (i = 4) - 4);
return (tempScene[tempY + row] = sceneLine.join('')) || tempScene;
}
return check(0) && check(1) && check(2) && check(3) && tempScene;
}
function update(key) {
shape = shape || shapes[shapeIndex = Math.floor(Math.random() * shapes.length)].slice(0), renderLoop = ++renderLoop % ((q = frameDelay - Math.floor(score / levelIndicator)) && q < 15 ? 15 : q), key = key && key.keyCode;
var tempX = x, tempY = y, tempScene, tempShape = shape.slice(0), temp = ((!renderLoop || key == 40) && tempY++) || ((key == 37) && tempX--) || ((key == 39) && tempX++) || ((key == 38) && tempShape.push(tempShape.shift()));
if (!(tempScene = move(scene.slice(0), tempShape[0], tempX, tempY))) {
if (!renderLoop || key == 40) {
if (y < 1) window.removeEventListener(clearInterval(intervalId) || alert('game over, score: ' + score) || "keydown", update);
for (var i = 1, blockCount = 0; i < 21; i++) activeScene[i].indexOf(0) < 0 && activeScene.splice(i, 1) && activeScene.splice(1, 0, e) && ++blockCount;
shape = 0, y = -1, x = 3, scene = activeScene, score += Math.pow(2, blockCount);
}
} else (y = tempY, x = tempX, shape = tempShape) && draw(activeScene = tempScene);
}
function draw(drawScene) {
for (var i = 1, temp = canvas.width = canvasWidth; i < 21; i++)
for (var j = 0; j < 10; j++)
(q = drawScene[i][j] * 35E5) && (context.fillRect((context.fillStyle = '#' + ('000000' + q.toString(16)).slice(-6)) && width * j, height * (i - 1), width, height)
|| context.rect(width * j, height * (i - 1), width, height) || context.stroke());
}
intervalId = setInterval(window.addEventListener("keydown", update) || update, 3);
</script>