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

简介: 前端开发的核心逻辑思维,莫过于就是对JavaScript的掌握了,不管是小程序还是主流框架都是在原生JavaScript的基础上延伸和简便,因此原生JavaScript对于前端是必须要掌握和不断学习的,那么好,今天我们就来用原生的JavaScript写一个简单的小游戏——贪吃蛇

👦个人简介:张清悠,字澄澈,号寻梦客,爱好旅行、运动,主攻前端方向技术研发,副攻Unity 3D、C++、Python人工智能等
📝个人寄语:学会不为过程的缓慢而焦虑,即使暂时未能如你所愿,但只要你在努力,你就在不断成长!
🙏个人公众号:清悠小猿(海量源码尽在其中,欢迎关注)

前言

前端开发的核心逻辑思维,莫过于就是对JavaScript的掌握了,不管是小程序还是主流框架都是在原生JavaScript的基础上延伸和简便,因此原生JavaScript对于前端是必须要掌握和不断学习的,那么好,今天我们就来用原生的JavaScript写一个简单的小游戏——贪吃蛇

一、需求分析

首先,先要确定贪吃蛇小游戏的需求:

  • 背景墙 确定行列
  • 创建蛇头
  • 蛇头移动
  • 蛇头变相
  • 创建实物
  • 碰撞检测
  • 增加身体
  • 食物消失 随机创建新的
  • 身体蛇头一起移动

二、效果展示

image.png

三、具体逻辑代码分析

1.首先创建一个html文件,然后我们利用canvas布局一个画板

    //Css

    * {
            margin: 0;
        }

        #t-canvas {
            background: #ffffff;
            margin: 100px auto;
            display: block;
            border: 10px solid #3300ff;
            border-radius: 20px;
        }

        #t-but {
            width: 150px;
            height: 60px;
            margin: 20px auto;
            display: block;
            font-size: 25px;
            background: #777;
            border: 2px solid #00cccc;
            color: #ffffff;
        }
        //Html
    <canvas width="600" height="600" id="t-canvas"></canvas>
    <input type="submit" value="开始游戏" id="t-but" onclick="javascript:go();" />
        //JS
            var canvas = document.getElementById("t-canvas");//通过ID拿到canvas画板
        var quanxian = canvas.getContext("2d");//获取权限
        var width = 20;
        //定义初始化蛇的长度
        var she = 6;
        //定义一条蛇的数组
        var shesz = [];
        //定义食物的X,Y轴
        var rootX = 0;
        var rootY = 0;
        //蛇的方向
        var direction = 3;
        var directions = 0;
        var Go = 2;
        //Buttone开始游戏按钮
        function go() {
            Go = 1;
            zidong();
        }
        //循环绘制线条 画板
        function forhua() {//drawRect
            for (var i = 0; i < 30; i++) {
                quanxian.strokeStyle = "#000000";
                quanxian.beginPath();//起点路径
                quanxian.moveTo(i * 20, 0);//起点
                quanxian.lineTo(i * 20, 600);//终点
                quanxian.moveTo(0, i * 20);//起点
                quanxian.lineTo(600, i * 20);//终点
                quanxian.closePath();//终点路径
                quanxian.stroke(); //连接线
            }
}
AI 代码解读

2.绘制一条蛇、格子、食物以及蛇的长度


            //绘制一条蛇
            for (var j = 0; j < she; j++) {
                quanxian.fillStyle = "#000000";
                if (j == she - 1) quanxian.fillStyle = "#cc3300";

                //绘制格子 
                quanxian.fillRect(shesz[j].x, shesz[j].y, 20, 20);
            }

            quanxian.fillStyle = "#49cb8d";//定义食物
            quanxian.fillRect(rootX, rootY, 20, 20);//食物位置
            quanxian.fill();
                    //遍历蛇的长度
        function sheCount() {//start

            for (var i = 0; i < she; i++) {
                shesz[i] = { x: i * 20, y: 0 };

            }
            addXY();
            forhua();
        }
        //定义食物
        function addXY() {//addFood
            rootX = Math.floor(Math.random() * 30) * 20;
            rootY = Math.floor(Math.random() * 30) * 20;
            for (var i = 0; i < she - 1; i++) {
                if (rootX == shesz[i].x && rootY == shesz[i].y) {
                    addXY();
                }
            }
        }
AI 代码解读

3.确定方向键并执行相应的方法和判断方向以及自动触发跑动

//确定方向键并执行相应的方法
        function godirection() {//move
            var touX = shesz[she - 2].x;
            var touY = shesz[she - 2].y;
            switch (direction) {//判断是否是退后
                case 1:
                    if (shesz[she - 1].x - 20 == touX && shesz[she - 1].y == touY) {
                        direction = directions;
                    }
                    break;
                case 2:
                    if (shesz[she - 1].x == touX && shesz[she - 1].y - 20 == touY) {
                        direction = directions;
                    }
                    break;
                case 3:
                    if (shesz[she - 1].x + 20 == touX && shesz[she - 1].y == touY) {
                        direction = directions;
                    }
                    break;
                case 4:
                    if (shesz[she - 1].x == touX && shesz[she - 1].y + 20 == touY) {
                        direction = directions;
                    }
                    break;
            }

            directions = direction;//重新给原方向定义一个值
            switch (direction) {
                case 1: shesz.push({ x: shesz[she - 1].x - 20, y: shesz[she - 1].y }); break;//x轴减1格

                case 2: shesz.push({ x: shesz[she - 1].x, y: shesz[she - 1].y - 20 }); break;//y轴减1格

                case 3: shesz.push({ x: shesz[she - 1].x + 20, y: shesz[she - 1].y }); break;//x轴加1格

                case 4: shesz.push({ x: shesz[she - 1].x, y: shesz[she - 1].y + 20 }); break;//y轴加1格


            }
            //删除第一个元素
            shesz.shift();
            //重新绘制表格
            quanxian.clearRect(0, 0, 600, 600);

            isDead();
            isEat();
            forhua();
        }

        //判断方向键的方向
        function keyDown(e) {
            switch (e.keyCode) {
                case 37://左
                    direction = 1;
                    break;
                case 38://上
                    direction = 2;
                    break;
                case 39://右
                    direction = 3;
                    break;
                case 40://下
                    direction = 4;
                    break;
            }
        }

        //自己动
        function zidong() {//btnstart
            setInterval(godirection, 150);
            //监听键盘事件 
            document.onkeydown = function (e) {
                //解决浏览器的兼容性
                var e = e || window.event;
                keyDown(e);
            }
        }
AI 代码解读

4.定义我们的游戏机制规则来完善我们的游戏

//定义游戏规则
        function isDead() {
            if (shesz[she - 1].x > 585 || shesz[she - 1].y > 585 || shesz[she - 1].x < 0 || shesz[she - 1].y < 0) {//越过边界了
                alert("游戏结束啦");
                Go = 2;
                window.location.reload();//刷新页面
            }
            for (var i = 0; i < she - 2; i++) {//判断不要吃自己
                if (shesz[she - 1].x == shesz[i].x && shesz[she - 1].y == shesz[i].y) {
                    alert("出车祸了");
                    Go = 2;
                    window.location.reload();//刷新页面
                }
            }

        }

        //吃的规则
        function isEat() {
            if (shesz[she - 1].x == rootX && shesz[she - 1].y == rootY) {
                she = she + 1;//蛇的长度加一
                shesz.unshift({ x: -20, y: -20 });//在蛇的数组最末尾加一个
                addXY();//重新定义食物
            }
        }

        //当页面加载完成执行这个方法
        window.onload = function () {
            sheCount();
            if (Go == 1) {
                zidong();
            }

        }
AI 代码解读

总结

1.分析需求和抒写代码一定要思路清晰,这样再进行编写代码的时候更好的捋出具体步骤,更高效的完成

2.具体需求,具体分析,没有过不去的坎,加油!!!行进中的前端大军

以上就是用JavaScript实现贪吃蛇小游戏的全部过程,原创不易,期待您的点赞关注与转发评论😜😜😜
AI 代码解读
目录
打赏
0
1
1
0
162
分享
相关文章
|
5月前
|
JS实现简单的打地鼠小游戏源码
这是一款基于JS实现简单的打地鼠小游戏源码。画面中的九宫格中随机出现一个地鼠,玩家移动并点击鼠标控制画面中的锤子打地鼠。打中地鼠会出现卡通爆破效果。同时左上角统计打地鼠获得的分数
223 1
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
71 3
js+jquery实现贪吃蛇经典小游戏
本项目采用HTML、CSS、JavaScript和jQuery技术,无需游戏框架支持。通过下载项目文件至本地,双击index.html即可启动贪吃蛇游戏。游戏界面简洁,支持方向键控制蛇移动,空格键实现游戏暂停与恢复功能。
107 14
|
5月前
|
原生JS实现斗地主小游戏
这是一个原生的JS网页版斗地主小游戏,代码注释全。带有斗地主游戏基本的地主、选牌、提示、出牌、倒计时等功能。简单好玩,欢迎下载
156 7
|
5月前
|
JS趣味打字金鱼小游戏特效源码
hi fish是一款打字趣味小游戏,捞出海里的鱼,捞的越多越好。这款游戏用于电脑初学者练习打字。初学者可以根据自己的水平设置游戏难度。本段代码可以在各个网页使用,有需要的朋友可以直接下载使用,本段代码兼容目前最新的各类主流浏览器,是一款非常优秀的特效源码!
64 3
html5+three.js公路开车小游戏源码
html5公路开车小游戏是一款html5基于three.js制作的汽车开车小游戏源代码,在公路上开车网页小游戏源代码。
165 0
html5+three.js公路开车小游戏源码
|
5月前
|
JS趣味打字金鱼小游戏特效源码
hi fish是一款打字趣味小游戏,捞出海里的鱼,捞的越多越好。这款游戏用于电脑初学者练习打字。初学者可以根据自己的水平设置游戏难度。本段代码可以在各个网页使用,有需要的朋友可以直接下载使用,本段代码兼容目前最新的各类主流浏览器,是一款非常优秀的特效源码!
79 0
JS趣味打字金鱼小游戏特效源码
五子棋小游戏(JS+Node+Websocket)可分房间对战
本文介绍了通过JS、Node和WebSocket实现的五子棋游戏,支持多人在线对战和观战功能。
173 1
五子棋小游戏(JS+Node+Websocket)可分房间对战
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
本文介绍了一个使用JavaScript和HTML5 Canvas API实现的贪吃蛇游戏的升级版本,该版本支持PC端和移动端,提供了丝滑的转向效果,并允许玩家通过键盘或触摸屏控制蛇的移动。代码中包含了详细的注释,解释了游戏逻辑、食物生成、得分机制以及如何响应不同的输入设备。
154 1
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
JS配合canvas实现贪吃蛇小游戏
本文通过详细的代码示例介绍了如何使用JavaScript和HTML5的Canvas API实现一个贪吃蛇游戏,包括蛇的移动、食物的生成、游戏的开始与结束逻辑,以及如何响应键盘事件来控制蛇的方向。
123 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等