• 原生js打地鼠


    我们要做的是一个打地鼠的游戏,只用原生js

    1.导入需要的图片

    2.编写页面css样式demo.css

    *{
        margin:0;
        padding:0;
    }
    .game{
        position: relative;
        750px;
        height:600px;
        margin:100px auto;
    }
    .ground{
        position: relative;
         750px;
        height:550px;
        background:url('./images/bg_canvas.png');
        cursor:url("./images/hammer.png"),auto;
    }
    .score{
        position: absolute;
        300px;
        height:30px;
        left:420px;
        top:180px;
    }
    .live{
        position: absolute;
        top:180px;
        right:100px;
    }
    .score span,
    .live span{
        color:#fff;
        line-height:30px;
        font-size:24px;
        vertical-align: top;
        margin-left:10px;
    }
    
    .mask{
        position: absolute;
        140px;
        height:125px;
        /* border:1px solid #000; */
        overflow: hidden;
    }
    .mouse{
        position: absolute;
        110px;
        height:110px;
        overflow: hidden;
        left:0;
        top:20px;
        background-position: 50% 50%;
        background-repeat: no-repeat;
        transition: top 0.5s;
        overflow: hidden;
    }
    
    @keyframes moveTop {
        0% {
            top: 70px;
        }
        100% {
            top: 20px;
        }
    }

    编写页面效果

    编写js(demo.js)

    var ground;
    // 地鼠出现位置坐标
    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}];//洞口坐标
    // 地鼠出现定时器
    var gametimer;
    var mask = [];
    var mouse = new Array(9);
    // 最大地鼠数
    var maxCount = 2;
    // 分数  点中一个加10
    var score = 0;
    // 生命 自由下落一个减一
    var life = 10;
    window.onload = function(){
        ground = document.getElementsByClassName('ground')[0];
        ground.onmousedown = function(){
            ground.style.cursor = 'url("./images/hammer2.png"), auto'
        };
        ground.onmouseup = function(){
            ground.style.cursor = 'url("./images/hammer.png"), auto'
        };
        init();
    }
    
    function init(){
        // 创建地鼠出现位置
        createMask();
        // 每隔一段时间出现一个地鼠
        gameTimer = setInterval(function(){
            // 创建每一个地鼠
            // createMouse();
            controlMouse();
            // 每次生成后判断是否结束
            if(life <= 0){
                clearInterval(gameTimer);
                alert('游戏结束:得分:' + score);
            }
            document.getElementsByClassName('scoreCon')[0].innerHTML = score;
            document.getElementsByClassName('life')[0].innerHTML = life;
            // 最大数++
            maxCount = score / 100 + 1;
        },50);
    }
    
    function createMask(){
        // 根据坐标生成洞穴位置
        for(var i = 0; i < coordinate.length;i ++){
            // 创建div  将来插入地鼠
            var temp = document.createElement('div');
            temp.classList.add('mask');
            // 确定每一个地鼠巢穴位置
            temp.style.left = coordinate[i].x + 'px';
            temp.style.top = coordinate[i].y + 'px';
            
            // 创建草坪遮盖
            var img = document.createElement('div');
            img.classList.add('mask');
            // 设置遮罩层背景  每一个洞穴背景不一样
            img.style.background = 'url("./images/mask'+i+'.png")';
            // 控制层级  草坪在地鼠身上
            // img.style.zIndex = 100;
            img.style.zIndex = i * 2 +1;
    
            // 将元素放置在数组中
            mask[i] = temp;
            temp.appendChild(img);
            // 将创建div插入父级
            ground.appendChild(temp);
            // 记录点击的位置
            temp.index = i;
            // 点击每一个消失
            temp.onclick = function(){
            
                disappear(this.index,true);
            }
        }
    }
    
    // 创建地鼠
    function createMouse(i){
        // 随机的背景图片
        var num = Math.floor(Math.random() * 4);
        mouse[i] = num;
        var temp = document.createElement('div');
        temp.classList.add('mouse');
        // 设置地鼠出现的背景图片
        temp.style.background = 'url("./images/mouse'+num+'.png")';
    
        // 每一个地鼠需要出现在指定的位置  在对应洞穴上出现一只地鼠
        // 用两个数组对应  一个存放着洞穴  一个存放地鼠
        mouse[i] = temp;
        temp.style.zIndex = i * 2 ;
        temp.style.animation = "moveTop 0.5s linear";
    
        mask[i].appendChild(temp);
        var timer = setTimeout(function(){
            disappear(i,false);
        },2000);
        temp.timer = timer;
    }
    // 控制生称帝书的条件
    function controlMouse(){
        // 随机出现位置  并且同时出现的地鼠个数不大于最大个数  同一个位置不能出现两只
        var num = Math.floor(Math.random()*9);
        if(mouse.filter(function (item){
            return item;
            // 限制出现的最大数和出现的位置
        }).length < maxCount && mouse[num] == null){
            createMouse(num);
        }
    }
    
    // 消失函数
    function disappear(i,isHit){
        if(mouse[i]){
            // 无论是否被打均缩回洞里  通过改变top值
            mouse[i].style.top = '70px';
            // 被打 改变样式 添加打懵圈的小星星 改变背景图片
            if(isHit){
                // 打中分数加十
                score += 10;
                // 创建包含懵圈小星星的元素
                var bomp = document.createElement('img');
                bomp.classList.add('mouse');
                bomp.style.top = '-40px';
                // 添加gif动图为背景显示
                bomp.src = "./images/bomb.gif";
                // 替换掉当前老鼠的图片
                mouse[i].style.backgorund = 'url("./images/hit'+mouse[i].num +'")';
                // 插入到当前点击的位置
                mouse[i].appendChild(bomp);
                // 清除自身的下落
                clearTimeout(mouse[i].timer);
            }else{
                // 没有被打  自己缩回生命减一
                life -= 1;
            }
            setTimeout(function(){
                if(mouse[i]){
                    mask[i].removeChild(mouse[i]);
                }
                mouse[i] = null;
            },500);
        }
    }

     接下来我们看看最后效果

     

     游戏规则是,每砸中一个地鼠分数加10,少砸一个地鼠生命减1,生命为0计算总分数,地鼠会随机出现,砸的越快出现的也就越快,

    需要测试效果的,复制代码就可以了。

  • 相关阅读:
    C-Lodop 非典型应用
    这里有个坑---js日期格式yyyy-MM-dd与yyyy/MM/dd
    这里有个坑---[NotMapped]不要忘了加
    这里有个坑---entity为null的问题
    数据库优化小技巧总结
    前端优化小技巧总结
    前端日志探讨二
    25.密码学知识-对称加密-2——2019年12月19日
    24.mongodb可视化工具部署——2019年12月19日
    22.Express框架——2019年12月19日
  • 原文地址:https://www.cnblogs.com/xmf3628/p/11302617.html
Copyright © 2020-2023  润新知