-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtetris_bug.html
More file actions
88 lines (84 loc) · 3.39 KB
/
tetris_bug.html
File metadata and controls
88 lines (84 loc) · 3.39 KB
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
<canvas id="world" width="320" height="350"></canvas>
<br>
[X] : Girar para direita<br>
[Z] : Girar para esquerda<br>
[SETAS] : Mover<br>
<style id="jsbin-css">
</style>
<script>
var b = new Array(20);var CNT;var speed;var x1 = new Array(4);var y1 = new Array(4);var x,y;
window.onload = function(){
var i;var CVS = document.getElementById('world');CNT = CVS.getContext('2d');
for(i=0;i<20;i++){ b[i] = new Array(12); }
clearblock();newpiece();window.addEventListener('keydown',keydownfunc,true);
speed = 20; timerfunc(); }
var clearblock = function(){
var i,j;
for(i=0;i<20;i++){ for(j=0;j<12;j++){
if((j==0)||(j==11)||(i==19)){b[i][j] = 1; //balisas
}else{ b[i][j] = 0; }}} }
var newpiece = function(r){
var i,num,t;
var block=[[[0,-1], [0,0], [0,1],[0,2]],[[0,-1],[0,0],[1,0],[-1,0]],[[0,-1],[0,0],[1,0],[1,-1]],
[[0,-1], [0,0], [-1,0],[1,-1]],[[0,-1],[0,0],[1,0],[-1,-1]],[[0,-1],[0,0],[0,1],[-1,1]],
[[0,-1], [0,0], [0,1], [1,1]]];
num = Math.floor(Math.random()*7); //Gera um número aleatório de 0-6
for(i=0;i<4;i++){x1[i] = block[num][i][0];y1[i] = block[num][i][1];}
t = Math.floor(Math.random()*4); //Gera um número aleatório de 0-3
for(i=1;i<=t;i++){turnpiece(1); } //Gira aleatoriamente
x = 6; y = 1;
if(hitcheck()){ speed = 1000;clearblock();}
putblock(2); printblock();
}
var turnpiece = function(r){
var tx,i;
for(i=0;i<4;i++){tx = x1[i] * r;x1[i] = -y1[i] * r; y1[i] = tx; } }
var hitcheck = function(){
var i,cx,cy,hit=0;
for(i=0;i<4;i++){cx=x+x1[i]; cy=y+y1[i];
if((cx>=0)&&(cx<=11)&&(cy>=0)&&(cy<=19)){if(b[cy][cx]) hit++;} }
return(hit); }
var putblock = function(a){
var i,cx,cy;
for(i=0;i<4;i++){cx=x+x1[i];cy=y+y1[i];
if((cx>=0)&&(cx<=11)&&(cy>=0)&&(cy<=19)){b[cy][cx] = a;} } }
var printblock = function(){
var i,j;
for(i=0;i<20;i++){
for(j=0;j<12;j++){
if(b[i][j]==0){CNT.fillStyle = "rgb(200,255,25)"; //cor do fundo
}else if(b[i][j]==1){CNT.fillStyle = "rgb(0,128,0)"; //cor das balisas
}else if(b[i][j]==2){CNT.fillStyle = "rgb(12,0,0)"; //cor da peças
}else if(b[i][j]==3){CNT.fillStyle = "rgb(0,108,255)";} // cor das peças paradas
CNT.fillRect(j*16,i*18,150,10); } } }
var timerfunc = function(){
putblock(0); y++; //retângulos brancos que dividem os blocos
if(hitcheck()){ y--;putblock(3);
linecheck(); newpiece();
}else{putblock(2); }
printblock(); setTimeout("timerfunc()", speed);
}
var linecheck = function(){
var i,cx,cy,line; cy = 18;
while(cy>=1){ line=1;
for(cx=1;cx<=10;cx++){if(b[cy][cx]) line++; }
if(line==10){
for(i=cy; i>=1;i--){
for(cx=1;cx<=10;cx++){ b[i][cx]=b[i-1][cx]; } }
speed -= 50;if(speed<100)speed = 100;
}else{ cy--; } } }
var keydownfunc = function(event){
var code = event.keyCode;
var oldx=x, oldy=y,r=0;
putblock(0);
switch(code){
case 37: event.preventDefault();x--;break;
case 39: event.preventDefault();x++;break;
case 40: event.preventDefault();y++;break;
case 88: event.preventDefault();r=1;break;
case 90: event.preventDefault();r=-1;break; }
if(hitcheck()){ x=oldx; y=oldy; }
if(r){ turnpiece(r);
if(hitcheck()){ turnpiece(-r); } }
putblock(2); printblock(); }
</script>