HTML5制作贪吃蛇游戏

本篇文章主要介绍了h5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了H5 canvas实现贪吃蛇小游戏,分享给大家,具体如下:

实现效果如下

HTML5制作贪吃蛇游戏

实现思路:

ps:这个只是思路,详细可看代码注释

立即学习“前端免费学习笔记(深入)”;

一、先把蛇画出来

定义一下蛇的结构,用一个数组保存一堆矩形,包含蛇头(红)和蛇身(灰)。

画蛇(初始状态)

二、蛇能动(重点)

蛇移动方式:自始至终都只有蛇头在动

画一个灰色的方块,位置与蛇头重叠

将这个方块插到数组中蛇头后面一个的位置arrar.splice(0,1,rect)

砍去末尾的方块array.pop()

将蛇头向设定方向移动一格

需要一个保存方向的变量(direction)

根据方向进行移动,一次移动一个格

根据按键改方向

三、随机投放食物

需要随机食物的位置

需要判断食物在不在蛇身上。

四、吃食物

判断食物是否与蛇头重叠

数组加一个元素(少删除一个元素就是加一个元素)

生成新的食物

五、gameover

撞墙判定

装自己判定

nbsp;html>        Document            #canvas{            box-shadow: 0 5px 40px black;        }            var canvas = document.getElementById('canvas');    var context = canvas.getContext('2d');    //构造对象方块    function Rect (x,y,w,h,color) {        this.x = x;        this.y = y;        this.w = w;        this.h = h;        this.color = color;    }    //画方块的方法    Rect.prototype.draw = function () {        context.beginPath();        context.fillStyle = this.color;        context.rect(this.x,this.y,this.w,this.h);        context.fill();        context.stroke();    }    //构造对象蛇    function Snake () {        //定义一个空数组存放组成整蛇的方块对象        var snakeArray = [];        //画出4个方块,设置成灰色        for (var i = 0; i < 4; i++) {            var rect = new Rect(i*20,0,20,20,"gray");            //之所以用splice(往前加)而不是用push(往后加),是为了让蛇头出现在数组第一个位置            snakeArray.splice(0,0,rect);             }        //把数组第一个作为蛇头,蛇头设成红色        var head = snakeArray[0];        head.color = "red";        //此处将两个后面常用的东西定为属性,方便后面调用        this.head = snakeArray[0];  //蛇头        this.snakeArray = snakeArray;  //整蛇数组        //给定初始位置向右(同keyCode右箭头)        this.direction = 39;    }    //画蛇的方法    Snake.prototype.draw = function () {        for (var i = 0; i  canvas.width || this.head.x  canvas.height || this.head.y < 0){            clearInterval(timer);        }        // 撞自己,循环从1开始,避开蛇头与蛇头比较的情况        for (var i = 1; i < this.snakeArray.length; i++) {            if (this.snakeArray[i].x == this.head.x && this.snakeArray[i].y == this.head.y){                clearInterval(timer);            }        }    }    //画出初始的蛇    var snake = new Snake()    snake.draw();    //画出初始的食物    var food = new getRandomFood()    //定时器    var timer = setInterval(function () {        context.clearRect(0,0,canvas.width,canvas.height);        food.draw();        snake.move();        snake.draw();    }, 100)    //键盘事件,其中的if判定是为了让蛇不能直接掉头    document.onkeydown = function (e) {        var ev = e||window.event;        switch(ev.keyCode){            case 37:{                if (snake.direction !== 39){                    snake.direction = 37;                }                break;            }            case 38:{                if (snake.direction !== 40){                    snake.direction = 38;                }                break;            }            case 39:{                if (snake.direction !== 37){                    snake.direction = 39;                }                break;            }            case 40:{                if (snake.direction !== 38){                    snake.direction = 40;                }                break;            }            }        ev.preventDefault();    }    //随机函数,获得[min,max]范围的值    function getNumberInRange (min,max) {        var range = max-min;         var r = Math.random();        return Math.round(r*range+min)    }    //构建食物对象    function getRandomFood () {        //判定食物是否出现在蛇身上,如果是重合,则重新生成一遍        var isOnSnake = true;        //设置食物出现的随机位置        while(isOnSnake){            //执行后先将判定条件设置为false,如果判定不重合,则不会再执行下列语句            isOnSnake = false;            var indexX = getNumberInRange(0,canvas.width/20-1);            var indexY = getNumberInRange(0,canvas.height/20-1);            var rect = new Rect(indexX*20, indexY*20, 20, 20, "green");            for (var i = 0; i < snake.snakeArray.length; i++) {                if(snake.snakeArray[i].x == rect.x && snake.snakeArray[i].y == rect.y){                    //如果判定重合,将其设置为true,使随机数重给                    isOnSnake = true;                    break;                }            }        }        //返回rect,使得实例化对象food有draw的方法        return rect;    }    //判定吃到食物,即蛇头坐标与食物坐标重合    function isEat () {        if (snake.head.x == food.x && snake.head.y == food.y){            return true;        } else {            return false;        }    }

登录后复制

以上就是HTML5制作贪吃蛇游戏的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2909886.html

(0)
上一篇 2025年3月11日 04:26:57
下一篇 2025年3月7日 19:39:38

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • HTML5加载时的等待动画效果制作

    这篇文章通过实例代码给大家介绍了html5等待加载动画效果的完美解决方案,感兴趣的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示:      100 登录后复制   *{margin:0;padding:0;}    .l…

    2025年3月11日
    200
  • HTML5 IndexedDB本地储存

    indexeddb 是一种低级api,用于客户端存储大量结构化数据(包括, 文件/ blobs)。下面通过本文重点给大家介绍html5本地存储之indexeddb的相关知识,感兴趣的朋友一起看看吧 IndexedDB 是一种低级API,用于…

    编程技术 2025年3月11日
    200
  • HTML5通过api实现拖放排序的实例教程

    html5 中提供了直接拖放的 api,极大的方便我们实现拖放效果,不需要去写一大堆的 js,只需要通过监听元素的拖放事件就能实现各种拖放功能。 前言 html5 中提供了直接拖放的 api,极大的方便我们实现拖放效果,不需要去写一大堆的 …

    编程技术 2025年3月11日
    200
  • 解决在HTML5中的video标签无法播放视频的方法

    这篇文章主要给大家介绍了关于解决html5中video标签无法播放mp4问题的办法,文中介绍的非常详细,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 前言 最近发现了一个问题,在手机录制了一个1.mp4文…

    2025年3月11日
    200
  • Html5新增标签总结

    这篇文章给大家整理了html5新增的九个标签,非常不错,需要的朋友参考下 今天新学习了9个标签、 简单的说就是一个音频标签,他的主要常用属性有src=””音频的路径 controls=”controls&…

    编程技术 2025年3月11日
    200
  • HTML5讲解之拖拽事件dragstart、drag和dragend

    [导读] 拖拽事件  通过拖拽事件,咱们就可以控制拖拽很多东西了。其中什么元素或者是哪里发生了拖拽事件是最关键的。有些事件是在被拖动的元素上触发,有些事件是在放置目标上触发的。拖动某元素时候,触发的事件有: 拖拽事件     通过拖拽事件,…

    2025年3月11日
    200
  • HTML5实现移动端自适应的几种方法介绍

    这篇文章主要介绍了html5 移动页面自适应手机屏幕四类方法总结,非常具有实用价值,需要的朋友可以参考下 1、使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但是各设备…

    2025年3月11日
    200
  • HTML5使用四种方法实现移动页面自适应手机屏幕的方法总结

    这篇文章主要介绍了html5 移动页面自适应手机屏幕四类方法总结,非常具有实用价值,需要的朋友可以参考下 1、使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但是各设备…

    2025年3月11日
    200
  • 极客学院HTML5新特性基础视频课件源码

    html5是html最新的修订版本,2014年10月由万维网联盟(w3c)完成标准制定。html5的设计目的是为了在移动设备上支持多媒体,简单易学。《极客学院html5新特性基础视频教程》将带你了解html5相比html添加了哪些新的特性,…

    2025年3月11日
    200
  • 李炎恢HTML5视频资料分享

    学习《李炎恢html5视频教程》视频教程,将向大家详细介绍html5,html5是超文本标记语言(html)的第五次重大修改,即最新版本;它比原来的标准又增加了一些新的标签,实现更多功能,更标准化,更适用于移动互联网。 视频播放地址:htt…

    2025年3月11日
    200

发表回复

登录后才能评论