首页 > 其他分享 >使用canvas实现一个贪吃蛇小游戏

使用canvas实现一个贪吃蛇小游戏

时间:2024-12-22 09:55:27浏览次数:7  
标签:canvas food direction boxSize break 小游戏 snake 贪吃蛇

创建一个贪吃蛇游戏涉及到很多步骤,以下是一个简化版的贪吃蛇游戏实现方案,使用HTML5的<canvas>元素。

HTML

首先,在HTML中创建一个<canvas>元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>贪吃蛇游戏</title>
    <style>
        canvas {
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <canvas id="gameCanvas" width="400" height="400"></canvas>
    <script src="snake.js"></script>
</body>
</html>

JavaScript (snake.js)

然后,在snake.js中实现游戏逻辑。

const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
const boxSize = 20;
let snake = [{ x: 10, y: 10 }];
let food = { x: 5, y: 5 };
let direction = 'right';
let changingDirection = false;

document.addEventListener('keydown', changeDirection);

function changeDirection(event) {
    if (changingDirection) return;
    changingDirection = true;
    switch (event.key) {
        case 'ArrowUp':
            if (direction !== 'down') direction = 'up';
            break;
        case 'ArrowDown':
            if (direction !== 'up') direction = 'down';
            break;
        case 'ArrowLeft':
            if (direction !== 'right') direction = 'left';
            break;
        case 'ArrowRight':
            if (direction !== 'left') direction = 'right';
            break;
    }
    setTimeout(() => changingDirection = false, 100);
}

function placeFood() {
    food.x = Math.floor(Math.random() * canvas.width / boxSize);
    food.y = Math.floor(Math.random() * canvas.height / boxSize);
    for (let cell of snake) {
        if (food.x === cell.x && food.y === cell.y) placeFood();
    }
}

function moveSnake() {
    const head = { ...snake[0] };
    switch (direction) {
        case 'up':
            head.y--;
            break;
        case 'down':
            head.y++;
            break;
        case 'left':
            head.x--;
            break;
        case 'right':
            head.x++;
            break;
    }
    snake.unshift(head);
    if (snake[0].x === food.x && snake[0].y === food.y) {
        placeFood();
    } else {
        snake.pop();
    }
}

function drawGame() {
    ctx.fillStyle = 'white';
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = 'green';
    for (let cell of snake) {
        ctx.fillRect(cell.x * boxSize, cell.y * boxSize, boxSize, boxSize);
    }
    ctx.fillStyle = 'red';
    ctx.fillRect(food.x * boxSize, food.y * boxSize, boxSize, boxSize);
}

function updateGame() {
    moveSnake();
    drawGame();
}

function gameLoop() {
    updateGame();
    requestAnimationFrame(gameLoop);
}

placeFood();
gameLoop();

这段代码实现了一个简单的贪吃蛇游戏,包括蛇的移动、食物的生成和游戏画面的绘制。你可以通过箭头键来控制蛇的移动方向。当蛇吃到食物时,食物会重新生成在一个随机的位置,并且蛇的长度会增加。如果蛇没有吃到食物,它的尾部会缩短,保持蛇的总长度不变。

标签:canvas,food,direction,boxSize,break,小游戏,snake,贪吃蛇
From: https://www.cnblogs.com/ai888/p/18621812

相关文章

  • 使用canvas画一个灰太狼的图案
    在前端开发中,使用<canvas>元素来绘制一个灰太狼的图案是一个相对复杂的过程,因为它涉及到细致的绘图技巧和可能的动画效果。下面是一个简化的步骤指南,以及一个基本的示例代码,用于在<canvas>上绘制一个类似灰太狼的简单图案。步骤指南设置Canvas:在HTML中添加一个<canvas>元素,并......
  • 使用canvas画一个喜洋洋的图案
    在前端开发中,使用HTML5的<canvas>元素来绘制一个复杂的图案如“喜洋洋”可能是一项具有挑战性的任务,因为它需要一些绘图技能和耐心。由于“喜洋洋”是一个具体的卡通形象,我无法直接为你提供一个精确的绘图脚本,但我可以给你一个基本的框架和指导,帮助你开始这个任务。首先,你需要在H......
  • 使用canvas画一个github的LOGO图案
    使用HTML5<canvas>元素来绘制GitHub的LOGO需要一些细致的工作,因为GitHub的LOGO并不是一个简单的几何图形。但是,为了简化,我们可以尝试绘制一个简化的版本,比如一个类似于GitHubLOGO的八边形图案。以下是一个简化的示例,展示如何使用<canvas>来绘制一个类似GitHubL......
  • 使用canvas画一个军棋的棋盘
    要在前端使用canvas元素画一个军棋的棋盘,你可以遵循以下步骤:HTML结构:首先,在HTML中添加一个canvas元素。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initi......
  • 使用canvas制作一个圆形进度条
    制作一个圆形进度条使用HTML5的<canvas>元素是一个很好的选择。以下是一个简单的示例,展示了如何使用<canvas>来创建一个圆形进度条:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width......
  • 使用Canvas制作一个火焰跟随鼠标的动画
    创建一个火焰跟随鼠标的动画涉及到多个步骤,包括创建canvas元素,监听鼠标事件,以及在canvas上绘制火焰。以下是一个基本的实现方式:首先,在HTML中添加一个canvas元素:<!DOCTYPEhtml><html><head><title>火焰跟随鼠标动画</title><style>body{margin:0;}......
  • 使用Canvas画出头发飘逸的动画
    创建一个头发飘逸的动画需要一定的设计能力和动画技巧。下面我会给出一个简单的步骤来在HTML5的<canvas>元素上创建一个飘逸的头发的动画。步骤1:设置HTML和Canvas首先,你需要在HTML中创建一个<canvas>元素。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-......
  • Java实现贪吃蛇游戏
    目录一、项目结构二、实现步骤1.创建Snake类2.创建Food类3.创建GameBoard类4.创建SnakeGame类三、总结贪吃蛇是一个经典的电子游戏,它的玩法非常简单,但又充满了挑战。玩家通过控制蛇的移动,吃到食物并不断成长,目标是尽可能长时间生存。本文将介绍如何使用J......
  • 40.在 Vue3 中使用 OpenLayers 实现 canvas 遮罩效果
    一、引言在Vue3前端开发与地图应用结合的场景中,OpenLayers作为强大的地图库,为我们带来了丰富多样的功能拓展可能性。今天,我们将深入探讨如何利用OpenLayers在Vue3项目里巧妙地实现canvas遮罩效果,这一技巧能够为地图应用增添独特的交互体验与视觉呈现,无论是突出特定区......
  • 前端 PDF 生成和分页的最佳实践:利用 `jspdf` 和 `html2canvas` 从基础到高级技巧
    前端PDF生成和分页的最佳实践:利用jspdf和html2canvas从基础到高级技巧标签:PDF生成、分页处理、前端开发、jspdf、html2canvas引言在实际开发中,很多场景都会涉及PDF的生成,比如合同生成、内容导出等等。我遇到的一个实际问题是,在项目中需要将合同内容生成PDF,合......