JS-贪吃蛇小游戏

JavaScript实现贪吃蛇小游戏 JavaScript实现贪吃蛇小游戏 功能概述 本程序实现了如下功能: 贪吃蛇的基本功能 统计得分 开始与暂停 选择难度等级 设置快捷键 5.1 通过ijkl,wsad也能实现方向的切换 5.2 通过“P” 表示暂停,“C”表示开始或继续,"R"表示重新开始 实现过程 最开始的实现原理其实是参考的csdn的一位大神,他用JavaScript20行就实现了贪吃蛇的基本功能,难等可贵的是还没有bug,链接在此 要实现贪吃蛇大概有以下几个步骤: 画一个蛇的移动区域 画一条蛇 画食物 让蛇 阅读详情

没错啦!这就是大家小时候经常玩的贪吃蛇游戏。代码如下:



<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>JS贪吃蛇-练习</title>
    <style type="text/css">
        #pannel table {
            border-collapse: collapse;
        }
        #pannel table td {
            border: 1px solid #808080;
            width: 10px;
            height: 10px;
            font-size: 0;
            line-height: 0;
            overflow: hidden;
        }
        #pannel table .snake {
            background-color: green;
        }
        #pannel table .food {
            background-color: blue;
        }
    </style>
    <script type="text/javascript">
        var Direction = new function () {
            this.UP = 38;
            this.RIGHT = 39;
            this.DOWN = 40;
            this.LEFT = 37;
        };
        var Common = new function () {
            this.width = 20; /*水平方向方格数*/
            this.height = 20; /*垂直方向方格数*/
            this.speed = 250; /*速度 值越小越快*/
            this.workThread = null;
        };
        var Main = new function () {
            var control = new Control();
            window.onload = function () {
                control.Init("pannel");
                /*开始按钮*/
                document.getElementById("btnStart").onclick = function () {
                    control.Start();
                    this.disabled = true;
                    document.getElementById("selSpeed").disabled = true;
                    document.getElementById("selSize").disabled = true;
                };
                /*调速度按钮*/
                document.getElementById("selSpeed").onchange = function () {
                    Common.speed = this.value;
                }
                /*调大小按钮*/
                document.getElementById("selSize").onchange = function () {
                    Common.width = this.value;
                    Common.height = this.value;
                    control.Init("pannel");
                }
            };
        };
        /*控制器*/
        function Control() {
            this.snake = new Snake();
            this.food = new Food();
            /*初始化函数,创建表格*/
            this.Init = function (pid) {
                var html = [];
                html.push("<table>");
                for (var y = 0; y < Common.height; y++) {
                    html.push("<tr>");
                    for (var x = 0; x < Common.width; x++) {
                        html.push('<td id="box_' + x + "_" + y + '"> </td>');
                    }
                    html.push("</tr>");
                }
                html.push("</table>");
                this.pannel = document.getElementById(pid);
                this.pannel.innerHTML = html.join("");
            };
            /*开始游戏 - 监听键盘、创建食物、刷新界面线程*/
            this.Start = function () {
                var me = this;
                this.MoveSnake = function (ev) {
                    var evt = window.event || ev;
                    me.snake.SetDir(evt.keyCode);
                };
                try {
                    document.attachEvent("onkeydown", this.MoveSnake);
                } catch (e) {
                    document.addEventListener("keydown", this.MoveSnake, false);
                }
                this.food.Create();
                Common.workThread = setInterval(function () {
                    me.snake.Eat(me.food); me.snake.Move();
                }, Common.speed);
            };
        }
        /*蛇*/
        function Snake() {
            this.isDone = false;
            this.dir = Direction.RIGHT;
            this.pos = new Array(new Position());
            /*移动 - 擦除尾部,向前移动,判断游戏结束(咬到自己或者移出边界)*/
            this.Move = function () {
                document.getElementById("box_" + this.pos[0].X + "_" + this.pos[0].Y).className = "";
//所有 向前移动一步 
                for (var i = 0; i < this.pos.length - 1; i++) {
                    this.pos[i].X = this.pos[i + 1].X;
                    this.pos[i].Y = this.pos[i + 1].Y;
                }
//重新设置头的位置 
                var head = this.pos[this.pos.length - 1];
                switch (this.dir) {
                    case Direction.UP:
                        head.Y--;
                        break;
                    case Direction.RIGHT:
                        head.X++;
                        break;
                    case Direction.DOWN:
                        head.Y++;
                        break;
                    case Direction.LEFT:
                        head.X--;
                        break;
                }
                this.pos[this.pos.length - 1] = head;
//遍历画蛇,同时判断游戏结束 
                for (var i = 0; i < this.pos.length; i++) {
                    var isExits = false;
                    for (var j = i + 1; j < this.pos.length; j++)
                        if (this.pos[j].X == this.pos[i].X && this.pos[j].Y == this.pos[i].Y) {
                            isExits = true;
                            break;
                        }
                    if (isExits) { this.Over();/*咬自己*/ break; }
                    var obj = document.getElementById("box_" + this.pos[i].X + "_" + this.pos[i].Y);
                    if (obj) obj.className = "snake"; else { this.Over();/*移出边界*/ break; }
                }
                this.isDone = true;
            };
            /*游戏结束*/
            this.Over = function () {
                clearInterval(Common.workThread);
                alert("游戏结束!");
            }
            /*吃食物*/
            this.Eat = function (food) {
                var head = this.pos[this.pos.length - 1];
                var isEat = false;
                switch (this.dir) {
                    case Direction.UP:
                        if (head.X == food.pos.X && head.Y == food.pos.Y + 1) isEat = true;
                        break;
                    case Direction.RIGHT:
                        if (head.Y == food.pos.Y && head.X == food.pos.X - 1) isEat = true;
                        break;
                    case Direction.DOWN:
                        if (head.X == food.pos.X && head.Y == food.pos.Y - 1) isEat = true;
                        break;
                    case Direction.LEFT:
                        if (head.Y == food.pos.Y && head.X == food.pos.X + 1) isEat = true;
                        break;
                }
                if (isEat) {
                    this.pos[this.pos.length] = new Position(food.pos.X, food.pos.Y);
                    food.Create(this.pos);
                }
            };
            /*控制移动方向*/
            this.SetDir = function (dir) {
                switch (dir) {
                    case Direction.UP:
                        if (this.isDone && this.dir != Direction.DOWN) { this.dir = dir; this.isDone = false; }
                        break;
                    case Direction.RIGHT:
                        if (this.isDone && this.dir != Direction.LEFT) { this.dir = dir; this.isDone = false; }
                        break;
                    case Direction.DOWN:
                        if (this.isDone && this.dir != Direction.UP) { this.dir = dir; this.isDone = false; }
                        break;
                    case Direction.LEFT:
                        if (this.isDone && this.dir != Direction.RIGHT) { this.dir = dir; this.isDone = false; }
                        break;
                }
            };
        }
        /*食物*/
        function Food() {
            this.pos = new Position();
            /*创建食物 - 随机位置创建立*/
            this.Create = function (pos) {
                document.getElementById("box_" + this.pos.X + "_" + this.pos.Y).className = "";
                var x = 0, y = 0, isCover = false;
                /*排除蛇的位置*/
                do {
                    x = parseInt(Math.random() * (Common.width - 1));
                    y = parseInt(Math.random() * (Common.height - 1));
                    isCover = false;
                    if (pos instanceof Array) {
                        for (var i = 0; i < pos.length; i++) {
                            if (x == pos[i].X && y == pos[i].Y) {
                                isCover = true;
                                break;
                            }
                        }
                    }
                } while (isCover);
                this.pos = new Position(x, y);
                document.getElementById("box_" + x + "_" + y).className = "food";
            };
        }
        function Position(x, y) {
            this.X = 0;
            this.Y = 0;
            if (arguments.length >= 1) this.X = x;
            if (arguments.length >= 2) this.Y = y;
        }
    </script>
</head>
<body>
<div id="pannel" style="margin-bottom: 10px;"></div>
<select id="selSize">
    <option value="20">20*20</option>
    <option value="30">30*30</option>
    <option value="40">40*40</option>
</select>
<select id="selSpeed">
    <option value="500">速度-慢</option>
    <option value="250" selected="selected">速度-中</option>
    <option value="100">速度-快</option>
</select>
<input type="button" id="btnStart" value="开始" />
</body>
</html> 

JavaScript制作贪吃蛇小游戏 揭秘贪吃蛇小游戏代码 阅读详情

相关推荐

【JavaScript】贪吃蛇小游戏

效果预览:https://sevlt.github.io/Snake/index.html Html 代码: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> .

SEVLT 651

JavaScript特效制作经典精讲(案例入门详解、可直接粘贴拷贝运行、史上最牛案例)...

技巧一、添加链接提示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><hea...

baijian1976的博客 181

js实现贪吃蛇小游戏----代码详解

js实现贪吃蛇小游戏----代码详解 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>贪吃蛇</title> <style> .game-area{ height: 600px; width: 600px; backgrou

qq_47815128的博客 663

JS中var a=new function(){}与var a=function(){}与function a(){}的区别

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34210740的博客 1846

JavaScript 实现各种小游戏源码 !js贪吃蛇源码

初学 JavaScript 写的一些小游戏源码, 分享给大家~

萧萧的博客 5271

TwinCAT3 Modbus-TCP Client/Server使用

/起始地址是12289//起始地址是12294。

panjinliang066333的博客 7736

js贪吃蛇小游戏

今天学习了一个贪吃蛇小游戏,过程给我的感觉是非常痛苦的???? 不过到最后面就感觉也还好吧,好啦,让我们一起去看看我们的小蛇叭???? <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #dvs { width: 800px; height: 600px;

Smallwhitestrive的博客 930

Gromacs空蛋白模拟实战:从PDB文件到动力学轨迹的完整流程解析

本文详细解析了使用Gromacs进行空蛋白分子动力学模拟的完整实战流程。从PDB文件处理、力场选择与拓扑构建,到模拟盒子创建、溶剂化与电荷中和,再到能量最小化、NVT/NPT平衡及最终的生产模拟与基础分析,提供了每一步的命令详解和关键注意事项,旨在帮助计算生物学研究者系统掌握这一核心研究工具。

weixin_28454475的博客 276

JS贪吃蛇小游戏实现

JS贪吃蛇小游戏实现,暂停游戏,继续游戏,分数统计,数据配置化。

超级小胖子的博客 1425

开启虚拟人物互动新时代:探索相芯Avatar SDK驱动功能(Android)

相芯SDK提供了男孩和女孩Avatar驱动模型,这些模型具备半身驱动和全身驱动的功能,使得虚拟角色能够根据用户的面部表情和动作实时模仿和响应。半身驱动功能: 相芯SDK的男孩和女孩Avatar驱动模型具备上身驱动功能,即能够通过用户的面部表情和动作来驱动虚拟角色的上半身行为。这意味着用户的面部表情、头部转动和上半身姿态等动作可以直接映射到虚拟角色上,使得虚拟角色能够栩栩如生地模仿用户的动作。例如,用户微笑时,虚拟角色会展现出笑容;用户转动头部时,虚拟角色也会相应地转动头部。

Faceunity2023的博客 632

Win11上从零跑通Carla自动驾驶仿真:保姆级环境配置与避坑指南(Python 3.7+)

本文详细介绍了在Win11系统上从零配置Carla自动驾驶仿真环境的完整流程,包括Python 3.7+环境搭建、依赖安装、常见问题排查及性能优化技巧。通过保姆级教程帮助开发者快速避坑,实现稳定的自动驾驶仿真测试环境部署。

weixin_33488239的博客 421

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

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

好好读书 2万+

Unity之ASE+ShaderGraph+VFX入门到精通 目录

这里是ASE+ShaderGraph+VFX从入门到精通专栏的目录,不停更新中,有问题随时留言或者私信。

TxNet 2841

js实现web贪吃蛇小游戏

js实现web贪吃蛇小游戏 效果图见下,效果展示地址 首先需要实现游戏系统函数,让蛇和食物去动 function System(){ this.timer=null;//定义定时器变量 this.argument=arguments[0];//保存传入的参数 this.flag=0;//计数变量 this.state=true;//系统是否在暂停状态,默认正常 //系统开始...

王为仁的博客 2587

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署MMT模块与STK的版本是一一对应的,比如我现在手上的版本是MMT9的,那么我使用的STK的版本也必须是9版本的,如果你现在正在使用的是更高版本的STK,比如说10、11.2、11.6、12.2,那么该怎么办呢?这个经本人尝试,目前是可以多个STK版本共存的,我们可以根据自己的需要安装多个版本的STK下面开始讲解具体的安装步骤,

weixin_44184852的博客 2919

强化学习:从经典强化学习理解强化学习

1. 背景介绍 强化学习(Reinforcement Learning,RL)作为机器学习领域的重要分支,近年来取得了长足的进步。其核心思想是让智能体通过与环境的交互学习最优策略,从而最大化累积奖励。不同于监督学习和非监督学习,强化学习无需预先标注数据,而是通过试错的方式逐步学习,具有更强的适应性和泛化能力。

AI架构师小马 1805

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

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

2301_80052073的博客 3437

小众但实用:Python爬取钉钉/企业微信消息,实现办公数据自动化采集(完整版)

钉钉/企业微信的办公数据自动化采集,属于「小众但极度实用」的Python技巧——它不像爬虫爬取电商/网页数据那样被广泛关注,但能直接解决职场人的「刚需痛点」,把每天1-2小时的手动数据整理工作,变成「一键自动化完成」。这套技巧的核心价值,不在于「技术有多高深」,而在于「能真正落地、能真正提升效率」—— 几行简单的Python代码,就能解放双手,让你从繁琐的重复工作中解脱出来,专注于更有价值的核心工作。更重要的是:所有的技术和代码,都是基于「合规合法」的前提,守住了技术的底线,也守住了职场的原则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1931

【JavaScript】实现贪吃蛇小游戏

通过JavaScropt实现的简单贪吃蛇小游戏。

2201_75503057的博客 1706

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

用js代码实现贪吃蛇小游戏

js已经学了大部分了,现在就利用我所学的js知识试试做贪吃蛇小游戏吧以下部分相关图片以及思路笔记均出自渡一陈老师的视频首先制作简单的静态页面,添加贪吃蛇移动的背景和相关图片,比如开始游戏等等将各个功能均封装在函数中,利用主函数调用分函数会使结构更清晰。

guai_guai_guai的博客 2644

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

qq_43536982的博客 387

JavaScript-一个贪吃蛇小游戏

JavaScript贪吃蛇,前端贪吃蛇小游戏

qq_57571912的博客 650

js实现的贪吃蛇小游戏

js还是非常强大的 下面就来一个贪吃蛇的小游戏 已经具备了基本功能 可以尝试一下 class Map{ constructor(){ // 提前设定将来的地图的样式数据 this.w = 800; this.h = 400; this.c = “#ccc”; // 执行创建地图方法 this.createEle(); } createEle(){ this.mapEle = document.cr...

ephemeral0的博客 3435

原生JavaScript抒写——贪吃蛇小游戏

原生JavaScript抒写——贪吃蛇小游戏 文章目录原生JavaScript抒写——贪吃蛇小游戏前言一、需求分析二、效果展示三、具体逻辑代码分析1.首先创建一个html文件,然后我们利用canvas布局一个画板2.绘制一条蛇、格子、食物以及蛇的长度3.确定方向键并执行相应的方法和判断方向以及自动触发跑动4.定义我们的游戏机制规则来完善我们的游戏总结 前言 前端开发的核心逻辑思维,莫过于就是对JavaScript的掌握了,不管是小程序还是主流框架都是在原生JavaScript的基础上延伸和简便,因此原生J

这里是前端,是不一样的前端 376

学JS写小游戏——贪吃蛇

贪吃蛇是一款非常经典的小游戏,最近在学javascript,突然想学到东西是不是应该实践下呢,闲来无聊就写了这个游戏,相当只是实现主要的功能,简单说就是能玩,当然由于技术有限,其中还有不少的BUG,这个后期如有时间再去完善或添加点新功能吧。      虽然没得什么技术含量,但还是拿出来和大家尤其是新手们分享,愿和程序猿们一起进步!也给自己点信心,加油!   附源码:

liujizhong的专栏 751

javascript开发的贪吃蛇小游戏(纯js代码)

<!Document html> <html lang="=en"> <head> <meta charset='utf-8'> <title>贪吃蛇</title> <style type="text/css"> *{ padding: 0; margin: 0; } .title{...

Maqiuqiu520的博客 657
上一篇: Maven类包冲突终极解决小技若干
下一篇: 验证码bug JS验证验证码 spring mvc验证用户名和密码
ExceptionMapping
博客等级 码龄10年 30粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值