html+js贪吃蛇

游戏区域限制在一个ul里,蛇的每一节是有一个个li组成,每个li都用position定位。食物是创建的一个div,每次蛇头碰触食物时,创建一个新的li,li会自动加载蛇的尾部,然后通过随机数改变食物的位置。通过响应键盘的wasd控制蛇头的方向(用的是onkeypress事件和keyCode),用定时器控制蛇头自动走,用数组储存蛇头每次所走的top和left值,用循环把这些top和left值赋值给蛇头后面的li上,这样蛇身子就会随着蛇头动起来了。

效果图:

标注:红色的圆是食物,蛇头是黑色的。

代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>蛇头移动</title>
        <style media="screen">
            *{
                padding: 0px;
                margin: 0px;
            }
            ul{
                height: 800px;
                width: 800px;
                background-color: darkgreen;
                position: relative;
                list-style: none;
                margin: 15px auto;
                text-align: right;
                color: white;
                font-size: 2em;
                padding: 10px 10px;
            }
            ul li{
                height: 100px;
                width: 100px;
                border-radius: 50%;
                background-color: darkred;
                position: absolute;
            }
            ul li:nth-child(1){
                top: 20px;
                left: 0;
                background-color: black;
                height: 111px;
                width: 111px;
            }
            ul li:nth-child(2){
                top: 10px;
                left: 0;
                background-color: white;
            }
            ul li:nth-child(3){
                top: 0px;
                left: 0;

            }
            div{
                height: 100px;
                width: 100px;
                border-radius: 50%;
                background-color: darkred;
                position: absolute;
            }
            section{
                width: 800px;
                padding: 10px 0px;
                border-radius: 30px;
                background-color: rgba(200,17, 2,0.9);
                margin: 1px auto;
                text-align: center;
                font-size: 33px;
                border: 3px solid black;
                box-shadow: 0 0 10px gray;
                cursor: pointer;
                color: white;
            }
        </style>
        <script type="text/javascript">
            window.onload=function(){
                var ul=document.querySelector(‘ul‘);
                var lis=document.getElementsByTagName(‘li‘);
                var btn=document.getElementsByTagName(‘section‘)[0];
                var timer;
                //蛇头的top与left值
                var top=lis[0].offsetTop;
                var left=lis[0].offsetLeft;
                var flag=true;
                //存储蛇头的每一节的位置
                var snakePosi=[{x:lis[1].offsetLeft,y:lis[1].offsetTop},{x:lis[0].offsetLeft,y:lis[0].offsetTop}];
                //声明速度
                var speedX=10;
                var speedY=10;
                var contrStarPau=false;
                function keyContrMove(flag){
                    clearInterval(timer);
                    timer=setInterval(function(){
                        if (!contrStarPau) {
                            return;
                        }
                        if (flag) {
                            top+=speedY;
                            lis[0].style.top=top+‘px‘;
                        }else {
                            left+=speedX;
                            lis[0].style.left=left+‘px‘;
                        }
                        //将蛇头的位置存入数组,目的是把它的位置赋给它的下一节
                        snakePosi.push({x:left,y:top});
                        if (snakePosi.length>lis.length) {
                            snakePosi.shift();
                        }
                        for (var i =1; i<snakePosi.length; i++) {
                            lis[i].style.top=snakePosi[snakePosi.length-1-i].y+‘px‘;
                            lis[i].style.left=snakePosi[snakePosi.length-1-i].x+‘px‘;
                        }
                        if ((Math.abs(lis[0].offsetTop-div.offsetTop)<lis[0].offsetHeight && lis[0].offsetLeft==div.offsetLeft) || (Math.abs(lis[0].offsetLeft-div.offsetLeft)<lis[0].offsetWidth && lis[0].offsetTop==div.offsetTop)) {
                            div.style.top=randomNum()+‘px‘;
                            div.style.left=randomNum()+‘px‘;
                            createLi();
                        }
                        if (lis[2].offsetTop<0 || lis[2].offsetTop>(ul.offsetHeight-lis[2].offsetHeight) || lis[2].offsetLeft<0 || lis[2].offsetLeft>(ul.offsetWidth-lis[2].offsetWidth)) {
                            clearInterval(timer)
                        }

                    },33)
                }
                keyContrMove(true);
                document.onkeypress=function(event){
                    event=event||window.event;
                    if (event.keyCode==119 && flag==false) {
                        if (speedY>0) {
                            speedY=-speedY;
                        }
                        flag=true;
                        keyContrMove(true);
                    }
                    if (event.keyCode==115 && flag==false) {
                        if (speedY<0) {
                            speedY=-speedY;
                        }
                        flag=true;
                        keyContrMove(true);
                    }
                    if (event.keyCode==97 && flag==true) {
                        if (speedX>0) {
                            speedX=-speedX;
                        }
                        flag=false;
                        keyContrMove(false);
                    }
                    if (event.keyCode==100 && flag==true) {
                        if (speedX<0) {
                            speedX=-speedX;
                        }
                        flag=false;
                        keyContrMove(false);
                    }
                }
                function randomNum(){
                    var a=parseInt(Math.random()*(700-10)+10)
                    return a=a-a%10;
                }
                function createLi(){
                    var li=document.createElement(‘li‘);
                    ul.appendChild(li);
                }
                function createDiv(){
                    var div=document.createElement(‘div‘);
                    div.style.top=randomNum()+‘px‘;
                    div.style.left=randomNum()+‘px‘;
                    ul.appendChild(div);
                }
                createDiv();
                var div=document.getElementsByTagName(‘div‘)[0];
                btn.onclick=function(){
                    contrStarPau=!contrStarPau;
                    console.log(contrStarPau);
                }

            }
        </script>
    </head>
    <body>
        <ul>
            By Paul.SJ
            <li></li>
            <li></li>
            <li></li>
        </ul>
    //按钮
        <section>
            ??start?? / ??pause??
        </section>
    </body>
</html>
时间: 2024-08-27 03:03:27

html+js贪吃蛇的相关文章

JS贪吃蛇游戏

<!DOCTYPE html><html> <head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <title>JS贪吃蛇游戏</title>    <style>    * {        margin: 0;    

js贪吃蛇 纯手打 代码比较复杂 自己瞎弄的 bug 比较多 自己一点一点排除弄 完全原创

//虽然代码没有别人写的简单,但是这是自己的思想,通过这次实例,学到了很多,也发现了很多不足,努力学习啊,小小的贪吃蛇也包含了很多东西还有 //好多问题需要解决,比如,如何判断蛇头碰到蛇身,如何让食物不出现在蛇的身上等,欢迎大家一起探讨 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt

JS贪吃蛇小游戏

效果图展示: 具体实现代码如下: (1)html部分 1 !DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>贪吃蛇</title> 6 <link rel="stylesheet" type="text/css" href="main.css"> 7 </h

html,css,js,贪吃蛇网页游戏

游戏效果如图: 实现代码如下: <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>贪吃蛇游戏</title> </head> <body> <h1>石健涛</h1> <div id="gameBox" style="text-align: center;&quo

js贪吃蛇源码

1.注意,自己引入jquery,这个demo基于jquery的,我的jquery是写的本地的 2.没有写注释,看不懂的再问我吧, <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> * { padding: 0; margin: 0; } div.w

js 贪吃蛇 大部分显而易见的问题已解决 但是代码过于复杂 欢迎纠错

//代码相比,上次做了优化,解决自身缠绕问题 解决后退问题  食物出现问题与自身缠绕问题大同小异,这里不做代码演示,各位如有兴趣,可以自己参考,自作 //鄙人拙作,献丑了 //时间:6小时 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml

JS的小游戏&quot;贪吃蛇&quot;

贪吃蛇儿时的回忆,今天刚好学习到这了,就刚好做了一个,也是学习了吧,需要掌握的知识: 1,JS函数的熟练掌握, 2,JS数组的应用, 3,JS小部分AJAX的学习 4,JS中的splice.shift等一些函数的应用, 基本上就这些吧,下面提重点部分: 前端的页面,这里可自行布局,我这边提供一个我自己的布局: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org

js+jQuery实现贪吃蛇小游戏

这是我第一次这么认真的去写一个程序.今天老师布置的编程任务是实现一个贪吃蛇的小游戏,一开始感觉很茫然的,因为以前都没有这么系统的去做过一个编程任务.后来理清思路去做,感觉问题也并不是那么的难. 首先,第一步肯定是要编写出我们的的静态页面. 第二步,让我们的贪吃蛇先从一个开始动起来. 第三步,让我们通过键盘去控制他的运动方向. 第四步,让我们去判断我们的贪吃蛇有没有撞墙,有没有吃到自己,因为这已经犯规了. 第五步,给我们的贪吃蛇随机生成一个‘食物’. 第六步,实现每当我们的贪吃蛇吃了一个食物,他都

使用Html5+JS做的贪吃蛇小游戏

学习了Html5的Canvas的使用,和JS创建对象,做了一个贪吃蛇小游戏,来巩固JS面向对象编程和Canvas的用法. Node.js 1 /** 2 * 格子类,组成贪吃蛇和舞台 3 */ 4 function Node(x,y){ 5 this.x=x; 6 this.y=y; 7 /** 8 * 比较两个格子是否重合 9 */ 10 this.equals=function(x,y){ 11 return this.x==x&&this.y==y; 12 } 13 } Snake.