-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
109 lines (94 loc) · 2.91 KB
/
script.js
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
const SHAPES = [SQUARE, RECTANGLE, STAIRS, BRACKET, MOUNTAIN];
const RANDOM_SHAPE = () => SHAPES[randint(0, 4)];
document.getElementById("right").onclick = moveRight;
document.getElementById("left").onclick = moveLeft;
document.getElementById("up").onclick = () => {
if (document.getElementById("end").innerHTML == "GAME OVER")
return;
GAME_DATA.currentShape.rotate();
updateMinos();
}
document.getElementById("f").onclick = () => {
if(GAME_DATA.currentShape.flip !== undefined) {
GAME_DATA.currentShape.flip();
updateMinos();
}
};
document.onkeydown = function(event) {
if (document.getElementById("end").innerHTML == "GAME OVER")
return;
const minos = GAME_DATA.currentShape.getMinos();
switch(event.key) {
case 'ArrowRight':
moveRight();
break;
case 'ArrowLeft':
moveLeft();
break;
case 'ArrowDown':
if (GAME_DATA.speed != 40) {
GAME_DATA.backupSpeed = GAME_DATA.speed;
GAME_DATA.speed = 40;
}
break;
case 'ArrowUp':
GAME_DATA.currentShape.rotate();
updateMinos();
break;
case 'f':
if(GAME_DATA.currentShape.flip !== undefined) {
GAME_DATA.currentShape.flip();
updateMinos();
}
break;
}
}
document.onkeyup = event => {
if(event.key == 'ArrowDown')
GAME_DATA.speed = GAME_DATA.backupSpeed;
}
const START_STOP = document.getElementById("go");
GAME_DATA.screen = new MATRIX_100x220();
async function run() {
if (START_STOP.innerHTML == "Pause") {
alert('Game paused. Click `OK\' to resume.');
return;
}
START_STOP.innerHTML = "Pause";
START_STOP.style.backgroundColor = "red";
document.getElementById("end").innerHTML = "";
document.getElementById("score").innerHTML = "0";
SVG.innerHTML = "";
for (;;) {
GAME_DATA.currentShape = new (RANDOM_SHAPE());
var minos = GAME_DATA.currentShape.getMinos();
var xs = minos.map(m=>m.x);
var min = Math.min(...xs);
var max = Math.max(...xs);
var dif = max - min + 1;
pointer.setAttribute('width', `${dif * 15}`);
pointer.setAttribute('x', (min-1) * 15);
pointer.setAttribute('fill', minos[0].node.getAttribute('fill'));
while (GAME_DATA.currentShape.downOne()) {
await sleep(GAME_DATA.speed / 8);
await sleep(GAME_DATA.speed / 8);
await sleep(GAME_DATA.speed / 8);
await sleep(GAME_DATA.speed / 8);
await sleep(GAME_DATA.speed / 8);
await sleep(GAME_DATA.speed / 8);
await sleep(GAME_DATA.speed / 8);
await sleep(GAME_DATA.speed / 8);
}
GAME_DATA.screen.attachShape(GAME_DATA.currentShape);
for (var cell of GAME_DATA.screen.topRow()) {
if (cell != null) {
await sleep(400);
document.getElementById("end").innerHTML = "GAME OVER";
START_STOP.innerHTML = "Play";
START_STOP.style.backgroundColor = "lime";
GAME_DATA.screen = new MATRIX_100x220();
return;
}
}
}
}