Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const canvas = document.getElementById('tetris');
  2. const context = canvas.getContext('2d');
  3.  
  4. context.scale(20,20);
  5.  
  6.  
  7. const matrix = [
  8.     [0,0,0],
  9.     [1,1,1],
  10.     [0,1,0],
  11. ];
  12.  
  13. function collide(arena,player){
  14.  
  15.     const m= player.matrix;
  16.     const o = player.pos;
  17.     for (let y=0; y< m.length; ++y){
  18.         for (let x=0; x<m[y].length;++x){
  19.         if (m[y][x] !== 0 &&
  20.                 (arena[y+o.y]&&
  21.                 arena[y+o.y][x+o.x])!==0) {
  22.                 return true;
  23.                 }
  24.         }
  25.     }
  26.     return false;
  27. }
  28.  
  29. function createMatrix(w, h ){
  30.     const matrix =[];
  31.     while (h--){
  32.         matrix.push (new Array(w).fill(0));
  33.     }
  34.     return matrix;
  35.     }
  36.  
  37.  
  38.  
  39. function draw(){
  40.  
  41. context.fillStyle = '#000' ;
  42. context.fillRect(0,0,canvas.width, canvas.height);
  43.  
  44. drawMatrix(arena,{x:0,y:0});
  45. drawMatrix(player.matrix,player.pos);
  46. }
  47. function drawMatrix(matrix, offset){
  48. matrix.forEach((row,y)=> {
  49.     row.forEach((value,x) => {
  50.     if (value!==0){
  51.     context.fillStyle = 'red' ;
  52.     context.fillRect (x + offset.x,
  53.                     y + offset.y,
  54.                     1,1);
  55.     }
  56.     });
  57. });
  58. }
  59.  
  60. function merge(arena, player) {
  61.     player.matrix.forEach((row, y) => {
  62.         row.forEach((value, x) => {
  63.             if (value !== 0) {
  64.                 arena[y + player.pos.y][x + player.pos.x] = value;
  65.             }
  66.         });
  67.     });
  68. }
  69.  
  70. function playerDrop(){
  71.         player.pos.y++;
  72.         if (collide(arena,player)){
  73.         player.pos.y--;
  74.         merge(arena,player) ;
  75.         player.pos.y = 0;
  76.         }
  77.         dropCounter=0;
  78. }
  79.  
  80. function playerMove(dir){
  81.         player.pos.x += dir;
  82.         if (collide(arena,player)){
  83.             player.pos.x -= dir;
  84.         }
  85. }
  86.  
  87. function playerRotate(dir){
  88.     const pos = player.pos.x;
  89.     let offset = 1;
  90.     rotate(player.matrix,dir);
  91.     while(collide(arena,player)){
  92.         player.pos.x += offset;
  93.         offset =- (offset + (offset > 0 ? 1: -1));
  94.         if (offset > player.matrix[0].length){
  95.             rotate(player.matrix, -dir);
  96.             player.pos.x = pos;
  97.             return;
  98.         }
  99.  
  100.     }
  101. }
  102.  
  103. function rotate(matrix,dir){
  104.     for(let y=0; y < matrix.length; ++y){
  105.         for(let x=0; x < y; ++x){
  106.             [
  107.                 matrix[x][y],
  108.                 matrix[y][x],
  109.             ] = [
  110.                 matrix[y][x],
  111.                 matrix[x][y],
  112.             ];
  113.         }
  114.     }
  115. if(dir > 0){
  116.     matrix.forEach(row => row.reverse());
  117. }else {
  118.         matrix.reverse();
  119.     }
  120. }
  121.  
  122.  
  123.  
  124. let dropCounter = 0;
  125. let dropInterval = 1000;
  126.  
  127.  
  128. let lastTime=0;
  129. function update(time = 0){
  130.     const deltaTime = time - lastTime;
  131.     lastTime=time;
  132.  
  133.     dropCounter += deltaTime;
  134.     if (dropCounter > dropInterval){
  135.         playerDrop();
  136.         if (collide(arena, player)) {
  137.             player.pos.y--;
  138.             merge(arena,player);
  139.             player.pos.y = 0;
  140.         }
  141.         dropCounter = 0;
  142.     }
  143.  
  144.         draw();
  145.         requestAnimationFrame(update);
  146.  
  147. }
  148.  
  149. const arena = createMatrix(12,20);
  150.  
  151. const player = {
  152.     pos:{x:5, y: 5},
  153.     matrix:matrix,
  154. }
  155.  
  156. document.addEventListener('keydown', event => {
  157.     if (event.keyCode === 37){
  158.         playerMove(-1);
  159.     player.pos.x--;
  160.     } else if (event.keyCode === 39){
  161.         playerMove(1);
  162.     }else if (event.keyCode === 40){
  163.     playerDrop();
  164. } else if (event.keyCode == 38){
  165.     playerRotate(-1);
  166. }
  167. })
  168.  
  169.  
  170.  
  171. update();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement