Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta http-equiv="x-ua-compatible" content="ie=edge">
- <title>Snake Game</title>
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style>
- * {
- font-family: sans-serif;
- font-size: 16px;
- width: 100%;
- height: 100%;
- padding: 0;
- margin: 0;
- }
- canvas {
- width: 100%;
- height: 99.6%;
- }
- </style>
- </head>
- <body>
- <canvas id="canvas"></canvas>
- <script>
- var canvas = document.getElementById("canvas");
- var canvasContext = canvas.getContext('2d');
- var winW = window.innerWidth;
- var winH = window.innerHeight;
- canvas.width = window.innerWidth;
- canvas.height = window.innerHeight;
- document.onkeydown = checkKey;
- var x,y,fruitX,fruitY,nTail,score;
- var tailX = [];
- var tailY = [];
- const COLUMNS = 15;
- const ROWS = COLUMNS;
- var gameSpeed = 120;
- const directions = {
- UP: 'up',
- DOWN: 'down',
- LEFT: 'left',
- RIGHT: 'right'
- };
- let direciton;
- setup();
- function timeout() {
- setTimeout(function () {
- main();
- timeout();
- }, gameSpeed);
- };
- timeout();
- function main()
- {
- draw();
- move();
- logic();
- }
- function setup()
- {
- x = 7;
- y = 7;
- score = 0;
- nTail = 0;
- tailX = [];
- tailY = [];
- direction = null;
- fruitX = Math.floor(Math.random() * ROWS);
- fruitY = Math.floor(Math.random() * COLUMNS);
- }
- function draw()
- {
- const GAME_HEIGHT = winH - (winH/50);
- const GAME_WIDTH = GAME_HEIGHT;
- const GAME_X = (winW/2)-(GAME_WIDTH/2);
- const GAME_Y = winH/100;
- const TILE_WIDTH = GAME_WIDTH / ROWS;
- const TILE_HEIGHT = GAME_HEIGHT / COLUMNS;
- const HEAD_RADIUS = (TILE_WIDTH - (TILE_WIDTH / 3)) / 2;
- const TAIL_RADIUS = TILE_WIDTH / 4;
- rect(0,0, winW,winH, 'black'); // canvas
- rect(GAME_X,GAME_Y, GAME_WIDTH,GAME_HEIGHT, 'white');
- for(var i = 0; i < COLUMNS; i++)
- {
- for(var j = 0; j < ROWS; j++)
- {
- rect(GAME_X+(i*TILE_WIDTH),GAME_Y+(j*TILE_HEIGHT), TILE_WIDTH,TILE_HEIGHT, 'red');
- if(x === i && y === j)
- {
- var circleX = ((GAME_X+(i*TILE_WIDTH)) - (TILE_WIDTH / 2)) + TILE_WIDTH;
- var circleY = ((GAME_Y+(j*TILE_HEIGHT)) - (TILE_HEIGHT / 2)) + TILE_HEIGHT;
- circle(circleX,circleY, HEAD_RADIUS, '#555555');
- }
- if(fruitX === i && fruitY === j)
- {
- var circleX = ((GAME_X+(i*TILE_WIDTH)) - (TILE_WIDTH / 2)) + TILE_WIDTH;
- var circleY = ((GAME_Y+(j*TILE_HEIGHT)) - (TILE_HEIGHT / 2)) + TILE_HEIGHT;
- circle(circleX,circleY, TAIL_RADIUS, '#00AA00');
- }
- for(var k = 0; k < nTail; k++)
- {
- if (tailX[k] === i && tailY[k] === j)
- {
- var circleX = ((GAME_X+(i*TILE_WIDTH)) - (TILE_WIDTH / 2)) + TILE_WIDTH;
- var circleY = ((GAME_Y+(j*TILE_HEIGHT)) - (TILE_HEIGHT / 2)) + TILE_HEIGHT;
- circle(circleX,circleY, TAIL_RADIUS, '#555555');
- }
- }
- }
- }
- }
- function move()
- {
- switch(direction)
- {
- case directions.UP:
- y--;
- break;
- case directions.DOWN:
- y++;
- break;
- case directions.LEFT:
- x--;
- break;
- case directions.RIGHT:
- x++;
- break;
- }
- }
- function logic()
- {
- if(x < 0 || x >= ROWS || y < 0 || y >= COLUMNS)
- {
- alert("Game Over - you died with a score of " + score + ".");
- setup();
- }
- if(x === fruitX && y === fruitY)
- {
- fruitX = Math.floor(Math.random() * ROWS);
- fruitY = Math.floor(Math.random() * COLUMNS);
- score += 100;
- if(nTail === 0)
- {
- nTail += 2;
- }
- else
- {
- nTail++;
- }
- }
- for(var i = 0; i < nTail; i++)
- {
- if(tailX[i] === x && tailY[i] === y && i !== 1)
- {
- draw();
- alert("Game Over - you bit youself, you died with a score of " + score + ".");
- setup();
- }
- if(tailX[i] === x && tailY[i] === y && i === 1)
- {
- switch(direction)
- {
- case directions.UP:
- y += 2;
- direction = directions.DOWN;
- break;
- case directions.DOWN:
- y -= 2;
- direction = directions.UP;
- break;
- case directions.LEFT:
- x += 2;
- direction = directions.RIGHT;
- break;
- case directions.RIGHT:
- x -= 2;
- direction = directions.LEFT;
- break;
- }
- }
- }
- var prevX = tailX[0];
- var prevY = tailY[0];
- var prevX2, prevY2;
- tailX[0] = x;
- tailY[0] = y;
- for (var i = 1; i < nTail; i++)
- {
- prevX2 = tailX[i];
- prevY2 = tailY[i];
- tailX[i] = prevX;
- tailY[i] = prevY;
- prevX = prevX2;
- prevY = prevY2;
- }
- }
- function rect(x,y, width,height, color)
- {
- canvasContext.fillStyle = color;
- canvasContext.fillRect(x,y, width,height);
- }
- function circle(cX,cY, radius, color)
- {
- canvasContext.fillStyle = color;
- canvasContext.beginPath();
- canvasContext.arc(cX,cY, radius,0,Math.PI*2,true);
- canvasContext.fill();
- }
- function checkKey(e)
- {
- var keynum;
- if(window.event) { // IE
- keynum = e.keyCode;
- } else if(e.which){ // Netscape/Firefox/Opera
- keynum = e.which;
- }
- switch(keynum)
- {
- case 87: // w
- if(direction !== directions.DOWN)
- {
- direction = directions.UP;
- }
- else if(nTail === 0)
- {
- direction = directions.UP;
- }
- break;
- case 65: // a
- if(direction !== directions.RIGHT)
- {
- direction = directions.LEFT;
- }
- else if(nTail === 0)
- {
- direction = directions.LEFT;
- }
- break;
- case 83: // s
- if(direction !== directions.UP)
- {
- direction = directions.DOWN;
- }
- else if(nTail === 0)
- {
- direction = directions.DOWN;
- }
- break;
- case 68: // d
- if(direction !== directions.LEFT)
- {
- direction = directions.RIGHT;
- }
- else if(nTail === 0)
- {
- direction = directions.RIGHT;
- }
- break;
- }
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment