当前位置: 首页 > news >正文

html+css+js贪吃蛇游戏

贪吃蛇游戏🕹四个按钮控制方向🎮

源代码在图片后面     点赞❤️关注🙏收藏⭐️

互粉必回🙏🙏😍😍😍

c4f905286c4d4f818c5c0277a93028b0.jpg

 源代码📟

<!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 {

        display: flex;

        justify-content: center;

        align-items: center;

        height: 100vh;

        background-color: #f5f5f5;

        margin: 0;

        font-family: Arial, sans-serif;

    }

    .game-container {

        width: 300px;

        text-align: center;

    }

    table {

        border-collapse: collapse;

        margin-top: 20px;

        border: 1px solid gray;

    }

    td {

        width: 10px;

        height: 10px;

        border: 1px solid gray;

    }

    .snake {

        background-color: green;

    }

    .food {

        background-color: red;

    }

    .control-buttons {

        display: flex;

        justify-content: space-around;

        margin-bottom: 10px;

    }

    button {

        width: 50px;

        height: 50px;

        border-radius: 10px;

        border: none;

        box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);

        cursor: pointer;

    }

    #score {

        font-size: 1.5em;

        margin-bottom: 10px;

    }

</style>

</head>

<body>

<div class="game-container">

    <div id="score">当前分数: 0</div>

    <div class="control-buttons">

        <button id="up-btn">&#9650;</button>

        <button id="right-btn">&#9654;</button>

        <button id="down-btn">&#9660;</button>

        <button id="left-btn">&#9664;</button>

    </div>

    <table id="game-board">

    </table>

</div>

 

<script>

    const board = document.getElementById('game-board');

    const scoreDisplay = document.getElementById('score');

 

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

    let food = {x: 15, y: 15};

    let direction = 'right';

    let score = 0;

 

    function drawBoard() {

        board.innerHTML = '';

        for (let i = 0; i < 20; i++) {

            let row = '<tr>';

            for (let j = 0; j < 20; j++) {

                if (snake.some(part => part.x === j && part.y === i)) {

                    row += '<td class="snake"></td>';

                } else if (food.x === j && food.y === i) {

                    row += '<td class="food"></td>';

                } else {

                    row += '<td></td>';

                }

            }

            row += '</tr>';

            board.innerHTML += row;

        }

    }

 

    function updateSnake() {

        const head = {x: snake[0].x + (direction === 'right' ? 1 : direction === 'left' ? -1 : 0),

                      y: snake[0].y + (direction === 'down' ? 1 : direction === 'up' ? -1 : 0)};

        snake.unshift(head);

        if (head.x === food.x && head.y === food.y) {

            score++;

            scoreDisplay.textContent = `当前分数: ${score}`;

            food = {x: Math.floor(Math.random() * 20), y: Math.floor(Math.random() * 20)};

        } else {

            snake.pop();

        }

    }

 

    function checkCollision() {

        const head = snake[0];

        if (head.x < 0 || head.x >= 20 || head.y < 0 || head.y >= 20 || snake.slice(1).some(part => part.x === head.x && part.y === head.y)) {

            alert('Game Over!');

            location.reload();

        }

    }

 

    function gameLoop() {

        updateSnake();

        checkCollision();

        drawBoard();

        setTimeout(gameLoop, 200);

    }

 

    document.getElementById('up-btn').addEventListener('click', () => direction = 'up');

    document.getElementById('right-btn').addEventListener('click', () => direction = 'right');

    document.getElementById('down-btn').addEventListener('click', () => direction = 'down');

    document.getElementById('left-btn').addEventListener('click', () => direction = 'left');

 

    gameLoop();

</script>

</body>

</html>

相关文章:

html+css+js贪吃蛇游戏

贪吃蛇游戏&#x1f579;四个按钮控制方向&#x1f3ae; 源代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f60d;&#x1f60d;&#x1f60d; 源代码&#x1f4df; <!DOCTYPE html> <html lang"en"&…...

