必威体育Betway必威体育官网
当前位置:首页 > IT技术

原生js做打地鼠游戏

时间:2019-07-16 15:12:09来源:IT技术作者:seo实验室小编阅读:86次「手机版」
 

打地鼠

在这里插入图片描述

学原生js的语法其实是容易的,最主要的练习逻辑思维。对于刚刚学完js的语法的我来说,写这个打地鼠游戏真的花费了我一整天的时间。整体感觉写出来的js代码,其实就是平时练习的一些小案例的代码拼起来的,js代码量比较少,最难的还是逻辑思维。练习逻辑思维是每个初学js都必备的。

建议:

在写一些逻辑思维较强的程序时,建议画思维脑图。可帮助写代码是思路清晰,避免混乱。

在这里插入图片描述

在这里插入图片描述

白线框是每个老鼠出现的位置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .game {
            width: 750px;
            height: 600px;
            margin: 0 auto;
        }
        .ground {
            position: relative;
            width: 100%;
            height: 600px;
            background: url("images/bg_canvas.png") no-repeat;
            cursor: url("images/hammer.png") ,auto;
        }
        .ground .score {
            width: 300px;
            height: 30px;
            position: absolute;
            top: 180px;
            right: 40px;
        }
        .score img {
            width: 80px;
            height: 30px;
            display: inline-block;
        }
        .score span {
            display: inline-block;
            height: 30px;
            line-height: 30px;
            color: #fff;
            font-size: 24px;
            margin-left: 10px;
            vertical-align: top;
        }
        .ground .mask {
            width: 140px;
            height: 125px;
            position: absolute;
            overflow: hidden;
            border: 1px solid #ccc;
            background-position: 50% 50%;
        }
        .mouse {
            width: 110px;
            height: 125px;
            position: absolute;
            top: 10px;
            animation: mousecreate 0.5s linear ;
        }
        @keyframes mousecreate {
            0%{
                top: 70px;
            }
            100% {
                top: 10px;
            }
        }
    </style>
</head>
<body>
    <p class="game">
        <p class="ground" id="_ground">
            <p class="score">
                <img src="images/score.png" alt="">
                <span></span>
            </p>          
        </p>
    </p>
