贪吃蛇小游戏(html、javascript)

用html写一个贪吃蛇游戏 <!DOCTYPE html> <html> <head> <title>贪吃蛇</title> <meta charset="UTF-8"> <meta name="keywords" content="贪吃蛇"> <meta name="Description" content="这是一个初学者用来学习的小游戏"> <style type="text/css"> *{margin:0 阅读详情

显示效果:

在这里插入图片描述

代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>贪吃蛇游戏</title>
<style>
    body {
        margin: 0;
        padding: 0;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        background-color: #f0f0f0;
        position: relative;
    }

    canvas {
        border: 1px solid #000;
    }

    button {
        padding: 10px 20px;
        font-size: 18px;
        border: none;
        border-radius: 5px;
        background-color: #007bff;
        color: #fff;
        cursor: pointer;
        position: absolute;
        top: calc(50% + 40px);
        left: calc(50% - 60px);
    }
</style>
</head>
<body>
<canvas id="gameCanvas" width="400" height="400"></canvas>
<button id="startBtn">Start Game</button>
<script>
window.onload = function () {
    var canvas = document.getElementById("gameCanvas");
    var context = canvas.getContext("2d");

    var blockSize = 20;
    var widthInBlocks = canvas.width / blockSize;
    var heightInBlocks = canvas.height / blockSize;

    var score = 0;

    var snake = [];
    snake[0] = {
        x: Math.floor(widthInBlocks / 2),
        y: Math.floor(heightInBlocks / 2)
    };

    var apple = {
        x: Math.floor(Math.random() * widthInBlocks),
        y: Math.floor(Math.random() * heightInBlocks)
    };

    // 确保蛇和苹果的初始位置不同
    while (apple.x === snake[0].x && apple.y === snake[0].y) {
        apple = {
            x: Math.floor(Math.random() * widthInBlocks),
            y: Math.floor(Math.random() * heightInBlocks)
        };
    }

    var dx = 1; // 初始方向向右
    var dy = 0;

    function drawBlock(context, position, color) {
        var x = position.x * blockSize;
        var y = position.y * blockSize;
        context.fillStyle = color;
        context.fillRect(x, y, blockSize, blockSize);
    }

    function drawSnake() {
        for (var i = 0; i < snake.length; i++) {
            var color = (i === 0) ? "#00F" : "#00C";
            drawBlock(context, snake[i], color);
        }
    }

    function drawApple() {
        drawBlock(context, apple, "#F00");
    }

    function checkCollision(position, array) {
        return array.some(function (element) {
            return position.x === element.x && position.y === element.y;
        });
    }

    function gameOver() {
        clearInterval(intervalId);
        context.fillStyle = "#000";
        context.font = "30px Arial";
        context.fillText("Game Over!", canvas.width / 2 - 90, canvas.height / 2);
        startBtn.style.display = "block"; // 游戏结束后显示开始按钮
    }

    function drawScore() {
        context.fillStyle = "#000";
        context.font = "20px Arial";
        context.fillText("score: " + score, 5, 25);
    }

    function update() {
        context.clearRect(0, 0, canvas.width, canvas.height);

        drawSnake();
        drawApple();
        drawScore();

        var snakeX = snake[0].x;
        var snakeY = snake[0].y;

        snakeX += dx;
        snakeY += dy;

        // 检查蛇头是否与边界或蛇身相撞
        if (snakeX < 0 || snakeX >= widthInBlocks || snakeY < 0 || snakeY >= heightInBlocks || checkCollision({x: snakeX, y: snakeY}, snake)) {
            gameOver();
            return;
        }

        var newHead = {
            x: snakeX,
            y: snakeY
        };

        snake.unshift(newHead);

        // 如果蛇头与苹果重合,则得分加1,并重新生成苹果
        if (snakeX === apple.x && snakeY === apple.y) {
            score++;
            apple = {
                x: Math.floor(Math.random() * widthInBlocks),
                y: Math.floor(Math.random() * heightInBlocks)
            };
        } else {
            // 否则蛇尾移除
            snake.pop();
        }
    }

    document.addEventListener("keydown", function (e) {
    if (e.keyCode === 37 && dx === 0) {
        dx = -1; // 左
        dy = 0;
    } else if (e.keyCode === 38 && dy === 0) {
        dx = 0;
        dy = -1; // 上
    } else if (e.keyCode === 39 && dx === 0) {
        dx = 1; // 右
        dy = 0;
    } else if (e.keyCode === 40 && dy === 0) {
        dx = 0;
        dy = 1; // 下
    }
});

    var intervalId; // 游戏循环间隔ID

    startBtn.addEventListener("click", function() {
        // 点击开始按钮后隐藏按钮,并开始游戏循环
        this.style.display = "none";
        // 重置游戏状态
        score = 0;
        snake = [{ x: Math.floor(widthInBlocks / 2), y: Math.floor(heightInBlocks / 2) }];
        dx = 1;
        dy = 0;
        intervalId = setInterval(update, 150); // 调整蛇的移动速度
    });
};
</script>
</body>
</html>

html+css+js趣味小游戏~贪吃蛇(附源码) 这段代码展示了一个简单的贪吃蛇游戏的实现,使用了HTML、CSS和JavaScript。HTML部分定义了游戏的基本结构,包括标题、分数显示和游戏画布。CSS用于设置页面的布局和样式,使游戏界面居中并具有统一的字体。JavaScript部分负责游戏逻辑,包括蛇的移动、食物的生成、游戏循环和分数更新。游戏通过setInterval函数控制蛇的移动速度,并通过canvas元素绘制游戏画面。此外,代码还提供了游戏扩展的建议,如增加难度、添加计时功能、音效和动画效果等,以增强游戏体验。这个游戏适合所有年龄段,能够锻 阅读详情

相关推荐

html5 canvas+js贪吃蛇网页小游戏代码

html5 canvas+js贪吃蛇网页小游戏代码 注解都在代码里了,自己理解吧 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" conte.

wjh091225的博客 8828

【贪吃蛇小游戏】 HTML (Canvas)+ JavaScript

【贪吃蛇小游戏】主要运用HTML5中的Canvas(画布)实现游戏界面,运用JavaScript编写小游戏的主要逻辑。HTML5中的元素被用来通过 JavaScript(Canvas API 或 WebGL API)绘制图形及游戏界面。简易版的贪吃蛇小游戏可以实现上下左右控制贪吃蛇的移动方向。

小江的记录本 8831

(完整源码)H5贪吃蛇小游戏——HTML+CSS+JavaScript实现

最近因为帮助大一的学妹做网页,又接触了一下前端方面的知识。(学妹已经成了女朋友!!!,嘻嘻)感谢自己当年认真学习,大三了好多东西还能拾起来,哈哈。我翻出了我当年写的代码,还真不少呢。今天复习复习,看一看那时候写的一个贪吃蛇的代码。当时用了一整天,跟着今日头条上推送给我的一个视频一点一点手敲的…… 两年半了,我记得这么清楚,是因为写这个太痛苦了,记忆犹新啊!!!大一手敲着不知道为什么的代码,一遍一遍...

bingocoder的博客 7万+

使用HTML实现贪吃蛇游戏

上述代码实现了一个基本的贪吃蛇游戏,包括蛇的移动、食物的生成、碰撞检测和游戏循环。你可以通过方向键来控制蛇的移动。游戏会在蛇撞到墙壁或自身时结束,并提示“游戏结束”。

Do my best! 2880

JS贪吃蛇小游戏(DOM (html+css+js))

JS贪吃蛇小游戏

路漫漫其修远兮,吾将上下而求索。 5645

【Web前端】html+js实现贪吃蛇前端小游戏

贪吃蛇游戏

Get your hands dirty 1418

html版贪吃蛇,支持闯关。

运行图就不放了,包能运行的。

qq_63356870的博客 619

基于HTML+CSS+JavaScript的Web贪吃蛇小游戏实战项目

就这么一行代码,就为我们开辟了一块 400×400 像素的绘图战场。但别小看它,这个<canvas>元素可不是普通的 DOM 标签,它是通往像素世界的门户🚪。为什么必须写width和height属性而不是靠 CSS 设置呢?因为 Canvas 的绘图表面大小由其内部坐标系决定。如果只用 CSS 缩放,默认的 300×150 画布会被拉伸,导致图像模糊失真 😵‍💫。✅ 正确做法:HTML 属性设分辨率,CSS 负责布局适配。设置方式是否推荐原因HTML。

weixin_42612804的博客 709

用HTML.CSS.JavaScript实现一个贪吃蛇小游戏

贪吃蛇是一款经典的小游戏,曾经风靡一时。今天,我们将使用 HTML、CSS 和 JavaScript 来实现一个简单的贪吃蛇小游戏。通过这个项目,可以了解到如何使用 HTML5 的画布元素()来绘制图形,以及如何使用 JavaScript 来处理游戏逻辑。我们首先创建一个基本的 HTML 结构,包含一个 元素用于绘制游戏画面,以及一些必要的 和 标签。使用 CSS 对 元素进行简单的样式设置,使其具有边框,并居中显示。上述代码中,我们使用了 HTML5 的 元素来绘制游戏画面,通过 JavaScr

2301_80052073的博客 3435

AGM Supra软件从零到一:国产CPLD工程创建全流程拆解

本文详细拆解了AGM Supra软件从零开始创建国产CPLD工程的全流程,包括开发环境配置、工程创建、Quartus项目转换、TCL脚本执行与编译等关键步骤。特别强调了中文路径避坑、器件型号选择等实用技巧,帮助开发者高效完成CPLD开发任务。

weixin_29158413的博客 410

国产FPGA逆袭!深度评测复旦微RFVU3P5G核心板在相控阵雷达中的表现

本文深度评测了复旦微RFVU3P5G核心板在相控阵雷达中的实战表现。该核心板凭借射频直采架构、高采样率ADC/DAC及丰富的DSP资源,在多通道同步精度、动态范围及系统稳定性等关键指标上表现出色,展现了国产FPGA在高端雷达应用中的硬核实力与供应链自主价值。

b0c1d2的博客 724

好玩的小游戏系列 (一)基于html+js 原生贪吃蛇

好玩的小游戏系列 (一)基于html+js 原生贪吃蛇 一款简单的 HTML+JS 原生贪吃蛇小游戏

好好读书 2万+

OpenFOAM算例文件结构深度解析:以cavity案例为例教你读懂每个文件夹的作用

本文以OpenFOAM经典cavity案例为例,深度解析CFD算例文件结构。详细阐述了0、constant、system三个核心目录的作用:0存放初始与边界条件,constant定义物理属性和网格,system控制求解策略。通过剖析关键文件,帮助用户理解每个参数的意义,掌握从读懂到定制算例的能力,为高效使用这一开源CFD工具奠定坚实基础。

beer8的博客 238

HTML+js实现贪吃蛇小游戏(内含完整代码)

案例分析 看图拆解游戏 首先我们根据图片上的内容把这个游戏拆解成几个部分去单独看: 最外面的大盒子包裹着内容加边框限制蛇的活动范围,整个范围可以看成由许多小方格排列构成的,例如这样子的:; 两个按钮,一个控制开始游戏,一个控制游戏中途的暂停继续功能; 盒子里面有可以移动的蛇,最开始状态的蛇分为蛇头、蛇身、蛇尾三个部分,蛇只能走直线,通过上下左右的功能键去控制蛇的走向; 还有一个随机产生在限制区域内的食物; 这个游戏是当点击开始游戏按钮才显示蛇和食物的,所以最开始我们不在结构里面书写,后面通过js构造函

m0_67402564的博客 2269

跟着团子学SAP CO:结果分析各评估方法计算逻辑概览 RA Valuation Method Overview KKA1/KKA2/KKA3

在大部分企业财务月结时,结果分析是必不可少的一环,通过结果分析系统可按照设定的评估方法及相关配置自动计算在制品(WIP)、主营业务成本、主营业务收入等等。 在结果分析中最重要的是根据业务需求选择合适的评估方法,目前SAP共提供15种评估方法,今天针对每一种方法计算逻辑及常用的业务场景进行介绍: (1)基于收入的评估方式(带利润实现) Revenue-Based Method with Profit Realization 第一种方式的计算是基于实际收入与计划收入的占比推算应结转的主营业务成本,如果当期累计的

Lucas1211的博客 1万+

030、微透镜阵列与光场成像:从光场相机到深度感知的演进

文章摘要: 光场成像通过微透镜阵列(MLA)同时记录光线的位置与方向,实现单次曝光获取三维信息。其核心架构包括主镜头+MLA+传感器或相机阵列,各有分辨率与体积的权衡。光场支持先拍照后对焦和深度估计,但受限于微透镜基线短,精度较低。深度算法需结合多视角立体匹配与极平面图像分析,并处理噪声和温度漂移等实际问题。光场适用于短距离动态场景(如手势识别),而远距离高精度需求仍需激光雷达。建议初学者通过二手光场相机和开源工具入门,理解光场“角度域”与“空间域”的协同机制。

sundong_81的博客 50

儿童节小游戏——HTML+JS实现贪吃蛇

儿童节小游戏——HTML+JS实现贪吃蛇

不迁怒,不贰过。小知识,大智慧。 2172

【Python图像处理局部放大】输入图像,选择两处不同的区域进行放大操作,然后将原始图像、处理后的两个区域以及标记合成新图像进行展示

Python图像处理与区域放大连接标记:选择特定区域并对其进行放大操作,然后将原始图像、处理后的两个区域进行标记后的新图像保存到文件中。

qq_35831906的博客 2243

贪吃蛇小游戏得分html,JS实现贪吃蛇游戏

本文实例为大家分享了JS实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下html部分:贪吃蛇小游戏css部分:.content{width: 640px;height: 640px;margin: 50px auto;position: relative;}.btn{width: 100%;height: 100%;position: absolute;left: 0;top: 0;backgr...

weixin_42131790的博客 984

GeoScene Pro教程(002):GeoScenePro基础操作

GeoScenePro基础操作介绍。

WwLK123的博客 2461

基于STM32的六足机器人控制系统设计(项目资料ID:27)

六足机器人控制系统综合分析其结构、步态与控制算法,融合云端服务、Wi-Fi、蓝牙、语音识别及手势识别等多种技术,设计了多元化控制模式,并针对不同应用场景提出了差异化的构建方案。系统硬件采用分层设计,分为主控板与舵机控制板:主控板以 STM32F103VET6 为核心,负责各类控制模式的数据处理与状态显示;舵机控制板采用 STM32F103R8T6,专注于舵机角度的精确控制,两板通过串口实现数据交互。

以培养嵌入式工程师为己任 1万+

JS、HTML5实现贪吃蛇小游戏

贪吃蛇小游戏完整代码 import { Component, OnInit } from '@angular/core'; import { EventManager } from'@angular/platform-browser' @Component({ selector: 'app-little-game', templateUrl: './little-game.component...

鸭绒的博客 915

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

用html+CSS+js做一个贪吃蛇小游戏

在本教程中,我们将逐步构建一个简单的贪吃蛇游戏。这个项目适合初学者,可以帮助你理解HTML、CSS和JavaScript的基础知识,并掌握如何将它们结合起来创建一个完整的游戏。游戏结束提示:当我们检测到蛇头与蛇身任何部分发生碰撞时,我们调用 endGame 函数。这个函数会清除游戏循环,通过 alert 消息弹窗显示出一个游戏结束的提示,并且将游戏重置。游戏重置会清空蛇的数组并将它的起始位置设置为初始位置。移动速度控制:变量 speed 被用来控制蛇移动的速度。

GuoWes代码的博客 1383

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

基于HTML5,JS,CSS技术的贪吃蛇小游戏的设计与实现

童年小游戏贪吃蛇html代码实现,适合前端课后作业的提交和参考

2402_83259558的博客 1067

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

html+css+js小练习2-贪吃蛇

html+css+js小练习2-贪吃蛇 效果如下: 1.index.html代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <title>html5实现贪吃蛇小游戏</title> <style> *{ m...

qq_43327962的博客 283

用 Deepseek: HTML + JavaScript 实现经典贪吃蛇小游戏:从零开始,轻松上手!

贪吃蛇是一款简单易懂的休闲游戏,玩家通过控制蛇的移动方向,使其吃到随机出现的食物。每吃到一个食物,蛇的身体就会变长一节,同时游戏得分也会增加。如果蛇撞到墙壁或自己的身体,游戏就会结束。通过这个简单的贪吃蛇小游戏,我们学习了如何使用 HTML 和 JavaScript 实现基本的游戏逻辑和图形绘制。希望这个教程能够帮助你入门游戏开发,并激发你的编程兴趣!欢迎在评论区分享你的游戏体验和改进建议!

weixin_42581036的博客 1115
上一篇: 使用JavaScript库(qrcode)生成二维码
下一篇: python-随机森林后筛选最重要变量,模型准确率、随机森林混淆矩阵结果、基尼系数排序图
霜!!
博客等级 码龄7年 188粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霜!!

不错,👆赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值