新手必学:掌握Excel中这些常用公式,轻松提升数据处理能力

各位同学好&#xff0c;今天和大家来分享几个常用函数公式的典型用法。 1、提取指定条件的不重复名单 如下图所示&#xff0c;某公司课程比赛&#xff0c;同一员工有多个比赛项目。希望从左侧的列表中&#xff0c;提取出财务部的参赛人员名单。F2单元格输入以下公式&#xff0…...

经济寒冬:竞品凶猛,你的产品如何求生?

那些年曾被竞品干掉的产品 1997年到2010年左右是国内互联网行业的快速发展和多元化发展的时期&#xff0c;这一时期涌现出来一大批优秀的产品&#xff0c;市场竞争越来越激烈。苹果 在20 世纪 80 年代&#xff0c;乔布斯的苹果电脑&#xff0c;在当时可是PC行业的老大&#xf…...

信号量——Linux并发之魂

欢迎来到 破晓的历程的 博客 引言 今天&#xff0c;我们继续学习Linux线程本分&#xff0c;在Linux条件变量中&#xff0c;我们对条件变量的做了详细的说明&#xff0c;今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。 1.复习条件变量 在上一期博客中&…...

自动驾驶中的逆透视变换(Inverse Perspective Mapping,IPM)详解

前言 IPM(Inverse Perspective Mapping,逆透视变换)图的历史可以追溯到计算机视觉和图像处理领域的发展。逆透视变换是一种用于消除图像中透视效应的技术,使得原本由于透视产生的形变得以纠正,进而更准确地描述和理解图像中的场景。比如在行车中的车道线检测,泊车中的常见…...

Python地震波逆问题解构算法复杂信号分析

&#x1f3af;要点 &#x1f3af;时域、时频域以及时间和频率相关联偏振特性分析三种算法 | &#x1f3af;时域波参数估计算法 | &#x1f3af;机器学习模型波形指纹分析算法 | &#x1f3af;色散曲线和频率相关波分析算法 | &#x1f3af;动态倾斜校正算法 | &#x1f3af;声…...

C语言 -- 深入理解指针(二)

C语言 -- 深入理解指针&#xff08;二&#xff09; 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组8. 字符指针变量9. 数组指针变量2.1数组指针变量是什么&#xff1f;2.2 数组指针变量怎么初始化 10. 二维…...

HTTP协议详解

HTTP协议详解 一、HTTP协议概述二、网络基础与HTTP2.1 TCP/IP协议2.2 发送HTTP请求过程2.3 HTTP请求的组成部分 三、HTTP报文HTTP请求报文HTTP响应报文 结语 一、HTTP协议概述 HTTP&#xff0c;即超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff09;&#xff…...

一年时间业绩增长2倍,茅台保健酒业公司在川销售的“三板斧”

执笔 | 尼 奥 编辑 | 扬 灵 作为土地面积全国第5、人口总数全国第3、GDP全国第6的产酒、销酒大省&#xff0c;四川酒类消费总额已达800亿元&#xff0c;其中白酒市场规模达到500亿元。 近年来&#xff0c;随着省外名酒提升对四川市场重视&#xff0c;其市场份额也从20年前的3%…...

土豆炒肉做法

菜单&#xff1a;土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程&#xff1a; 洗土豆&#xff0c;削皮&#xff0c;擦成条&#xff0c;用凉水过滤两遍淀粉&#xff0c;顺便放个燥里洗肉&#xff0c;切成条&#xff0c;按照生抽、酱油、淀粉、…...

VPS拨号服务器:独享的高效与安全

在当今互联网高速发展的时代&#xff0c;虚拟私人服务器&#xff08;VPS&#xff09;已成为许多企业和个人用户托管网站、应用程序的首选。特别是带有拨号功能的VPS服务器&#xff0c;以其独特的优势受到广泛关注。本文将深入探讨VPS拨号服务器的独享特性&#xff0c;以及它如何…...

网络安全设备——防火墙

网络安全设备防火墙是一种用来加强网络之间访问控制的特殊网络互联设备。以下是对防火墙的详细解释&#xff1a; 一、定义与基本概念 定义&#xff1a;防火墙是指设置在不同网络&#xff08;如可信任的企业内部网和不可信的公共网&#xff09;或网络安全域之间的一系列部件的…...

Redis 管道技术

Redis 管道技术 引言 Redis,作为一个高性能的键值存储系统,被广泛应用于各种场景,如缓存、消息队列等。为了进一步提高Redis的处理能力和效率,Redis管道技术应运而生。本文将深入探讨Redis管道技术的原理、应用及其优势。 什么是Redis管道技术 Redis管道技术是一种允许…...

使用vue3-treeselect问题

1.当vue3-treeselect是单选时&#xff0c;使用watch监听绑定value&#xff0c;无法监听到值清空 对照后将:value改为v-model&#xff0c;如图 2.使用vue3-treeselect全部清空按钮如何置空select的值&#xff0c;使用watch监听 多选&#xff1a;pageInfo.officeName(val) {// …...

每日直播分享车载知识:硬件在环、UDS诊断、OTA升级、TBOX测试、CANoe、ECU刷写、CAN一致性测试:物理层、数据链路层等

每日直播时间&#xff1a;&#xff08;进腾讯会议方式&#xff1a;QazWsxEdc_2010&#xff09; 周一到周五&#xff1a;20&#xff1a;00-23&#xff1a;00&#xff08;讲一个小时&#xff0c;实操两个小时&#xff09; 周六与周日&#xff1a;9&#xff1a;00-17&#xff1a;0…...

flex布局---子元素未设置高度,默认与父元素同高---侧轴方向的拉伸

父元素未设置固定高度&#xff0c;由子元素高度撑开&#xff0c;并给父元素开启 flex 布局&#xff0c;成为伸缩容器。 父元素中有三个子元素&#xff0c;为伸缩项目&#xff0c;三个伸缩项目都未指定高度&#xff0c;div.inner1 的高度由内容撑开&#xff0c;div.inner2 和 d…...

资源分享—2021版三调符号库

汇总整理平台软件支持过程中客户项目提供的各类资源&#xff08;包括但不限于符号库、地图模板等&#xff09;&#xff0c;在客户允许情况下进行集团内分享。 本次分享新版国土空间规划【三调符号库&#xff08;2021版&#xff09;】&#xff0c;提供SuperMap格式符号库下载。 …...

解决selenium手动下载驱动问题

解决selenium手动下载驱动问题 每次都需要手动下载驱动很头疼&#xff0c;今天发现一个可以自动下载最新驱动的包webdriver_manager&#xff0c;挺不错的 安装依赖包 pip install selenium pip install webdriver_manager from selenium import webdriver from selenium.webdr…...

使用fifo IP核,给fifo写数据,当检测到ALMOST_EMPTY时,为什么不能立即赋值

这涉及到FIFO&#xff08;先入先出缓冲器&#xff09;的内部工作机制和时序考虑。让我详细解释为什么在检测到ALMOST_EMPTY信号时不能立即向FIFO写入数据。 ALMOST_EMPTY信号的特性&#xff1a; ALMOST_EMPTY是一个预警信号&#xff0c;表示FIFO中的数据量已经接近空。这个信号…...

【Python123题库】#汽车迷 #编写函数输出自除数 #身份证号基本信息

禁止转载&#xff0c;原文&#xff1a;https://blog.csdn.net/qq_45801887/article/details/140080109 参考教程&#xff1a;B站视频讲解——https://space.bilibili.com/3546616042621301 有帮助麻烦点个赞 ~ ~ Python123题库 汽车迷编写函数输出自除数身份证号基本信息 汽车…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...