</body>
</html>
<script>
    // 获取元素 ,设置全局变量
    var _ground = document.getelementbyid("_ground");
    var Mask = [];// 存储mask遮罩
    var Mouse = [];// 存储老鼠
    var score = 0;
    var life = 10;
    var gemeTimer = null;
    var maxMouseCount = 2;//初始时,老鼠出现的个数不超过2个
    var coordinate = [{x: 130, y:173}, {x: 320, y:171}, {x: 515, y:175}, {x: 105, y: 265}, {x: 320, y: 256}, {x: 522, y: 256}, {x: 96, y: 350}, {x: 320, y: 355}, {x: 540, y: 358}];//洞口坐标
    /*
        1:鼠标按下ground,鼠标锤子改变,鼠标弹起锤子恢复
        2:创建洞穴和遮罩
        3:创建老鼠 
        4:老鼠出现
        5:老鼠消失 -> 1: 不敲打自己消失 2: 敲打盒子消失
    */

    // 1:鼠标点击ground,鼠标锤子改变
    _ground.onmousedown = function() {
        _ground.style.cursor = "url('images/hammer2.png'),auto";
    }
    _ground.onmouseup = function() {
        _ground.style.cursor = "url('images/hammer.png'),auto";    
    }
    init();// 初始化函数
    // 2:创建洞穴和遮罩
    function createMask() {
        for(var i = 0; i < coordinate.length; i++)
        {
        var mask = document.createElement("p");
        mask.className = "mask";
        mask.style.left = coordinate[i].x + "px";
        mask.style.top = coordinate[i].y + "px";
        mask.index = i;
        var maskimg = document.createElement("p");
        maskimg.className = "mask";
        maskimg.style.zIndex = i * 2  + 1; // 遮罩的层级大于老鼠的层级,并且保证上一层的遮罩层级不能大于下一层老鼠的层级,否则会遮住老鼠的头部 
        maskimg.style.backgroundImage = "url('images/mask"+i+".png')";
        mask.APPendChild(maskimg);// 添加遮罩层
        Mask[i] = mask;
        _ground.appendChild(mask);// 添加洞穴
        mask.onclick = function() {
            disappear(this.index,true); // (被敲打的mask的index,被敲打)
        }
        }
    }

    // 3: 创建老鼠
    function createMouse(i) {
        // 随机选择老鼠
        var picnum = Math.floor(Math.random()*4);// 从0-4产生一个随机数
        var mouse = document.createElement("p");
        mouse.className = "mouse";
        mouse.num = picnum;
        mouse.style.zIndex = i * 2;
        mouse.style.backgroundImage = "url('images/mouse"+picnum+".png')";
        Mouse[i] = mouse;// 向老鼠数组里面添加老鼠
        Mask[i].appendChild(mouse); // 向洞穴里面添加老鼠

        // 每个老鼠都有一个消失的定时器
        var timer = settimeout(function(){
            disappear(i,false);
        },2000);
        mouse.timer = timer;

    }

    // 4: 老鼠出现
    function genarateMouse() {
        var num = Math.floor(Math.random()*coordinate.length);// 随机产生一个洞穴位置
        if (Mouse.filter(function (item){
        return item;
    }).length < maxMouseCount && Mouse[num] == null) {
        createMouse(num);
    }
    }

    // 5: 老鼠消失  --> 1: 老鼠自动消失 2: 老鼠在被敲打之后消失
    function disappear(index,isHit) { // isHit是否被敲打,布尔值
        if(Mouse[index] != null)
        {
            Mouse[index].style.top = "70px";
            Mouse[index].style.transition  = "top 0.5s";
            if(isHit)// 如果被敲打
            {
                clearInterval(Mouse[index].timer);// 清除老鼠本身的定时器
                score += 10;
            }
            else
            {
                life -= 1;
            }
             setTimeout(function(){
                if(Mouse[index])
                {
                Mask[index].removeChild(Mouse[index]);
                }
                Mouse[index] = null;
            },500);
        }
    }

    function init() {
        createMask();
        gameTimer = setInterval(function(){
            genarateMouse();
            if(life <= 0)
            {
                clearInterval(gameTimer);
                alert("游戏结束,您的得分是" + score);
            }
            document.getElementsByClassName("score")[0].getElementsByTagName("span")[0].innerHTML =  score + ",生命:"+ life;
            maxMouseCount = score / 100 + 1;// 分数每增加到100, 允许老鼠出现的数目加1
        },50);
       
    }
</script>

相关阅读

在淘宝游戏交易平台如何购买?

在淘宝游戏交易平台如何购买? 第一步:找到宝贝后,点击立即购买。 第二步:在接下来的页面中填写收货信息,请务必认真填写,否则将无法收

6000元左右i7-7700搭配GTX1060游戏电脑主机配置单推荐

最新一期的Steam游戏周销量排行榜(5.1-5.7)刚刚出炉,《绝地求生:大逃杀》再次毫无悬念地夺冠,排在第2-5位的分别是《掠食》、《CS:Go》

Java打飞机小游戏(附完整源码)

#写在前面技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习。java确实不适合写桌面应用,这里只是

虎牙直播、斗鱼TV、战旗TV游戏直播App竞品分析报告

一、产品行业概况游戏直播定义:以视频内容为载体,以电子竞技比赛或电子游戏为素材,主播实时展示/解说自己/他人的游戏过程或游戏节目

“传奇”小游戏难续传奇

做微信小游戏开发的创业者很多,大家都认准了小游戏行业是一个潜力股,但是在当前同质化、抄袭状况严重的市场环境下,小游戏创业者要经

分享到:

栏目导航

推荐阅读

热门阅读