原生JavaScript实现贪吃蛇的游戏

(新手向js项目)小白必看的原生js实现贪吃蛇游戏 前端入门,用原生js开发贪吃蛇小游戏 阅读详情
贪吃蛇游戏的思考步骤:
1.默认初始值(3个)默认向右走
2.封装函数move,去移动蛇
3.去监听键盘的事件,看用户的怎么移动蛇
4.去判断碰到墙就死亡,结束游戏
5.去完成投放食物的封装函数
6.去实现蛇的吃食物的函数

其实我们触发键盘事件,我们是这么处理的,这是一种比较简单的想法。

一个div是40px,当横着三个div数组,往右。数组0是蛇头,那么当移动时是最后一个div 的left和top值变,变成蛇头的left值变大40,top值不变,top值直接就是蛇头的top。


效果图:


源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>贪吃蛇游戏</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        .contain {
            /*box-sizing: border-box;*/
            width: 800px;
            height: 560px;
            background-color: #c3c4c3;
            border: 1px double black;
            position: relative;
            margin: 0 auto;
        }
        .contain div{
            box-sizing: border-box;
            width: 40px;
            height: 40px;
            border: 1px solid black;
            background-color: coral;
            top: 0;
            left: 0;
            position: absolute;
        }
        .contain div:nth-child(1){
            left:80px;
        }
        .contain div:nth-child(2){
            left:40px;
        }
    </style>
</head>
<body>
<div class="contain" id = "contain">
    <div></div>
    <div></div>
    <div></div>
</div>
<!--

1.默认初始值(3个)默认向右走
2.封装函数move,去移动蛇
3.去监听键盘的事件,看用户的怎么移动蛇
4.去判断碰到墙就死亡,结束游戏
5.去完成投放食物的封装函数
6.去实现蛇的吃食物的函数
-->
<script>
    var divs = document.querySelectorAll(".contain div");
    var contain = document.getElementsByClassName("contain");
    console.log(contain);
    var snakeBody = [divs[0],divs[1],divs[2]];
    //设置默认方向全局变量,默认为右边
    var direction = "right";
    var food;
    var speed=1;
    //第一次投放食物
    putFood();

    //调用move函数
    move();

    /*去让蛇动起来*/
    function move() {

        //每次移动要判断键盘事件到底往哪里走,去监听用户的键盘事件
        init();
        setTimeout(function step() {
            /*取出蛇身体的最后一个元素,然后把它插到蛇头位置,pop变量就是我要操作的蛇尾部位
            * 不应该放在setTimeout外面,这样,只有第一回会选中蛇的身体的最后一个
            * 而在后面就只剩一个在那里移动了。
            * 要在每次蛇移动后重新取得最新的蛇尾,也就是pop的元素
            * */
            var pop = snakeBody.pop();

            /*每次移动要判断是否蛇已经死掉了,撞墙,返回Boolean值
            * 每次的移动毒药去判断是不是已经死掉,不要放在setTimeout外面
            * */
            var num=isDead()
            if(num){
                /*var ui=snakeBody.shift();
                ui.style.left=ui.offsetLeft-120+"px";
                snakeBody.push(ui);*/
                // checkEnd(num);
                alert("游戏结束");
                return;
            }

            if(direction=="right"){
                pop.style.left = snakeBody[0].offsetLeft+40+"px";
                pop.style.top = snakeBody[0].offsetTop+"px";
            }else if(direction=="left"){
                pop.style.left = snakeBody[0].offsetLeft-40+"px";
                pop.style.top = snakeBody[0].offsetTop+"px";
            }else if(direction=="up"){
                pop.style.left = snakeBody[0].offsetLeft+"px";
                pop.style.top = snakeBody[0].offsetTop-40+"px";
            }else{
                pop.style.left = snakeBody[0].offsetLeft+"px";
                pop.style.top = snakeBody[0].offsetTop+40+"px";
            }
            snakeBody.unshift(pop);
            //每次移动好了判断吃到了食物没有
            eatFood();
            setTimeout(step,500/speed);
        },500)

    }


    /*对document监听用户的键盘事件*/
    function init() {


        document.onkeypress=function (e) {
            var code=e.keyCode;
            if(code==37){
                if(direction=="right") return;   //如果本来的方向是左边,那么现在再次按右箭头将失效
                direction="left";
            }else if(code==38){
                if(direction=="down") return;
                direction="up";
            }else if(code==39){
                if(direction=="left") return;
                direction="right";
            }else{
                if(direction=="up") return;
                direction="down";
            }
        }
    }

    /*判断蛇是否死掉了的函数
    * true 表示已经死掉  FALSE表示没死
    * */
    function isDead() {
        //用蛇头来判断是否撞墙,这里有bug没有解决:蛇头会出去
        var head = snakeBody[0];
         if(head.offsetTop<0 ||head.offsetLeft<0 || head.offsetTop>520 || head.offsetLeft>760) return true;
    }
    
    /*随机投放食物
    * 800/40=20   600/40==15  所以left应该设置为0-19 *40  与  0-14 *40
    * 生成div,把他插到蛇的数组的最后即可
    * */
    function putFood(){
        food = document.createElement('div');
        food.style.left = randomNum(0,19)*40 + 'px';
        food.style.top = randomNum(0,13)*40 + 'px';
        food.style.backgroundColor = "pink";
        //  这里传递的是一个类数组,要下标。
        contain[0].appendChild(food);
    }


    /*吃食物*/
    function eatFood() {
        var head = snakeBody[0];
        //当蛇头的左和上边距等于生成的div的左和上边距那么就表示吃到了
        if(head.offsetLeft==food.offsetLeft && head.offsetTop==food.offsetTop){
            snakeBody.push(food);
            food.style.backgroundColor="coral";
            putFood();  //吃完,重新投放食物
            speed += 0.5;
        }
    }
    /*生产随机数的函数*/
    function randomNum(n,m) {
        return parseInt(Math.random()*(m-n+1)+n);
    }

    /*检查撞墙后有一个div在外面的bug
    * 1表示撞到上面   2表示撞到左面  3表示撞到下面   4表示撞到右面
    * 这里的bug还是没有解决
    * */

