Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE HTML>
- <head>
- <meta charset="utf-8">
- <title>Tetris</title>
- <style>
- canvas {
- margin: auto;
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- border: 2px solid #222;
- }
- </style>
- </head>
- <body>
- <script>
- var WIDTH, HEIGHT;
- var SECTION = 20;
- var SPACE = 2;
- var gridpoints_x = 11;
- var gridpoints_y = 15;
- var canvas, ctx, keystate, cooldown, stop;
- var DownArrow=40, RightArrow=39, LeftArrow=37;
- var game = {
- grid: null,
- object: {
- x: null,
- y: null,
- color: null,
- grid: null,
- draw: function() {
- ctx.fillStyle = this.color;
- for(var i=0; i<gridpoints_x; i++) {
- for(var j=0; j<gridpoints_y; j++) {
- for(var h=0; h<this.grid.length; h++) {
- if(this.grid[h][0]+this.x == i && this.grid[h][1]+this.y == j) {
- ctx.fillRect(SECTION*i + SPACE*i, SECTION*j + SPACE*j,SECTION, SECTION);
- }
- }
- }
- }
- },
- set_object: function() {
- var obj = Math.floor((Math.random() * 5) + 1);
- this.x = Math.floor(gridpoints_x/2);
- this.y = 1;
- var check_grid = function() {
- for(var i=0; i<game.object.grid.length; i++) {
- var x = game.object.grid[i][0]+game.object.x;
- var y = game.object.grid[i][1]+game.object.y;
- if(game.grid[x][y][0] == true) {
- console.log("YOU LOSE!");
- stop = true;
- }
- }
- }
- switch(obj) {
- case(1):
- this.color = "#0F0";
- this.grid = [[0, 0], [0, -1], [-1, 0], [1, 0]];
- check_grid();
- break;
- case(2):
- this.color = "#F00";
- this.grid = [[-1, -1], [-1, 0], [-1, 1], [0, 1]];
- check_grid();
- break;
- case(3):
- this.color = "#00F";
- this.grid = [[-1, -1], [0, -1], [0, 0], [1, 0]];
- check_grid();
- break;
- case(4):
- this.color = "#FF0";
- this.grid = [[-1, -1], [0, -1], [0, 0], [-1, 0]];
- check_grid();
- break;
- case(5):
- this.color = "#DF7401";
- this.grid = [[1, -1], [1, 0], [1, 1], [0, 1]];
- check_grid();
- break;
- }
- },
- rotate_object: function() {
- // COMING SOON
- }
- },
- generate_grid: function() {
- this.grid = [];
- for(var i=0; i<gridpoints_x; i++) {
- this.grid[i] = [];
- }
- for(var i=0; i<gridpoints_x; i++) {
- for(var j=0; j<gridpoints_y; j++) {
- this.grid[i][j] = [false, "#444"];
- }
- }
- },
- draw: function() {
- for(var i=0; i<gridpoints_x; i++) {
- for(var j=0; j<gridpoints_y; j++) {
- ctx.fillStyle = this.grid[i][j][1];
- ctx.fillRect(SECTION*i + SPACE*i, SECTION*j + SPACE*j,SECTION, SECTION);
- }
- }
- },
- update: function() {
- if(cooldown > 5) {
- // PLAYER CONTROL
- var goleft = false;
- var goright = false;
- if(keystate[LeftArrow]) {
- goleft=true;
- for(var i=0; i<this.object.grid.length; i++) {
- var x = this.object.grid[i][0]+this.object.x;
- var y = this.object.grid[i][1]+this.object.y;
- if(!this.grid.hasOwnProperty(x-1))
- goleft = false;
- else if(this.grid[x-1][y][0] == true)
- goleft = false;
- }
- keystate[LeftArrow] = false;
- }
- if(keystate[RightArrow]) {
- goright=true;
- for(var i=0; i<this.object.grid.length; i++) {
- var x = this.object.grid[i][0]+this.object.x;
- var y = this.object.grid[i][1]+this.object.y;
- if(!this.grid.hasOwnProperty(x+1))
- goright = false;
- else if(this.grid[x+1][y][0] == true)
- goright = false;
- }
- keystate[RightArrow] = false;
- }
- if(goleft) { this.object.x--; }
- if(goright) { this.object.x++; }
- }
- if(cooldown > 10) {
- // MOVE DOWN
- var run = true;
- var output = false;
- for(var i=0; i<this.object.grid.length; i++) {
- var x = this.object.grid[i][0]+this.object.x;
- var y = this.object.grid[i][1]+this.object.y;
- if(!this.grid[x].hasOwnProperty(y+1)) {
- output = true, run = false;
- } else if(this.grid[x][y+1][0] == true) {
- output = true, run = false;
- }
- }
- if(output) {
- for(var j=0; j<this.object.grid.length; j++) {
- var x = this.object.grid[j][0]+this.object.x;
- var y = this.object.grid[j][1]+this.object.y;
- this.grid[x][y] = [];
- this.grid[x][y][0] = true;
- this.grid[x][y][1] = this.object.color;
- }
- for(var i=0; i<this.object.grid.length; i++) {
- var clear_row = true;
- for(var j=0; j<gridpoints_x; j++) {
- if(this.grid[j][this.object.grid[i][1]+this.object.y][0] == false) {
- clear_row = false;
- }
- }
- if(clear_row) {
- var y = this.object.grid[i][1]+this.object.y;
- for(var j=0; j<gridpoints_x; j++) {
- this.grid[j][y][0] = false;
- this.grid[j][y][1] = "#444"; // SOMEWHERE HERE (UP / DOWN 10 LINES)
- }
- for(var j=y; j>0; j--) {
- for(var h=0; h<gridpoints_x; h++) {
- if(this.grid[h].hasOwnProperty(j+1)) {
- this.grid[h][j+1][0] = this.grid[h][j][0];
- this.grid[h][j+1][1] = this.grid[h][j][0];
- }
- this.grid[h][j][0] = false;
- this.grid[h][j][1] = "#444";
- }
- }
- }
- }
- this.object.set_object();
- }
- if(run) this.object.y++;
- cooldown = 0;
- } else cooldown++;
- }
- }
- function main() {
- init();
- canvas = document.createElement("canvas");
- canvas.width = WIDTH;
- canvas.height = HEIGHT;
- ctx = canvas.getContext("2d");
- document.body.appendChild(canvas);
- document.addEventListener("keydown", function(evt) {
- keystate[evt.keyCode] = true;
- });
- var loop = function() {
- update();
- draw();
- requestAnimationFrame(loop);
- }
- requestAnimationFrame(loop);
- }
- function init() {
- keystate = {};
- cooldown = 0;
- stop=false;
- WIDTH = gridpoints_x*SECTION + (gridpoints_x-2)*SPACE;
- HEIGHT = gridpoints_y*SECTION + (gridpoints_y-2)*SPACE;
- game.generate_grid();
- game.object.set_object();
- }
- function update() {
- if(!stop)
- game.update();
- }
- function draw() {
- if(!stop){
- ctx.fillStyle = "#222";
- ctx.fillRect(0, 0, WIDTH, HEIGHT);
- game.draw();
- game.object.draw();
- }
- }
- main();
- </script>
- </body>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement