前端三小时用html和js写一个贪吃蛇游戏,非常简单带讲解,代码可直接用,功能完整

2023-11-03

目录

游戏主体部分--普通模式

游戏主体部分--地狱模式

游戏主页入口 预览图

游戏入口代码

1.html

2.css 

3.js 

注册页面代码


游戏实现很简单,只写游戏主体的话只要三小时就够了。

话不多说,我们直接来看效果预览。

转成gif图之后有点卡,但是游戏效果并不卡,非常流畅。 

简单描述一下这个游戏分为两种模式,普通模式和困难模式。
普通模式里面如果撞到墙会死,或者撞到自己也会死。

困难模式多设置了一些障碍物,如果撞到障碍物也会死,同时速度会更快,难度更大。

每个模式的界面下方都会记录一个当前得分和最高得分。

为了游戏的完整性,我还写了一个游戏的入口界面,和用户的注册界面。

代码的每一块都有注释。

如果需要完整压缩包的友友,请私信我,无偿免费。

游戏主体部分--普通模式

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .t2{
            background-color: black;
        }
        .t1{
            background-image: url("images/R-C\ \(1\).jfif");
            background-size: 650px 600px;
        }
        .btn{
            position: absolute;
            top:11px;
            left:320px;
            border:4px solid black;
            
        }
        #sore{
            margin: 0 auto;
            width: 505px;
            height: 60px;
            background-color: black;
            border: 3px solid rgb(93, 170, 170);
        }
        .mibtn{
            height:150px;
            width:60px;
            background-color:yellowgreen;
            font-size: large;
            cursor: pointer;
        }
        /* 地图设计 */
        #map {
            /* 让地图居中显示 */
            margin: 0 auto;
            padding: 10px;
            width: 485px;
            height: 485px;
            background-color: black;
            border: 3px solid rgb(93, 170, 170);
        }

        /* 蛇身设计 */
        .snake {
            width: 20px;
            height: 20px;
            margin: 2px;
            background-color: brown;
            float: left;
        }

        /* 食物设计 */
        .food {
            width: 20px;
            height: 20px;
            margin: 2px;
            background-color: greenyellow;
            float: left;
        }

        /* 地图小格子设计 */
        .ditu {
            width: 20px;
            height: 20px;
            margin: 2px;
            background-color: pink;
            float: left;
        }
        #ss{
            font-size: 24px;
            text-align: center;
            color:wheat;
            line-height: 10px;
        }
        .deng{
            position:absolute;
            top:250px;
        }
        .open{
            width:50px;
            height:50px;
            cursor: pointer;
            border:5px solid black
        }
        .close{
            width:50px;
            height:50px;
            cursor: pointer;
            border:5px solid black;
        }
    </style>
    <script>
        // 地图数组
        var arr = new Array();

        // 横向和纵向小格子的数量
        var X = 20;
        var Y = 20;

        //蛇身数组
        var snakeX = [4, 5, 6];
        var snakeY = [2, 2, 2];

        //判断蛇身的标记数组
        var st = new Array();
        for (var i = 0; i < X; i++) {
            st[i] = new Array();
            for(var j=0;j<Y;j++){
                st[i][j]=0;
            }
        }
        //食物坐标
        var foodX = 9;
        var foodY = 3;

        //方向坐标
        var direct = 39;//方向 37-40对应左上右下四个方向

        //记录分数
        var sor=0;
        var maxsor=0;
        //创建地图
        function create() {
            var map = document.getElementById("map");
            //这里原本使用的是class,但是因为getElementsByClassName获取的到的是数组的形式,无法准确定位,所以改成ID;
            for (var y = 0; y < Y; y++) {
                arr[y] = new Array();
                for (var x = 0; x < X; x++) {
                    var mi = document.createElement("div");//创建一个div小格子;
                    mi.className = "ditu";
                    arr[y][x] = mi;
                    map.appendChild(mi);
                }
            }
        }

        // 创建蛇
        function createSnake() {
            var flag;
            for (var i = 0; i < snakeX.length; i++) {
                arr[snakeY[i]][snakeX[i]].className = "snake";
            }
        }

        function createFood() {
            flag = false;
            do {
                //math.random()随机返回一个float类型介于[0,1)的数
                foodX = parseInt(Math.random() * X);
                foodY = parseInt(Math.random() * Y);
                for (var i = 0; i < snakeX.length; i++) {
                    if (snakeX[i] == foodX && snakeY[i] == foodY) {//判断food和snake是否重合
                        flag = true;//如果重合需要重新随机生成一个food
                        break;
                    }
                }
            } while (flag);
            arr[foodY][foodX].className = "food";
        }

        function ini(){
            direct=39;
            sor=0;
            snakeX = [4, 5, 6];
            snakeY = [2, 2, 2];
            document.getElementById("ss").innerHTML="当前得分:"+sor+"  最高分:"+maxsor;
        }
        //清除蛇,恢复原始状态
        function clearSnake() {
            for (var i = 0; i < snakeX.length; i++) {
                arr[snakeY[i]][snakeX[i]].className = "ditu";
            }
        }




        //蛇的运动
        function snakeMove() {
            //先清除再移动
            clearSnake();

            for (var i = 0; i < snakeX.length - 1; i++) {
                //蛇整体移动
                snakeX[i] = snakeX[i + 1];
                snakeY[i] = snakeY[i + 1];
            }
            //snakeX[]
            switch (direct) {
                case 37:
                    snakeX[snakeX.length - 1]--;
                    break;
                case 38:
                    snakeY[snakeY.length - 1]--;
                    break;
                case 39:
                    snakeX[snakeX.length - 1]++;
                    break;
                case 40:
                    snakeY[snakeY.length - 1]++;
                    break;
            }

            //先判断有没有撞到自己,然后再判断是否吃到了食物,否则食物会被误判成身体的一部分
            for (var i = 0; i < X; i++) {
            for(var j=0;j<Y;j++){
                st[i][j]=0;
            }
            }
            for (var i = 0; i < snakeX.length-1; i++) {
                console.log(i+"  "+st[snakeX[i]][snakeY[i]]+"   "+snakeX.length);
                if (st[snakeX[i]][snakeY[i]] == 1) {
                    
                    arr[foodY][foodX].className="ditu";
                    if(sor>maxsor)
                    {
                    maxsor=sor;
                    document.getElementById("ss").innerHTML="当前得分:"+sor+"  最高分:"+maxsor;
                    }
                    clearInterval(move); //停止移動
                    alert("啊哦!撞到自己了!游戏结束");
                    return;
                }
                st[snakeX[i]][snakeY[i]] = 1;
            }
            //如果吃到食物了
            if (snakeX[snakeX.length - 1] == foodX && snakeY[snakeY.length - 1] == foodY) {
                //那么食物就成为了身体的一部分
                snakeX[snakeX.length] = foodX;
                snakeY[snakeY.length] = foodY;

                //分数改变
                sor++;
                
                sorr=sor+"";
                maxsorr=maxsor+"";
                document.getElementById("ss").innerHTML="当前得分:"+sorr+"  最高分:"+maxsorr;
                //重新组合
                for (var i = snakeX.length - 1; i > 0; i--) {
                    snakeX[i]=snakeX[i - 1];
                    snakeY[i]=snakeY[i - 1];
                }
                //再次生成食物
                createFood();
            }

            //输掉游戏的情况

            //超出游戏边框的情况
            if (snakeX[snakeX.length - 1] < 0 || snakeX[snakeX.length - 1] > X - 1 || snakeY[snakeY.length - 1] < 0 || snakeY[snakeY.length - 1] > Y - 1) {

                //取消食物
                arr[foodY][foodX].className="ditu";
                if(sor>maxsor)
                {
                    maxsor=sor;
                    document.getElementById("ss").innerHTML="当前得分:"+sor+"  最高分:"+maxsor;
                }
                clearInterval(move); //停止移動
                alert("啊哦!撞到墙了!游戏结束");
                return;
            }

            
            createSnake();
           

        } 
        
        //判断用户输入的按键情况
        function is() {
            var key = event.keyCode;//获取按键

            //如果与原方向相反 不行
            if (direct == 37 && key == 39 || direct == 39 && key == 37 || direct == 38 && key == 40 || direct == 40 && key == 38)
                return;

            //符合要求
            else if (key >= 37 && key <= 40) {
                //用户按了某个方向键
                direct = key;
            }
            else {
                //其他按键
            }
        }

        //运行
         function run() {
            
                //alert("按确认键开始游戏")
                ini();
            
            createSnake();
            createFood();
            move = setInterval("snakeMove()", 150);
            document.onkeydown = is;
            
            
        }
        function f1(){
            document.getElementById("bo").className="t1"
        }
        function f2(){
            document.getElementById("bo").className="t2";
        }
    </script>
</head>

<body onload="create()" id="bo" class="t1">
    <div class="btn">
        <button class="mibtn" onclick="run()">开始游戏</button>
    </div>
    <div id="map">
    </div>
    <div id="sore">
        <p id="ss">当前得分:0 最高分:0</p>
    </div>
    <div class="deng">
        <button class="open" onclick="f1()">游戏模式</button>
        <br>
        <button class="close" onclick="f2()">沉浸模式</button>
    </div>
</body>

</html>

游戏主体部分--地狱模式

别看这么长,其实他和普通模式相比只是多了几行代码,百分之九十九都是复制粘贴的。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .t2 {
            background-color: black;
        }

        .t1 {
            background-image: url("images/R-C\ \(1\).jfif");
            background-size: 650px 600px;
        }

        .btn {
            position: absolute;
            top: 11px;
            left: 320px;
            border: 4px solid black;

        }

        #sore {
            margin: 0 auto;
            width: 505px;
            height: 60px;
            background-color: black;
            border: 3px solid rgb(93, 170, 170);
        }

        .mibtn {
            height: 150px;
            width: 60px;
            background-color: yellowgreen;
            font-size: large;
            cursor: pointer;
        }

        /* 地图设计 */
        #map {
            /* 让地图居中显示 */
            margin: 0 auto;
            padding: 10px;
            width: 485px;
            height: 485px;
            background-color: black;
            border: 3px solid rgb(93, 170, 170);
        }

        /* 蛇身设计 */
        .snake {
            width: 20px;
            height: 20px;
            margin: 2px;
            background-color: brown;
            float: left;
        }

        /* 食物设计 */
        .food {
            width: 20px;
            height: 20px;
            margin: 2px;
            background-color: greenyellow;
            float: left;
        }

        .stone {
            width: 20px;
            height: 20px;
            margin: 2px;
            background-color: gray;
            float: left;
        }

        /* 地图小格子设计 */
        .ditu {
            width: 20px;
            height: 20px;
            margin: 2px;
            background-color: pink;
            float: left;
        }

        #ss {
            font-size: 24px;
            text-align: center;
            color: wheat;
            line-height: 10px;
        }

        .deng {
            position: absolute;
            top: 250px;
        }

        .open {
            width: 50px;
            height: 50px;
            cursor: pointer;
            border: 5px solid black
        }

        .close {
            width: 50px;
            height: 50px;
            cursor: pointer;
            border: 5px solid black;
        }
    </style>
    <script>
        // 地图数组
        var arr = new Array();

        // 横向和纵向小格子的数量
        var X = 20;
        var Y = 20;

        //蛇身数组
        var snakeX = [4, 5, 6];
        var snakeY = [2, 2, 2];

        //判断蛇身的标记数组
        var st = new Array();
        for (var i = 0; i < X; i++) {
            st[i] = new Array();
            for (var j = 0; j < Y; j++) {
                st[i][j] = 0;
            }
        }

        //石头数组,碰到石头会死
        var stoneX = [1, 6, 12, 2, 6, 18];
        var stoneY = [19, 4, 6, 2, 6, 9];

        //食物坐标
        var foodX = 9;
        var foodY = 3;

        //方向坐标
        var direct = 39;//方向 1-4对应上下左右四个方向

        //记录分数
        var sor = 0;
        var maxsor = 0;
        //创建地图
        function create() {
            var map = document.getElementById("map");
            //这里原本使用的是class,但是因为getElementsByClassName获取的到的是数组的形式,无法准确定位,所以改成ID;
            for (var y = 0; y < Y; y++) {
                arr[y] = new Array();
                for (var x = 0; x < X; x++) {
                    var mi = document.createElement("div");//创建一个div小格子;
                    mi.className = "ditu";
                    arr[y][x] = mi;
                    map.appendChild(mi);
                }
            }
        }

        // 创建蛇
        function createSnake() {
            var flag;
            for (var i = 0; i < snakeX.length; i++) {
                arr[snakeY[i]][snakeX[i]].className = "snake";
            }
        }

        function createStone() {
            for (var i = 0; i < stoneX.length; i++) {
                arr[stoneY[i]][stoneX[i]].className = "stone";
            }
        }
        function createFood() {
            flag = false;
            do {
                //math.random()随机返回一个float类型介于[0,1)的数
                foodX = parseInt(Math.random() * X);
                foodY = parseInt(Math.random() * Y);
                for (var i = 0; i < snakeX.length; i++) {
                    if (snakeX[i] == foodX && snakeY[i] == foodY) {//判断food和snake是否重合
                        flag = true;//如果重合需要重新随机生成一个food
                        break;
                    }
                }
            } while (flag);
            arr[foodY][foodX].className = "food";
        }

        function ini() {
            direct = 39;
            sor = 0;
            snakeX = [4, 5, 6];
            snakeY = [2, 2, 2];
            document.getElementById("ss").innerHTML = "当前得分:" + sor + "  最高分:" + maxsor;
        }
        //清除蛇,恢复原始状态
        function clearSnake() {
            for (var i = 0; i < snakeX.length; i++) {
                arr[snakeY[i]][snakeX[i]].className = "ditu";
            }
        }




        //蛇的运动
        function snakeMove() {
            //先清除再移动
            clearSnake();

            for (var i = 0; i < snakeX.length - 1; i++) {
                //蛇整体移动
                snakeX[i] = snakeX[i + 1];
                snakeY[i] = snakeY[i + 1];
            }
            //snakeX[]
            switch (direct) {
                case 37:
                    snakeX[snakeX.length - 1]--;
                    break;
                case 38:
                    snakeY[snakeY.length - 1]--;
                    break;
                case 39:
                    snakeX[snakeX.length - 1]++;
                    break;
                case 40:
                    snakeY[snakeY.length - 1]++;
                    break;
            }

            //先判断有没有撞到自己,然后再判断是否吃到了食物,否则食物会被误判成身体的一部分
            for (var i = 0; i < X; i++) {
                for (var j = 0; j < Y; j++) {
                    st[i][j] = 0;
                }
            }
            for (var i = 0; i < snakeX.length - 1; i++) {
                console.log(i + "  " + st[snakeX[i]][snakeY[i]] + "   " + snakeX.length);
                if (st[snakeX[i]][snakeY[i]] == 1) {

                    arr[foodY][foodX].className = "ditu";
                    if (sor > maxsor) {
                        maxsor = sor;
                        document.getElementById("ss").innerHTML = "当前得分:" + sor + "  最高分:" + maxsor;
                    }
                    clearInterval(move); //停止移動
                    alert("啊哦!撞到自己了!游戏结束");
                    return;
                }
                st[snakeX[i]][snakeY[i]] = 1;
            }
            //如果吃到食物了
            if (snakeX[snakeX.length - 1] == foodX && snakeY[snakeY.length - 1] == foodY) {
                //那么食物就成为了身体的一部分
                snakeX[snakeX.length] = foodX;
                snakeY[snakeY.length] = foodY;

                //分数改变
                sor++;

                sorr = sor + "";
                maxsorr = maxsor + "";
                document.getElementById("ss").innerHTML = "当前得分:" + sorr + "  最高分:" + maxsorr;
                //重新组合
                for (var i = snakeX.length - 1; i > 0; i--) {
                    snakeX[i] = snakeX[i - 1];
                    snakeY[i] = snakeY[i - 1];
                }
                //再次生成食物
                createFood();
            }

            //输掉游戏的情况

            //超出游戏边框的情况
            if (snakeX[snakeX.length - 1] < 0 || snakeX[snakeX.length - 1] > X - 1 || snakeY[snakeY.length - 1] < 0 || snakeY[snakeY.length - 1] > Y - 1) {

                //取消食物
                arr[foodY][foodX].className = "ditu";
                if (sor > maxsor) {
                    maxsor = sor;
                    document.getElementById("ss").innerHTML = "当前得分:" + sor + "  最高分:" + maxsor;
                }
                clearInterval(move); //停止移動
                alert("啊哦!撞到墙了!游戏结束");
                return;
            }
            for (var j = 0; j < snakeX.length; j++) {
                for (var i = 0; i < stoneX.length; i++) {
                    if (snakeY[j] == stoneY[i] && snakeX[j] == stoneX[i]) {
                        arr[foodY][foodX].className = "ditu";
                        if (sor > maxsor) {
                            maxsor = sor;
                            document.getElementById("ss").innerHTML = "当前得分:" + sor + "  最高分:" + maxsor;
                        }
                        console.log(snakeY[j]+"***"+snakeX[j]+"****"+stoneY[i]+"****"+stoneX[i]);
                        clearInterval(move); //停止移動
                        alert("啊哦!撞到石头了!游戏结束");
                        return;
                    }
                }
            }


            createSnake();


        }

        //判断用户输入的按键情况
        function is() {
            var key = event.keyCode;//获取按键

            //如果与原方向相反 不行
            if (direct == 37 && key == 39 || direct == 39 && key == 37 || direct == 38 && key == 40 || direct == 40 && key == 38)
                return;

            //符合要求
            else if (key >= 37 && key <= 40) {
                //用户按了某个方向键
                direct = key;
            }
            else {
                //其他按键
            }
        }

        //运行
        function run() {

            //alert("按确认键开始游戏")
            ini();

            createSnake();
            createStone();
            createFood();
            move = setInterval("snakeMove()", 80);
            document.onkeydown = is;


        }
        function f1() {
            document.getElementById("bo").className = "t1"
        }
        function f2() {
            document.getElementById("bo").className = "t2";
        }
    </script>
</head>

<body onload="create()" id="bo" class="t1">
    <div class="btn">
        <button class="mibtn" onclick="run()">开始游戏</button>
    </div>
    <div id="map">
    </div>
    <div id="sore">
        <p id="ss">当前得分:0 最高分:0</p>
    </div>
    <div class="deng">
        <button class="open" onclick="f1()">游戏模式</button>
        <br>
        <button class="close" onclick="f2()">沉浸模式</button>
    </div>
</body>

</html>

游戏主页入口 预览图

主体是一个登录按钮和轮播图 

轮播图里面写的是游戏规则。

每一张图都是我自己制作的,有需要可以私信我,这里就不放了,因为太多了。

游戏入口代码

1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="lun.css" type="text/css">
    <style>
        body{
            background-image: url("images/格子4.jfif");
            background-size:  1400px 1000px;
        }
        .header{
            width:100%;
            height:80px;
            background-color: rgba(0,0,0,0.8);
        }
        .header img{
            width:60px;
            height:60px;
            border-radius: 50%;
            border:4px solid greenyellow;
            margin-left: 40px;
            float:left;
        }
        .header p{
            color:wheat;
            float:left;
            position:absolute;
            top:18px;
            left:120px;
            font-size: 150%;
        }
        h1{
            text-align: center;
        }
        .moshi{
            margin-left:230px;
        }
        .moshi img{
            height:300px;
            width:300px;
            float:left;
            margin:50px;
            border:4px solid rgb(116, 172, 32);
        }
        .footer{
            height:100px;
            width:100%;
            background-color: rgb(67, 61, 61);
            position: absolute;
            top:1000px;
        }
    </style>
</head>
<body>
    <div class="header">
        <img src="images/头像1.jfif">
        <a href="test1.html" target="_blank"><p>点击注册</p></a>
    </div>
    <div class="wrap">
        <ul class="list">
            <li class="item active"><img src="images/教程1.png"/></li>
            <li class="item"><img src="images/教程2.png"/></li>
            <li class="item"><img src="images/教程3.jpg"/></li>
            <li class="item"><img src="images/教程4.jpg"/></li>
            <li class="item"><img src="images/地狱教程.jpg"/></li>
        </ul>
        <ul class="pointList">
            <li class="point active" data-index='0'></li>
            <li class="point" data-index='1'></li>
            <li class="point" data-index='2'></li>
            <li class="point" data-index='3'></li>
            <li class="point" data-index='4'></li>
        </ul>
        <button type="button" class="btn" id="goPre"><</button>
        <button type="button" class="btn" id="goNext">></button>
    </div>
    <div style="height:30px;"></div>
    <h1>选择模式开始游戏吧</h1>
    <div class="moshi">
        <a href="putong.html" target="_blank"><img src="images/QQ图片20221211211210_副本.png"></a>
        <a href="diyv.html" target="_blank"><img src="images/蛇_副本.png"></a>
    </div>
    <div class="footer">
        <p style="text-align:center; color:wheat; font-size: 120%;">©版权所属:咸蛋dd <br>Copyright2022.All Rights Reserved<br>联系我们:1761662039</p>
    </div>
    <script src="lun.js"></script>
</body>
</html>

2.css 

*{
    margin:0;
    padding:0;
    list-style:none;
}
img{
    width:800px;
    height:400px;
}
.wrap{
    width:800px;
    height:400px;
    position:relative;
    margin:0 auto;
    border:5px solid yellowgreen;
}
.list{
    width:700px;
    height:400px;
    position:relative;
}
.item{
    width:100%;
    height:100%;
    font-size:20px;
    opacity: 1;
    position:absolute;
    transition: all 2s;
}

.btn{
    width:50px;
    height:100px;
    top:150px;
    position:absolute;
    font-size:30px;
    border-radius: 30%;
    opacity: 0.5;
    border:0px;
    display:none;
    cursor: pointer;
    z-index: 100;
}
.item.active{
    z-index:99;
    opacity: 1;
}
#goPre{
    left:0px;
}
#goNext{
    right:0px;
    opacity: 1;
}
div:hover .btn{
    display:block;
}
.pointList{
    position: absolute;
    z-index: 1000;
    right:20px;
    bottom:20px;
}
.point{
    width:10px;
    height:10px;
    background-color:gray;
    border-radius: 100%;
    float:left;
    margin-left:15px;
    border-style:solid;
    border-width:2px;
    border-color:rgb(255, 255, 255, 0.6);
    cursor: pointer;
}
.point.active{
    background-color:rgb(0,0,0);
}

3.js 

var items=document.getElementsByClassName('item');
var points=document.getElementsByClassName('point');
var goPrebtn=document.getElementById('goPre');
var goNextbtn=document.getElementById('goNext');
var index=0;
var clearActive=function(){
    for(var i=0;i<items.length;i++){
        // console.log(i);
        points[i].className='point';
        items[i].className='item';
    }
}
var goIndex=function(){
    clearActive();
    items[index].className='item active';
    points[index].className='point active';
}
var goPre=function(){
    index--;
    if(index<0)
    index=items.length-1;
    goIndex();
}
goPrebtn.addEventListener('click',function(){
    goPre();
})
var goNext=function(){
    index++;
    console.log(index);
    if(index>=items.length)
    index=0;
    goIndex();
}
goNextbtn.addEventListener('click',function(){
    goNext();
})

for(var i=0;i<points.length;i++){
    points[i].addEventListener('click',function(){
        var pointIndex=this.getAttrabute('data-index');
        index=pointIndex;
        goIndex();
    })
}
setInterval ("goNext()","4000");

注册页面代码

预览:

<!DOCTYPE>
<html>
<html lang="ch">

<head>
	<title>注册</title>
	<script type="text/javascript">
		function fun() {
			alert("默认代表您同意《用户服务协议》和《隐私政策》");
		}
		function onclickfun() {
			var nameobj = document.getElementById("zcname");
			var nametext = nameobj.value;
			var namespanobj = document.getElementById("namespan");
			var natt = /^\w{3,8}$/;
			// 正则表达式,三到八位的数字字母下划线
			if (natt.test(nametext) != true) {
				namespanobj.innerHTML = "用户名不合要求";
			}
			var passobj = document.getElementById("zcpass");
			var passtext = passobj.value;
			var passspanobj = document.getElementById("passspan");
			var patt = /^\w{6,12}$/;
			// 六到十二的位的数字字母下划线
			if (patt.test(passtext) != true) {
				passspanobj.innerHTML = "密码不合要求";
			}
			var passrobj = document.getElementById("zcrpass");
			var passrtext = passrobj.value;
			var passrspanobj = document.getElementById("passrspan");
			if (passrtext != passtext) {
				passrspanobj.innerHTML = "密码不正确";
			}
			return false;
		}
	</script>
	<meta charset="utf-8">
	<style type="text/css">
		#lunkuo {
			position: absolute;/*设置相对定位*/
			top: 50%;
			/*顶部到元素*/
			left: 30%;
			width: 40%;
			height: 420px;
			margin-top: -200;
			/*边缘到底部*/
			background-color: #7eacec;
			text-align-last: center;
			border-radius: 30%;
			border-style: solid;
		}

		#lunkuo input {
			font-size: 20px;
			text-align: center;
			border-radius: 25px;
		}
	</style>
</head>

<body background="images/背景3.jpg" background-size="1400px 1400px " onload="fun()">
	<!-- onload指加载页面完成后发生 -->
	<div id="lunkuo">
		<h1>贪吃蛇账号-注册</h1><br />
		<form action="#" method="post">
			
			<svg t="1586146954028" class="icon" viewBox="0 0 1024 1024" version="1.1" p-id="2643" width="23" height="23">
				<path d="M904.4 346.2c-21.5-50.7-52.2-96.3-91.3-135.4-39.1-39.1-84.6-69.8-135.4-91.3C625.3 97.4 569.5 86.1 512 86.1s-113.3 11.3-165.8 33.5c-50.7 21.5-96.3 52.2-135.4 91.3-39.1 39.1-69.8 84.6-91.3 135.4C97.4 398.7 86.1 454.5 86.1 512c0 57.5 11.3 113.3 33.5 165.8 21.5 50.7 52.2 96.3 91.3 135.4 39.1 39.1 84.6 69.8 135.4 91.3 52.5 22.2 108.3 33.5 165.8 33.5s113.3-11.3 165.8-33.5c50.7-21.5 96.3-52.2 135.4-91.3 39.1-39.1 69.8-84.6 91.3-135.4 22.2-52.5 33.5-108.3 33.5-165.8-0.2-57.5-11.5-113.3-33.7-165.8zM770.7 770.7c-69.1 69.1-161 107.2-258.7 107.2s-189.6-38.1-258.7-107.2-107.2-161-107.2-258.7 38.1-189.6 107.2-258.7 161-107.2 258.7-107.2 189.6 38.1 258.7 107.2 107.2 161 107.2 258.7-38.1 189.6-107.2 258.7z"p-id="2644"></path>
				<path d="M618.9 552.8c47.3-33.6 78.2-88.7 78.2-151 0-102-83-185.1-185.1-185.1s-185.1 83-185.1 185.1c0 62.3 30.9 117.4 78.2 151-67.5 32.9-118.4 96-133.4 173.5-3.1 16.3 7.5 32 23.8 35.1 1.9 0.4 3.8 0.5 5.7 0.5 14.1 0 26.7-10 29.4-24.3 16.7-86.6 93-149.5 181.3-149.5 88.4 0 164.6 62.9 181.3 149.5 3.1 16.3 18.9 26.9 35.1 23.8 16.3-3.1 26.9-18.9 23.8-35.1-14.8-77.6-65.7-140.7-133.2-173.5zM512 276.7c69 0 125.1 56.1 125.1 125.1s-56.1 125-125.1 125-125.1-56.1-125.1-125.1 56.1-125 125.1-125z"p-id="2645"></path>
			</svg>
			<input type="text" name="username" id="zcname" placeholder="3-5位,数字字母下划线" /><span id="namespan" style="color: red;"></span><br /><br />
			<svg t="1586146995954" class="icon" viewBox="0 0 1024 1024" version="1.1" p-id="3403" width="23" height="23">
				<path
					d="M512 128a170.666667 170.666667 0 0 0-170.666667 170.666667v128h341.333334V298.666667a170.666667 170.666667 0 0 0-162.133334-170.453334L512 128z m298.666667 384H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666667v298.666666a42.666667 42.666667 0 0 0 42.666666 42.666667h597.333334a42.666667 42.666667 0 0 0 42.666666-42.666667v-298.666666a42.666667 42.666667 0 0 0-42.666666-42.666667zM512 42.666667a256 256 0 0 1 256 256v128h42.666667a128 128 0 0 1 128 128v298.666666a128 128 0 0 1-128 128H213.333333a128 128 0 0 1-128-128v-298.666666a128 128 0 0 1 128-128h42.666667V298.666667a256 256 0 0 1 246.4-255.829334L512 42.666667z"
					p-id="3404"></path>
			</svg>
			<input type="password" name="password1" id="zcpass" placeholder="密码:6-12位" /><span id="passspan"
				style="color: red;"></span><br /><br />
			<svg t="1586147123231" class="icon" viewBox="0 0 1024 1024" version="1.1" p-id="5214" width="23"
				height="23">
				<path
					d="M512 572.8c-48 0-88 40-88 88 0 41.6 28.8 76.8 67.2 84.8v75.2c0 11.2 8 19.2 19.2 19.2h3.2c11.2 0 19.2-8 19.2-19.2v-75.2c38.4-9.6 67.2-44.8 67.2-84.8 0-48-40-88-88-88z m0 134.4c-25.6 0-46.4-20.8-46.4-46.4s20.8-46.4 46.4-46.4 46.4 20.8 46.4 46.4-20.8 46.4-46.4 46.4z"
					fill="#3E3A39" p-id="5215"></path>
				<path
					d="M780.8 448h-3.2v-118.4c0-145.6-118.4-264-264-264s-264 118.4-264 264V448h-4.8C188.8 448 144 492.8 144 547.2v313.6c0 54.4 44.8 99.2 99.2 99.2h537.6c54.4 0 99.2-44.8 99.2-99.2V547.2c0-54.4-44.8-99.2-99.2-99.2z m-484.8-118.4c0-120 97.6-216 216-216s216 97.6 216 216V448h-432v-118.4zM832 860.8c0 28.8-22.4 51.2-51.2 51.2H243.2c-28.8 0-51.2-22.4-51.2-51.2V547.2c0-28.8 22.4-51.2 51.2-51.2h537.6c28.8 0 51.2 22.4 51.2 51.2v313.6z"
					fill="#3E3A39" p-id="5216"></path>
			</svg>
			<input type="password" name="password2" id="zcrpass" placeholder="请再次确认密码" /><span id="passrspan"
				style="color: red;"></span><br /><br />
			<svg t="1586147028498" class="icon" viewBox="0 0 1024 1024" version="1.1" p-id="4245" width="23"
				height="23">
				<path
					d="M971.52 412.672a49.152 49.152 0 0 0-20.096-39.616L540.992 73.024a49.792 49.792 0 0 0-57.984 0L72.64 373.056a48.64 48.64 0 0 0-13.568 15.552 16.576 16.576 0 0 0-4.16 4.736 18.816 18.816 0 0 0-1.792 13.952c-0.192 1.792-0.64 3.52-0.64 5.376v498.496c0 27.072 22.016 49.152 49.152 49.152h820.736a49.408 49.408 0 0 0 49.152-49.152V412.672zM504.832 102.848c2.048-1.536 4.544-2.368 7.168-2.368s5.12 0.768 7.168 2.368l403.2 294.72L512 632.192 100.8 398.208l404.032-295.36z m426.176 816.96a12.288 12.288 0 0 1-8.64 3.584H101.632a12.16 12.16 0 0 1-12.16-12.16V434.304l413.376 235.264a18.688 18.688 0 0 0 18.368 0l413.312-236.352 0.064 477.952a12.8 12.8 0 0 1-3.584 8.64z m0 0"
					fill="#333333" p-id="4246"></path>
			</svg>
			<input type="text" name="email" id="zcemail" placeholder="请输入邮箱" /><br /><br />
			<svg t="1586147067477" class="icon" viewBox="0 0 1024 1024" version="1.1" p-id="5047" width="23"
				height="23">
				<path
					d="M690.08 128l-356.448 0.128a23.168 23.168 0 0 0-22.72 23.392l0.256 721.056c0 12.864 10.24 23.36 22.752 23.392l356.48-0.16a23.104 23.104 0 0 0 22.72-23.392l-0.256-721.024A23.104 23.104 0 0 0 690.08 128z m-141.792 711.648c0 20.576-16.224 37.312-36.256 37.312-20 0-36.288-16.672-36.256-37.28-0.032-20.576 16.192-37.312 36.224-37.312 20.032-0.032 36.288 16.736 36.288 37.28zM695.36 229.504l0.192 530.528c0 12.864-10.24 23.392-22.72 23.392l-321.632 0.064a23.2 23.2 0 0 1-22.784-23.36l-0.16-530.528c0-12.832 10.24-23.36 22.752-23.36l321.632-0.096c12.48-0.032 22.72 10.464 22.72 23.36z"
					fill="" p-id="5048"></path>
			</svg>
			<input type="tel" name="phone" id="zcpgone" placeholder="请输入手机号" /><br /><br />
			<input type="image" src="images/立即注册.png" onclick="return onclickfun()">
			<!-- 这里使用return onclickfun是为了防止页面自动刷新 -->
			<!-- 原因是在  <form action="zhuche" method="post"> 执行onclick,所以每次页面都会刷新一次。 -->
		</form>

	</div>
</body>

</html>

以上就是关于贪吃蛇小游戏的全部内容了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端三小时用html和js写一个贪吃蛇游戏,非常简单带讲解,代码可直接用,功能完整 的相关文章

  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • 想要动态处理与分页相关的页码显示:ReactJS

    我有一些分页逻辑工作得很好 唯一的问题是我只能让它显示并固定数量的页面可供选择 现在我已经把它放到了 5 页 但我希望它能够根据总记录动态更改 假设我有 100 条记录 每页限制为 10 条 将有 10 页 现在我只能让它以这种方式显示 第
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • 如何停止TinyMCE删除span标签?

    在我的工作中 前一位程序员决定使用公司网站上精彩的TinyMCE 我遇到的数千个问题之一是 如果原文有的话span标签 当我按下退格键删除一行 p仅标签 全部span标签已从文本中删除 这个错误比另一个错误更具体 我可以删除anything
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • Vaadin 12 将对象传递给 JavaScript 函数:无法对类进行编码

    Vaadin 12 Kotlin 项目 In my myPage html我有JavaScript myObject redirectToCheckout sessionId 1111 2222 所以我需要调用javaScript函数red
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • 对顺序表中元素从小到大排序的算法

    编写一个对顺序表中元素从小到大排序的算法 函数接口如下 初始条件 线性表L已经存在 且元素个数大于1 操作结果 将L中的元素从小到大排序 Status ListSort Sq SqList L 然后 在main函数中调用ListSort S
  • 两个变量进行值交换的三种方式

    在很多应用场景中我们需要将两个变量的值进行交换 在这里总结了3种方式以及它们的利弊 第一种 可以定义一个额外的变量用于进行数值交换 这是种最普通但实用性又很强的方法 int a 1 int b 2 int c a c 1 a b a 2 b
  • IOC控制反转

    IOC控制反转 核心思想 控制反转思想的核心就是把对象的控制权的 反转 对象的控制权包括对象的创建 管理 调用等 在对象的生命周期的各个阶段进行相应的管理 由编码人员交还给 程序本身 去管理 这屏蔽了对象创建和管理等过程 使得程序员可以将精
  • 刷脸支付带给人们真切的便捷和科技感

    刷脸支付异军突起的背后 是国内人脸识别功能等人工智能新技术与完备的硬件基础 通讯基础和数据基础共同作用的结果 随着今年5G的大规模商用 5G必然为其提供更多应用可能性 让刷脸支付与不同平台 企业 场景中的协作创新更加完备 可以预见 当刷脸支
  • 嵌入式开发人员-经历汇总

    目录 1 迷茫与前行 2 嵌入式到底该怎么学 2 1 单片机开发 2 2 Linux应用开发 3 嵌入式技术学习路线分享 4 单片机实习经历 2021年秋招记录 怀科同学 申明本文旨在为嵌入式工作提供入门建议 搬运总结 也会有自己的经验总结
  • 图论-最短路问题

    首先明确一个代码实现时候的问题 为什么使用0x3f3f3f3f而不是0x7f7f7f7f来表示无穷大INF 虽然0x7f7f7f7f确实更大而且符号位是0 但是在最短路算法中 经常出现形如min a a b 的表达式 如果此时a与b都是IN
  • AI焦虑潮下,打工人的抵抗、转向、破局

    一股 AI让人下岗 的焦虑 正在蔓延 蔓延到了 这里 不同于区块链 元宇宙和web3 2023年的这股AI浪潮真正席卷了所有人 在大厂 大佬和投资人们为船票激烈角逐的同时 Midjouney ChatGPT Notion AI等工具的惊人效
  • 闲鱼副业是什么?闲鱼副业应该怎么做?

    闲鱼副业是什么 闲鱼副业应该怎么做 有人会问 闲鱼现在还能做吗 还能赚钱吗 对于这样的问题 我只想说 其实再不好的行业 都有赚钱的牛人 再赚钱的领域 同样也有挣不到钱的人 所以 对于赚钱 有一句话是这样说的 没有不赚钱的项目 只有不会赚钱的
  • GPT专业应用:撰写工作简报

    图片由Lexica 生成 输入 Workers working overtime 工作简报 作为一种了解情况 沟通信息的有效手段 能使上级机关和领导及时了解 掌握所属部门的政治学习 军事训练 行政管理等方面的最新情况 同时 能和同级单位 部
  • FLEX & BISON 联合使用

    flex是词法分析器 bison是语法分析器 基本原理就是flex解析出token后 让bison来使用 实际上 一般是先编写bison脚本 里面的token就是一个定义 没有实现 里面的yylex也是没有实现 只有定义 为什么先做biso
  • 路由(route) 交换机(switch)简介

    路由 route 1 数据包从源地址到目的地址所经过的路径 由一系列路由节点组成 2 某个路由节点为数据包选择投递方向的选路过程 它是连接因特网中各局域网 广域网的设备 一 工作原理 工作于OSI七层协议中的第三层 接收来自一个网络接口的数
  • 租赁行业如何将电子合同活用起来?

    在租赁行业 采取传统纸质合同签署租赁类合同 需要相关人员全部在场签订 效率低下 随着互联网行业的发展 租房 租车等各种租赁类业务逐渐迁移到了线上 互联网租赁平台也因此应运而生 但也带来了各种问题 身份核实困难 中介越过平台做私单 诈骗租赁物
  • 线性代数 --- LU分解(Gauss消元法的矩阵表示)

    Gauss消元法等价于把系数矩阵A分解成两个三角矩阵L和U的乘法 首先 LU分解实际上就是用矩阵的形式来记录的高斯消元的过程 其中 对矩阵A进行高斯消元后的结果为矩阵U 是LU分解后的两个三角矩阵中其中之一 U是一个上三角矩阵 U就是上三角
  • elasticsearch 5.x删除index/type

    elasticsearch 5 x删除index 在head插件中执行 DELETE ip port index 看到 acknowledge true 即为成功 elasticsearch 5 x删除type 在kibana界面 dev
  • java 参数明明名字都是对的为什么值传不过来

    java 参数明明名字都是对的为什么值传不过来 那是因为值的类型不一样 导致匹配不上 一个是long 一个是string
  • C++数据结构笔记(3)线性表的链式存储底层实现

    本系列的帖子并不包含全部的基础知识 只挑一部分最核心的知识点总结 着重于具体的实现细节而并非理论的知识点总结 大家按需阅读学习 链表的核心概念总结如下 1 链式存储不需要连续的内存空间 2 链表由一系列的结点组成 每个节点包含两个域 分别是
  • Unity获得当前场景所有物体

    前言 1 GameObject FindObjectsOfType typeof GameObject 只能获得所有active物体 2 GameObject FindObjectsOfTypeAll该方法已过时 解决方案 可以使用Reso
  • 定义一个Student类,成员变量有姓名、年龄;用数组存5个学生对象,并输出

    public class Student String name int age public Student String name int age this name name this age age public class tex
  • IntersectionObserver实现图片懒加载(超详细!)

    关于IntersectionObserver 官方上说明是提供了一种异步观察目标元素与其祖先元素或顶级文档视窗 viewport 交叉状态的方法 祖先元素与视窗 viewport 被称为根 root 具体的内容可以参考官网解释 https
  • 前端三小时用html和js写一个贪吃蛇游戏,非常简单带讲解,代码可直接用,功能完整

    目录 游戏主体部分 普通模式 游戏主体部分 地狱模式 游戏主页入口 预览图 游戏入口代码 1 html 2 css 3 js 注册页面代码 游戏实现很简单 只写游戏主体的话只要三小时就够了 话不多说 我们直接来看效果预览 转成gif图之后有