</script>
</body>
</html>

原生JS 实现贪吃蛇 原生js 实现贪吃蛇。 立即下载

相关推荐

原生js贪吃蛇源码

一个用js做的小项目仅供参考,分享资源使我快乐带着不用谢。

前端学习笔记整理

前端学习笔记整理 CSS选择器汇总 基础选择器 属性选择器 伪类选择器和伪元素选择器

shea_mong 592

原生js网页版贪吃蛇游戏代码

原生js网页版贪吃蛇游戏代码,JavaScript小游戏仅仅供学习和交流!!

原生JS 实现小游戏 贪吃蛇

JS 超详细 贪吃蛇 案例 速速围观

m0_64191440的博客 3426

原生js贪吃蛇小游戏代码

原生js贪吃蛇小游戏代码

华为2022数字芯片笔试题

单选 1、ASIC开发流程中,如下环节的先后顺序是? A. RTL-> Synthesis->P&R B. Synthesis->P&R->RTL C. Synthesis->RTL->P&R D.RTL->P&R->Synthesis 2、o10换算成十进制是多少? A. 8 B.16 C.10 D.2 3、reg [7:0] mem [1:256];initial $readmemh("me..

weixin_44072819的博客 1万+

原生js贪吃蛇

原生js实现贪吃蛇小案例

m0_62371650的博客 314

解密GPT-5-Codex CLI安全最佳实践:从API Key保护到沙箱模式详解

本文深入解析GPT-5-Codex CLI在企业环境中的安全最佳实践,涵盖API Key全生命周期管理、沙箱模式配置及网络传输加固等核心防护策略。通过分层存储方案、动态环境变量加载和精细化权限设计,帮助开发团队构建企业级AI编程助手的安全防线,有效预防密钥泄露和未授权访问风险。

weixin_29309785的博客 588

【学习笔记64】原生JS实现贪吃蛇

原生JS实现贪吃蛇

yizhiyang 420

从零到一:如何用YOLOv8和PyQt5打造你的第一个花卉识别桌面应用

本文详细介绍了如何使用YOLOv8和PyQt5从零开始构建一个花卉识别桌面应用。涵盖环境搭建、数据准备、模型训练、界面设计、模型集成与性能优化等全流程,帮助开发者快速掌握深度学习目标识别技术的实际应用。

weixin_29048775的博客 455

模电学习笔记(十二)——跨阻放大器

模电学习笔记(十二) 跨阻放大器 跨组运算放大器是将电流信号转换成为电压信号,电流到电压增益基于反馈电阻。 设计目标: 输入 输出 带宽 电源 0A 100uA 0V 7V 20kHz 15V -15V 1.计算R1的值(增益电阻器) 2.计算C1的值满足电路带宽 ...

tang11081023的博客 2万+

原生js写贪吃蛇

贪吃蛇代码步骤: 1.创建蛇运动的地图:Map 2.创建蛇:以数组形式存放蛇的每一节。用for循环遍历蛇的每一节,来控制蛇的长度 3.写蛇运动:用for循环:让后一节走前一节的位置,按上下左右时,让蛇的运动方向改变,用键盘控制蛇运动的方向。 4.创建蛇的食物: 5.写当蛇与食物的坐标相等时,食物重新跑位置,蛇的长度加1(末尾加) 6.写蛇碰到边界,或者自己,游戏结束。 详细代码: &lt...

yezi__6的博客 376

《FPGA接口与协议》专栏的说明与导航

《FPGA接口与协议》专栏的说明与导航(建议阅读)。

孤独的单刀 17万+

eclipse javascript_原生js实现贪吃蛇游戏_javascript技巧

更新时间:2020年10月26日 11:46:36 作者:leisure-ZL 这篇文章主要为大家详细介绍了原生js实现贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下原生JavaScript实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下代码: <script> var timer = null; var oMain...

weixin_39960503的博客 721

吊打原版YOLOv8!ASF-YOLO多尺度融合+注意力机制实战解析(遥感/医疗/质检均适用)

ASF-YOLO融合YOLOv8的创新目标检测框架摘要 ASF-YOLO是针对小目标检测优化的先进框架,采用三重特征编码器和尺度序列融合技术增强多尺度特征提取能力。核心创新包括: 三重特征编码器(TPE)融合跨层级信息 尺度序列特征融合(SSFF)模块通过3D卷积处理多尺度信息 通道-位置注意力机制(CPAM)聚焦关键特征区域 Zoom_cat模块实现自适应多尺度特征融合 该框架特别适用于医学影像、遥感检测等小目标密集场景,通过动态特征权重调整显著提升检测精度。关键技术实现包含多尺度特征统一、3D卷积序列处

FJN110的博客 529

RK3399平台开发系列讲解(内核入门篇)1.2、如何高效的阅读Linux内核设备驱动

内核开发在很大程度上并不是重新造“轮子”的过程,而是深入理解并尽量复用现有的内核设计框架,然后参照相似的功能模块去添加或改写某项需要的功能。在对内核整体框架以及某些子系统融会贯通以后,我们才有可能站在巨人的肩膀上去改进框架本身,实现自主创新。如果过分强调不必要的“自主创新”,可能会让内核的可维护性变差,最终结果反而得不偿失。 那么此次就分享就围绕如何高效的阅读内核驱动代码:

内核笔记 7342

原生JS实现一个简单的贪吃蛇小游戏

js贪吃蛇 原生JS实现一个简单的贪吃蛇小游戏 利用javascript完成一个简单的贪吃蛇小游戏 相信在我们90后的童年中你们肯定在电视上或者在诺基亚手机上玩过一款叫贪吃蛇的小游戏,今天我就用js来完成一个简单的贪吃蛇小游戏。 首先在写代码之前我们得先知道贪吃蛇这个游戏运行的机制是什么: 贪吃蛇

Bob_Yan623的博客 5317

ThingsBoard集群部署之k8s

今天终于有时间去搞这个啦,拖了很久了,一直没时间,因为我本地没有那么多机器资源,开虚拟机不够,如果租用阿里云服务器,需要有充值的时间,因为这个费用是按小时付费,需要有连贯的时间来搞才行,今天恰好有时间,就开始搞了,弄成功搞出来了,特地写博客记录下来。

AldrichEugene 1176

原生JS贪吃蛇:从零实现经典游戏

本文介绍了使用原生JavaScript实现经典贪吃蛇游戏的核心思路和代码结构。游戏采用面向对象设计,分为地图、蛇和食物三个独立对象。地图对象创建游戏场景,蛇对象包含移动、吃食物和碰撞检测功能,食物对象实现随机位置生成。通过键盘控制方向,蛇会随移动增长身体长度,碰到边界游戏结束。代码展示了HTML主界面和三个JS文件的核心实现,包括游戏初始化、蛇身创建、移动逻辑和食物交互等关键功能。这种模块化设计使各组件相互独立,便于扩展功能如计分、加速和关卡设置等。

莫踌躇 6563

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

原生JavaScript实现简单贪吃蛇小游戏

本文介绍了一个基于HTML5 Canvas的贪吃蛇游戏实现。游戏包含以下核心功能: 基本游戏逻辑:蛇的移动、食物生成、碰撞检测和分数计算 三种可选皮肤(经典、蓝色、彩虹) 游戏控制功能:开始/暂停、速度随分数提升 键盘方向键控制移动,空格键暂停/继续 游戏采用JavaScript实现,使用Canvas绘制游戏画面,通过事件监听实现交互控制。随着游戏进行,蛇的速度会逐渐加快,增加游戏难度。游戏结束会显示最终得分并自动重置。 (99字)

YX_66的博客 341

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

原生js实现网页小游戏-贪吃蛇

根据在网上获取js项目–贪吃蛇游戏,按照自己的思路完善了一些功能,在代码中以“扩展”来标记 完善功能如下:代码结构如图 效果演示: 具体代码如下 html+css 食物类food.js 蛇类snake.js 游戏类game.js

Cookie_huang的博客 950

JavaScript原生实现贪吃蛇小游戏

用JavaScript原生实现了一个简单的贪吃蛇小游戏 小功能: 开始选择难度 可以开始暂停游戏 食物随机 不能撞自己和墙 死亡重新加载 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <m...

心凡易乱的博客 1175

原生js实现贪吃蛇小游戏(附源代码)

原生JavaScript实现 <script> var timer = null; var oMain = document.getElementById("main"); function Map(atom,xnum,ynum){//地图,设置单位大小,及根据单位大小创建地图 this.atom = atom; this.xnum = xnum; this.ynum = ynum; this.create = function(){

z18223345669的博客 799

原生JavaScript实现贪吃蛇小游戏

代码是参考李立超老师教程后自己敲的,自己只是想记录下自己写的注释及心得体会,侵权删,教程链接为https://www.bilibili.com/video/BV1mG411h7aD?p=174&vd_source=efd4241fdf9061e2f928f58914d04b92

Code6E的博客 309

js原生实现贪吃蛇小游戏

初学前端,设计的一个贪吃蛇小游戏

weixin_46972556的博客 95

利用原生js实现一个贪吃蛇小游戏

利用原生js实现一个贪吃蛇小游戏。

qq_43536982的博客 387
上一篇: 原生JavaScript实现小球按原轨迹进行返回的案例
下一篇: 实现恶意网站弹窗
风或许自媒体
博客等级 码龄12年 76粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值