Snake Mini Game
About this app
Play the classic Snake game directly in your browser. Control the snake and collect food to grow. Challenge yourself for the high score!
Snake Mini Game
Related apps
Put this on your site
Source
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Snake Mini Game</title>
<meta name="description" content="Play the classic Snake game directly in your browser. Control the snake and collect food to grow. Challenge yourself for the high score!">
<meta name="keywords" content="snake game, classic games, arcade game, fun games, HTML5 games">
<!-- Libraries -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.6.0/css/fontawesome.min.css" crossorigin="anonymous">
<script type="text/javascript">
try {
document.addEventListener("DOMContentLoaded", function() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
document.getElementById('main-container').appendChild(canvas);
canvas.width = window.innerWidth > 400 ? 400 : window.innerWidth * 0.9; // Responsive canvas size
canvas.height = canvas.width;
let snake = [{x: 10, y: 10}];
let direction = {x: 1, y: 0};
let food = {};
let score = 0;
function init() {
createFood();
document.addEventListener('keydown', changeDirection);
document.addEventListener('touchstart', handleTouchStart);
document.addEventListener('touchend', handleTouchEnd);
gameLoop();
}
function handleTouchStart(evt) {
startX = evt.touches[0].clientX;
startY = evt.touches[0].clientY;
}
function handleTouchEnd(evt) {
const endX = evt.changedTouches[0].clientX;
const endY = evt.changedTouches[0].clientY;
const xDiff = endX - startX;
const yDiff = endY - startY;
if (Math.abs(xDiff) > Math.abs(yDiff)) {
if (xDiff > 0 && direction.x === 0) { direction = {x: 1, y: 0}; }
else if (xDiff < 0 && direction.x === 0) { direction = {x: -1, y: 0}; }
} else {
if (yDiff > 0 && direction.y === 0) { direction = {x: 0, y: 1}; }
else if (yDiff < 0 && direction.y === 0) { direction = {x: 0, y: -1}; }
}
}
function createFood() {
food.x = Math.floor(Math.random() * (canvas.width / 10)) * 10;
food.y = Math.floor(Math.random() * (canvas.height / 10)) * 10;
if (snake.some(segment => segment.x === food.x && segment.y === food.y)) {
createFood();
}
}
function changeDirection(event) {
switch(event.key) {
case 'ArrowUp':
if (direction.y === 0) { direction = {x: 0, y: -1}; }
break;
case 'ArrowDown':
if (direction.y === 0) { direction = {x: 0, y: 1}; }
break;
case 'ArrowLeft':
if (direction.x === 0) { direction = {x: -1, y: 0}; }
break;
case 'ArrowRight':
if (direction.x === 0) { direction = {x: 1, y: 0}; }
break;
}
}
function update() {
const head = {x: snake[0].x + direction.x * 10, y: snake[0].y + direction.y * 10};
snake.unshift(head);
if (head.x === food.x && head.y === food.y) {
score++;
createFood();
} else {
snake.pop();
}
if (head.x < 0 || head.x >= canvas.width || head.y < 0 || head.y >= canvas.height || collision(head)) {
alert(`Game Over! Score: ${score}`);
document.location.reload();
}
}
function collision(head) {
return snake.slice(1).some(segment => segment.x === head.x && segment.y === head.y);
}
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = 'lightgreen';
snake.forEach(segment => {
ctx.fillRect(segment.x, segment.y, 10, 10);
});
ctx.fillStyle = 'red';
ctx.fillRect(food.x, food.y, 10, 10);
ctx.fillStyle = 'black';
ctx.font = "20px Arial";
ctx.fillText(`Score: ${score}`, 10, 20);
}
function gameLoop() {
update();
draw();
setTimeout(gameLoop, 100);
}
init();
});
} catch (error) {
throw error;
}
</script>
<style>
body {
background: linear-gradient(135deg, #87CEEB, #FFE1E1);
color: #333;
margin: 0;
font-family: 'Comic Sans MS', cursive, sans-serif;
}
#main-container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
canvas {
border: 5px solid #FFC107;
border-radius: 10px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);
touch-action: none; /* Prevent default touch actions */
}
</style>
</head>
<body>
<div id="main-container" class="container">
<!-- App HTML Goes Here -->
</div>
</body>
</html>
NEW APPS
These are apps made by the community!