<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css"> </head> <body> <canvas id="gameCanvas" width="400" height="400"></canvas> <script src="script.js"></script> </body> </html>
const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); const gridSize = 20; let snake = [{ x: 10, y: 10 }]; let food = { x: 15, y: 10 }; let score = 0; let dx = 1; // Vận tốc theo trục x (ban đầu đi sang phải) let dy = 0; // Vận tốc theo trục y (ban đầu không di chuyển) function drawSnake() { snake.forEach(segment => { ctx.fillStyle = 'green'; ctx.fillRect(segment.x * gridSize, segment.y * gridSize, gridSize - 2, gridSize - 2); }); } function drawFood() { ctx.fillStyle = 'red'; ctx.fillRect(food.x * gridSize, food.y * gridSize, gridSize - 2, gridSize - 2); } function moveSnake() { const head = { x: snake[0].x + dx, y: snake[0].y + dy }; snake.unshift(head); // Thêm đầu rắn mới vào đầu mảng if (head.x === food.x && head.y === food.y) { score++; generateFood(); } else { snake.pop(); // Loại bỏ đuôi rắn nếu không ăn thức ăn } } document.addEventListener('keydown', event => { switch (event.keyCode) { case 37: // стрелка влево dx = -1; dy = 0; break; case 38: // стрелка вверх dx = 0; dy = -1; break; case 39: // стрелка вправо dx = 1; dy = 0; break; case 40: // стрелка вниз dx = 0; dy = 1; break; } }); setInterval(() => { ctx.clearRect(0, 0, canvas.width, canvas.height); // Xóa màn hình drawSnake(); drawFood(); moveSnake(); }, 500); // Tốc độ làm mới (100ms)