• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > 分享一个用html5实现的贪吃蛇特效代码

分享一个用html5实现的贪吃蛇特效代码

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5,贪吃蛇,特效等相关知识,匿名希望在学习及工作中可以帮助到您
本篇小编为大家分享一个用html5实现的简单贪吃蛇特效代码,喜欢的小伙伴们可以看一下

<html>
    <head>
        <meta charset='utf-8'/>
        <title>Snake</title>
    </head>
    <body>
        <canvas id="plank" style="border"></canvas>
        <script type="text/javascript">
            //内置大量BUG,I'm sorry.
            var lev=100;                //定时器间隔时间
            var num=30;             //网格大小,现在是30x30
            var direction=3;            //0:up  1:down  2:left  3:right
            var handle;             //用于管理定时器
            var score=0;                //分数
            var pause=true;         //暂停使用
            var canvas = document.getElementById('plank');
            var context = canvas.getContext('2d');
            var snakex=new Array();     //存储蛇身x坐标,下同
            var snakey=new Array();
            var prize=new Array(-1,-1);     //食物的位置
  
            function rand(){            //产生随机数
                return parseInt(Math.random()*num);
            }
  
            function chk(x,y){          //检查是否结束,包括越界
                if(x<0||y<0) return false;
                if(x>num-1||y>num-1) return false;
                for (var i=0; i!=snakex.length-1;i++) {
                    if(snakex[i]==x&&snakey[i]==y) {return false;}
                };
                return true;
            }
  
            function drawScore(text){       //打印分数
                context.clearRect(0,0,300,25);
                context.fillText("Score:"+text,5,5);
            }
  
            function makeprize(){           //产生食物的位置
                var flag=false;
                var prizepre=new Array(2);  //使用链表会更好
                while(!flag){           //食物位置不能在蛇体内
                    flag=true;
                    prizepre[0]=rand();prizepre[1]=rand();
                    for (var i=0; i!=snakex.length;i++) {
                        if((snakex[i]==prizepre[0])&&(snakey[i]==prizepre[1])) {flag=false;}
                    }
                }
                prize=prizepre;
            }
  
            function runscore(x,y){     //判断是否吃到食物,并做处理
                if(prize[0]==x&&prize[1]==y){
                    score=score+1;
                    drawScore(score);
                    snakex[snakex.length]=prize[0];
                    snakey[snakey.length]=prize[1];
                    makeprize();
                    drawNode(prize[0],prize[1]);
                    return true;
                }
                return false;
            }
  
            function run(){             //定时器用来判断snake行进方向等等
                switch(direction){          //方向
                    case 0: snakex[snakex.length]=snakex[snakex.length-1];snakey[snakey.length]=snakey[snakey.length-1]-1;break;
                    case 1: snakex[snakex.length]=snakex[snakex.length-1];snakey[snakey.length]=snakey[snakey.length-1]+1;break;
                    case 2: snakex[snakex.length]=snakex[snakex.length-1]-1;snakey[snakey.length]=snakey[snakey.length-1];break;
                    case 3: snakex[snakex.length]=snakex[snakex.length-1]+1;snakey[snakey.length]=snakey[snakey.length-1];break;
                }
                if(!runscore(snakex[snakex.length-1],snakey[snakey.length-1])){
                    if(chk(snakex[snakex.length-1],snakey[snakey.length-1])==false) {
                        clearInterval(handle);
                        drawScore('\\tGame over');
                        return;
                    }
                    drawNode(snakex[snakex.length-1],snakey[snakey.length-1]);
                }
                clearNode(snakex[0],snakey[0]);
                snakex.shift();
                snakey.shift();
            }
  
            function drawNode(x,y){     //画点,共30X30个点(10*10像素算1个点)
                context.fillRect(x*10+1,y*10+31,10,10);
            }
  
            function clearNode(x,y){
                context.clearRect(x*10+1,y*10+31,10,10);
            }
  
            function init(){        //初始化,设置画布大小,启动定时器等等
                canvas.width = 510;
                canvas.height = 600;
                context.font = "normal 20px Airl";
                context.textBaseline = "top";
                context.fillText('P键开始/暂停,方向键控制',0,350);
                drawScore('');
                context.strokeRect(0,30,302,302);
                makeprize();
                drawNode(prize[0],prize[1]);
                snakex[0]=0;snakex[1]=1;snakex[2]=2;
                snakey[0]=0;snakey[1]=0;snakey[2]=0;
                drawNode(snakex[0],snakey[0]);drawNode(snakex[1],snakey[1]);drawNode(snakex[2],snakey[2]);
            }
  
            document.onkeydown=function(event){     //注册键盘事件,up,down,left,right,暂停键p
                var e = event || window.event;
                if(e&&e.keyCode==38){
                    direction=0;
                }
                if(e&&e.keyCode==40){
                    direction=1;
                }
                if(e&&e.keyCode==37){
                    direction=2;
                }
                if(e&&e.keyCode==39){
                    direction=3;
                }
                if(e&&e.keyCode==80){
                    if(pause) {pause=false;handle=setInterval(run,lev);}
                    else {pause=true;clearInterval(handle);}
                }
            }
  
  
            init();
        </script>
    </body>
</html>

【相关推荐】

1. 免费h5在线视频教程

2. HTML5 完整版手册

3. php.cn原创html5视频教程

以上就是分享一个用html5实现的贪吃蛇特效代码的详细内容,更多请关注微课江湖其它相关文章!

您可能想查找下面的文章:

  • HTML5知识点总结
  • HTML5的本地存储
  • HTML5本地存储之IndexedDB
  • Html5实现文件异步上传功能
  • Html5新标签datalist实现输入框与后台数据库数据的动态匹配
  • 详解HTML5 window.postMessage与跨域
  • HTML5拖放API实现拖放排序的实例代码
  • 解决html5中video标签无法播放mp4问题的办法
  • HTML5新特性 多线程(Worker SharedWorker)
  • Html5新增标签有哪些

相关文章

  • 2018-12-03实例讲解HTML5的meta标签的一些应用 _html5教程技巧
  • 2018-12-03什么是 WebSocket?深入理解html5中WebSocket
  • 2018-12-03HTML5 Shiv--解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
  • 2018-12-03html5 Web SQL Database 之事务处理函数transaction与executeSQL解析_html5教程技巧
  • 2018-12-03HTML5初级知识总结
  • 2018-12-03html5 table标签的样式介绍(另附html5 table css居中的实例)
  • 2017-08-06HTML5中判断横屏竖屏的方法(移动端)
  • 2018-12-03在html文件引入其它html文件的几种方法
  • 2018-12-03html5菜单折纸效果_html5教程技巧
  • 2017-08-06深入解析HTML5使用SVG图像时的viewBox属性用法

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • html5+svg学习指南之SVG基础知识
    • H5的时代什么时候才会到来?
    • HTML5 移动开发未来可否取代 iOS 和安卓?
    • css3 如何实现圆边框的渐变? 如图
    • Tomcat的卸载及其过程中出现的问题汇总
    • 关于移动端H5页面中1px边框的解决方法
    • H5调用相机拍照并压缩图片
    • html5 navigator.geolocation基于浏览器获取地理位置代码案例
    • HTML5响应式分步定制商品模板
    • 画图工具如何使用?总结画图工具实例用法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有