zoukankan      html  css  js  c++  java
  • 别踩黑白块小游戏

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title>making by  Ankou</title>
        <style>
            /*思路:*/
           /*1.创建一个容器。400*600*/
            /*2.创建6行子div。*/
            /*3.每行有6列子div*/
            /*4.写一个方法,负责创建一行div,把一行四列,插入到容器中*/
            /*5.每30毫秒增加top值*/
            /*6.每往下挤100px,再创建一行div,插入容器的最前面。*/
            *{
                margin: 0px;
                padding: 0px;
                /*box-sizing: border-box;*/
            }
            #gameZone{
                 400px;
                height: 600px;
                background: #f1edba;
                border: 1px solid dimgrey;
                border-radius: 10px;
                margin: 20px auto;
                position: relative;
                box-shadow:2px 2px 6px 6px #330000,-2px -2px 6px 6px #330000;
                overflow: hidden;
            }
            #boardb{
                100%;
                height: 600px;
                position:relative;
                top: -100px;
            }
            .row{
                 100%;
                height: 100px;
            }
            .cell{
                 100px;
                 height: 100px;
                float:left;
            }
            .black{
                background-color: black;
                border-radius: 5px;
                box-shadow: 2px 2px 1px 1px #000011;
            }
            #score{
                height: 50px;
                 50px;
                line-height: 50px;
               background: #cc9900;
                text-align: center;
                position: absolute;
                right:280px;
            }
            #name{
                height: 50px;
                line-height: 50px;
                text-align: center;
                position: absolute;
                right:80px;
            }
            .color{
                background: darkgray;
                border-radius: 5px;
            }
            #p1{
                height: 50px;
                line-height: 50px;
                text-align: center;
                position: absolute;
                right: 330px;
                font-size: 25px;
            }
             #p2{
                 height: 50px;
                 line-height: 50px;
                 text-align: center;
                 position: absolute;
                 right: 0px;
                 left: 0px;
                 font-size: 30px;
                 color: red;
                 z-index: 9999;
                 display: none;
             }
           #btn1{
                position: absolute;
               background: #2B91AF;
                 50px;
                height: 30px;
                top:80px;
                right: 405px;
            }
            #btn2{
                position: absolute;
                background: #f1edba;
                 50px;
                height: 30px;
                top:120px;
                right: 405px;
            }
            #btn3{
                position: absolute;
                background:#b3d557;
                 60px;
                height: 30px;
                top:160px;
                right: 400px;
            }
        </style>
    </head>
    <body>
    <audio src="Westlife - Nothing's Gonna Change My Love For You.mp3"  id="music"   loop ></audio>
    <p id="p1">你的得分:</p>
    <h1 id="score">0</h1>
    <h1 id="name">级别:菜鸟</h1>
    <input type="button" value="开始"   id="btn1"/>
    <input type="button" value="暂停" id="btn2"/>
    <input type="submit" value="重新开始" id="btn3"/>
    <div id="gameZone">
        <p id="p2">游戏结束</p>
        <div id="boardb"></div>
    </div>
    <script>
        var timeId=null;
        var flag=0;//设置一个标识 1为进行时   2为暂停   3为游戏结束
        var speed=2;//这里设置一个setTop每次移动的速度。
        var  setTop;//设置一个全局变量
    // 封装一个通过id获取dom元素的函数
        function  $(id){
            return document.getElementById(id);
        }
    //   封装一个创建div的函数
       function  createDiv(className){
               var div=document.createElement("div");
               div.className=className;
               return div;
           }
    //  创建一个返回一个数组的函数,随机其中一个单元,值为"cell  black"  其他的值为"black".
        function  createArr(){
             var  arr=["cell","cell","cell","cell"]
             var  i=Math.floor(Math.random()*4);
                   arr[i]="cell black";
                 return arr;
         }
    //初始化,用这个函数创键相应的函数,就for循环,调用createDiv函数。
       function init(){
          for(var i=0;i<6;i++){//这里根据游戏的规则,得先告诉把最后一行空出来。
              createRow();
          }
       }
        //在这里得做一个判断的函数。
        function judge(e){
                    if(flag==3){//此时这个状态代表这师表  不能再点击了
                        return;
                    }
            if(e.target.className.indexOf("black")==-1){//如果这里出现了白块就让它结束
                               fail();
            }
            else{
                score();
                e.target.className="cell color";
                e.target.parentNode.pass=1;//添加这个属性,用来做标记,如果点击到了,就会有这个属性。
            }
        }
        //同时这里还得添加一个计分的函数。
        function score (){
            var newScore=parseInt($("score").innerHTML)+1;
            $("score").innerHTML= newScore;
            if(newScore%10==0){
                jiasu();
                if(newScore/10==1){
                    $("name").innerHTML="级别:新手";
                }
                else if(newScore/10==2){
                    $("name").innerHTML="级别:高手";
                }
                else if(newScore/10==3){
                    $("name").innerHTML="级别:大师";
                }
                else{
                    $("name").innerHTML="级别:无敌";
                }
    
            }
        }
    //    动态创建一行四列div.把创建行也封装成一个创建行的函数。
       function  createRow(){
                      var row=createDiv("row");
                     $("boardb").appendChild( row);
                            var classes= createArr();
                       for(var i=0;i<4;i++){
                           row.appendChild(createDiv(classes[i]));
                       };
                    if($("boardb").firstChild==null){
                        $("boardb").appendChild( row);
                    }
                   else{
                        $("boardb").insertBefore(row,$("boardb").firstChild);
                    }
    
            }
    //再封装一个动画函数。
         function  move(){
    //         根据top的变化而移动
    //          先获取boardb的标签
             var boardb=$("boardb");
    //         再获取他的top值
                 setTop=parseInt(window.getComputedStyle(boardb,null)["top"]);
             if(speed+setTop>0){//这里的条件一定要判断,如果正好跨过settop为0,这个值的话,就会出现断层。
                 setTop=0;
             }
             else{
                 setTop+=speed;
             }
                 boardb.style.top=  setTop+"px";
             if(setTop==0){
                 createRow();//为了能够跟之前一样,我们把top又得设置成-100px
                 boardb.style.top="-100px";//这里是一个难点。
    
                 if(boardb.childNodes.length==8){
                     deleteRow();//同时也要删除最后一个行。
                 }// 这里要判断一下,什么时候才删除。要等点击之后,然后插入了两行,最后一行离开游戏页面才删除。
             }
             else if(setTop==(speed-100)){//这里也是走了一步之后。
                 var rows= boardb.childNodes;//获得他的子节点
                 if((rows.length==7)&&(rows[rows.length-1].pass!==1)){//这里得好好注意啦,再最后点击到那一行了,就会添加pass属性,并等于1
                     //如果没点击到的话,就没有这个属性,同时就说明你输了。
                                               fail();//调用输这个函数
                 }
             }
         }
        //封装一个输了的函数,因为这个要多次用到。
        function  fail(){
            clearInterval(timeId);
            $("p2").style.display="block";
            $("music").src="失败退场歌曲可惜不是你-非诚勿扰-4234613.mp3";//注意这里换了歌曲之后,
            $("music").play();//你要重新让它播放才行
            $("btn1").onclick="return false";
            flag=3;
        }
    //    封装一个加速的函数
        function  jiasu(){
                  speed+=2;
            if(speed>=20){
                  alert("你作弊了");
            }
        }
    //加一个定时器函数
        function  clock(){
            clearInterval(timeId);
            timeId=setInterval(function(){
                //只能在容器的最前面追加div。同时在容器的最后面移除div。top值,每向下挤出100px。
    //    就创建一行div,然后插入容器的最前面。
                move();
            },30)
        }
        //删除最后一个节点函数
        function deleteRow(){
            $("boardb").removeChild($("boardb").lastChild);
        }
        init();
        $("btn1").onclick=function(){//这里要先点击开始按钮,所以注册点击屏幕点击事件需要放在点击按钮事件里面。
                 clock();//
            $("gameZone").onclick=function(e){  //在这里注册一个点击事件
               judge(e);//调用那个判断函数。
           }
            $("music").play();
        }
        $("btn2").onclick=function(){//同时点击按钮暂停按钮,同时能够取消点击视频事件。
            clearInterval(timeId);
            $("gameZone").onclick="return false";//定时器清除,再点击开始的时候能够恢复点击事件,同时开启定时器。
            $("music").pause();
        }
        $("btn3").onclick=function(){
            window.location.reload();// 重新刷新页面。
        }
    </script>
    </body>
    </html>
    

      

  • 相关阅读:
    1.python的Helloword
    java实现多个属性排序---按照实体的多种属性值进行排序(ComparableComparator/ComparatorChain)
    Spring Boot 2.X(一):入门篇
    Nginx开启Gzip压缩提升页面加载速度
    QQ第三方授权登录OAuth2.0实现(Java)
    Windows下IIS搭建Ftp服务器
    【Java】支付宝获取人脸采集认证的图片base64格式
    【SpingBoot】spring静态工具类注入问题
    【linux】Tomcat 安装
    【linux】jdk安装及环境变量配置
  • 原文地址:https://www.cnblogs.com/ankouyang/p/6027929.html
Copyright © 2011-2022 走看看