Calculator Tools Calculator Tools
Create

Snake Game

Jan 8, 2024

About this app

A fun and addictive game like Snake where you control a snake to eat food and grow longer.

Snake 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">

<title>Snake Game</title>
<meta name="description" content="A fun and addictive game like Snake where you control a snake to eat food and grow longer.">
<meta name="keywords" content="snake, game, fun, addictive, snake game">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

<script type="text/javascript">
try {
// App Javascript Goes Here. Place your entire script content inside the try block for error handling.

// This will run when the DOM is ready.
document.addEventListener("DOMContentLoaded", function() {
const canvas = document.getElementById('gameCanvas');
const context = canvas.getContext('2d');

// Game constants
const GRID_SIZE = 20;
const CANVAS_SIZE = 400;

// Snake object
let snake = [
{ x: 10, y: 10 },
];

// Food object
let food = { x: 15, y: 10 };

// Game state
let direction = 'right';
let score = 0;

// Function to draw game objects
function draw() {
// Clear canvas
context.clearRect(0, 0, CANVAS_SIZE, CANVAS_SIZE);

// Draw snake
snake.forEach(segment => {
context.fillStyle = '#2ecc71';
context.fillRect(segment.x * GRID_SIZE, segment.y * GRID_SIZE, GRID_SIZE, GRID_SIZE);
});

// Draw food
context.fillStyle = '#e74c3c';
context.fillRect(food.x * GRID_SIZE, food.y * GRID_SIZE, GRID_SIZE, GRID_SIZE);

// Draw score
context.fillStyle = '#ffffff';
context.font = '20px Arial';
context.fillText(`Score: ${score}`, 10, 30);
}

// Function to update game state
function update() {
// Move snake
const head = { x: snake[0].x, y: snake[0].y };

if (direction === 'up') head.y--;
if (direction === 'down') head.y++;
if (direction === 'left') head.x--;
if (direction === 'right') head.x++;

snake.unshift(head);

// Check if snake has eaten food
if (head.x === food.x && head.y === food.y) {
score++;
generateFood();
} else {
snake.pop();
}

// Check if snake has collided with walls or itself
if (
head.x < 0 ||
head.x >= CANVAS_SIZE / GRID_SIZE ||
head.y < 0 ||
head.y >= CANVAS_SIZE / GRID_SIZE ||
snake.some(segment => segment.x === head.x && segment.y === head.y)
) {
clearInterval(gameInterval);
alert(`Game Over! Your score is ${score}`);
}
}

// Function to generate new food
function generateFood() {
food.x = Math.floor(Math.random() * (CANVAS_SIZE / GRID_SIZE));
food.y = Math.floor(Math.random() * (CANVAS_SIZE / GRID_SIZE));
}

// Function to handle keydown events
function handleKeyDown(event) {
const key = event.keyCode;

if (key === 37 && direction !== 'right') direction = 'left';
if (key === 38 && direction !== 'down') direction = 'up';
if (key === 39 && direction !== 'left') direction = 'right';
if (key === 40 && direction !== 'up') direction = 'down';
}

// Start the game
generateFood();
const gameInterval = setInterval(() => {
update();
draw();
}, 100);

// Event listener for keydown events
document.addEventListener('keydown', handleKeyDown);
});

} catch (error) {
// This will throw the error to the parent window.
throw error;
}
</script>

<style>
/* App CSS Goes Here */
body {
background-color: #f1c40f;
font-family: 'Roboto', sans-serif;
}

#gameCanvas {
border: 2px solid #000000;
background-color: #ffffff;
margin: 0 auto;
display: block;
}
</style>
</head>
<body>
<div id="main-container" class="container">
<canvas id="gameCanvas" width="400" height="400"></canvas>
</div>
</body>
</html>