Create Your Own First Game On Html : Snake Game
| Copy this source code and paste in notepad. After that, save that file with .html extension <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <title></title> | |
| <style> | |
| html, body { | |
| height: 100%; | |
| margin: 0; | |
| } | |
| body { | |
| background: black; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| canvas { | |
| border: 1px solid white; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <canvas width="400" height="400" id="game"></canvas> | |
| <script> | |
| var canvas = document.getElementById('game'); | |
| var context = canvas.getContext('2d'); | |
| var grid = 16; | |
| var snake = { | |
| x: 160, | |
| y: 160, | |
| dx: grid, | |
| dy: 0, | |
| cells: [], | |
| maxCells: 4 | |
| }; | |
| var count = 0; | |
| var apple = { | |
| x: 320, | |
| y: 320 | |
| }; | |
| function getRandomInt(min, max) { | |
| return Math.floor(Math.random() * (max - min)) + min; | |
| } | |
| // game loop | |
| function loop() { | |
| requestAnimationFrame(loop); | |
| // slow game loop to 15 fps instead of 60 - 60/15 = 4 | |
| if (++count < 4) { | |
| return; | |
| } | |
| count = 0; | |
| context.clearRect(0,0,canvas.width,canvas.height); | |
| snake.x += snake.dx; | |
| snake.y += snake.dy; | |
| // wrap snake position on edge of screen | |
| if (snake.x < 0) { | |
| snake.x = canvas.width - grid; | |
| } | |
| else if (snake.x >= canvas.width) { | |
| snake.x = 0; | |
| } | |
| if (snake.y < 0) { | |
| snake.y = canvas.height - grid; | |
| } | |
| else if (snake.y >= canvas.height) { | |
| snake.y = 0; | |
| } | |
| // keep track of where snake has been. front of the array is always the head | |
| snake.cells.unshift({x: snake.x, y: snake.y}); | |
| // remove cells as we move away from them | |
| if (snake.cells.length > snake.maxCells) { | |
| snake.cells.pop(); | |
| } | |
| // draw apple | |
| context.fillStyle = 'red'; | |
| context.fillRect(apple.x, apple.y, grid-1, grid-1); | |
| // draw snake | |
| context.fillStyle = 'green'; | |
| snake.cells.forEach(function(cell, index) { | |
| context.fillRect(cell.x, cell.y, grid-1, grid-1); | |
| // snake ate apple | |
| if (cell.x === apple.x && cell.y === apple.y) { | |
| snake.maxCells++; | |
| apple.x = getRandomInt(0, 25) * grid; | |
| apple.y = getRandomInt(0, 25) * grid; | |
| } | |
| // check collision with all cells after this one (modified bubble sort) | |
| for (var i = index + 1; i < snake.cells.length; i++) { | |
| // collision. reset game | |
| if (cell.x === snake.cells[i].x && cell.y === snake.cells[i].y) { | |
| snake.x = 160; | |
| snake.y = 160; | |
| snake.cells = []; | |
| snake.maxCells = 4; | |
| snake.dx = grid; | |
| snake.dy = 0; | |
| apple.x = getRandomInt(0, 25) * grid; | |
| apple.y = getRandomInt(0, 25) * grid; | |
| } | |
| } | |
| }); | |
| } | |
| document.addEventListener('keydown', function(e) { | |
| // prevent snake from backtracking on itself | |
| if (e.which === 37 && snake.dx === 0) { | |
| snake.dx = -grid; | |
| snake.dy = 0; | |
| } | |
| else if (e.which === 38 && snake.dy === 0) { | |
| snake.dy = -grid; | |
| snake.dx = 0; | |
| } | |
| else if (e.which === 39 && snake.dx === 0) { | |
| snake.dx = grid; | |
| snake.dy = 0; | |
| } | |
| else if (e.which === 40 && snake.dy === 0) { | |
| snake.dy = grid; | |
| snake.dx = 0; | |
| } | |
| }); | |
| requestAnimationFrame(loop); | |
| </script> | |
| </body> | |
| </html> |
Comments
Post a Comment