zoukankan      html  css  js  c++  java
  • 用javascript做别踩白块游戏2

    这一次做一个好一点的,要求黑块自动下落,且速度逐渐加快

    <!DOCTYPE html>
    <html>
    <head>
    <!-- 禁用缩放功能 -->
    <meta charset="UTF-8" name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>别踩白块2</title>
    
    <style type="text/css">
        table{
            border: solid 5px;
            border-spacing: 0px;
            border-collapse: 0px;
            margin: auto;
            background-color: #FFF;
        }
        td{
            width: 80px;
            height: 100px;
            border: solid 1px;
        }
        
        .bgcolor{
            background: black;
        }
        
        #tr6 td{
            height: 0px;
            border: 0px;
        }
    </style>
    </head>
    <body style="background: #008694; margin: 0px;">
        <div id="div1">
        <table>
            <caption style="font-size: 20px;">分数:<input id="text1" type="text">
            别踩白块
            </caption>
            <tr>
                <td></td><td></td><td></td><td></td>
            </tr>
            <tr>
                <td></td><td></td><td></td><td></td>
            </tr>
            <tr>
                <td></td><td></td><td></td><td></td>
            </tr>
            <tr id="tr5">
                <td></td><td></td><td></td><td></td>
            </tr>
            <tr>
                <td onmousedown="onMouthEvent(this)"></td>
                <td onmousedown="onMouthEvent(this)"></td>
                <td onmousedown="onMouthEvent(this)"></td>
                <td onmousedown="onMouthEvent(this)"></td>
            </tr>
            <tr id="tr6">
                <td></td><td></td><td></td><td></td>
            </tr>
        </table>
        </div>
        <div style="margin: auto;  340px; height: 40px; text-align: center;">
            <b style="font-size: 30px;">点击黑块开始游戏</b><br>
            注:方块的下落速度会越来越快,还没有人能突破300分,是时候表演真正的技术了!!!
            <!-- <input style=" 150px; height: 40px;" type="button" value="开始" onclick="run()">
            <input style=" 150px; height: 40px;" type="button" value="暂停" onclick="clearInterval(x)"> -->
        </div>
        
    <script type="text/javascript">
        var inti;
        var count = 0;
        var oTextNode = document.getElementById("text1");
        function run(count) {
            var inti = setInterval(moveDown, 400-count*10);
            return inti;
        }
        
        //为方块初始化随机黑块
        function getShuiJiKuai(){
            var oTrNode = document.getElementsByTagName("tr");
            for(var i = 0; i < oTrNode.length - 1; i++){
                var randonNum = Math.floor(Math.random()*4);
                (oTrNode[i].children[randonNum] || oTrNode[i].childNodes[randonNum]).className = "bgcolor";
            }
        }
        getShuiJiKuai();
        
        function moveDown() {
            var oTrNode = document.getElementsByTagName("tr");
            //向下移动
            for(var i = oTrNode.length - 1; i > 0; i--){
                for(var j = 0; j < 4; j++){
                    (oTrNode[i].children[j] || oTrNode[i].childNodes[j]).className = (oTrNode[i-1].children[j] || oTrNode[i-1].childNodes[j]).className;
                    if((oTrNode[5].children[j] || oTrNode[5].childNodes[j]).className == "bgcolor"){
                        endGame();
                        return ;
                    }
                }
            }
            
            //第一行清空
            for(var k = 0; k < 4; k++){
                (oTrNode[0].children[k] || oTrNode[0].childNodes[k]).className = "";
            }
            
            //第一行赋值
            var randonNum = Math.floor(Math.random()*4);
            (oTrNode[0].children[randonNum] || oTrNode[0].childNodes[randonNum]).className = "bgcolor";
        }
        
        
        
        
        function onMouthEvent(event) {
            var oTrNode = event.parentNode;
            
            //如果点击的是黑色方块
            if(event.className == "bgcolor"){
                clearInterval(inti);
                this.inti = run(count);
                event.className = "";
                count++;
                oTextNode.value = count;
                
            }else{
                for(var k = 0; k < 4; k++){
                    if((oTrNode.children[k] || oTrNode.childNodes[k]).className == "bgcolor"){
                        endGame();
                        return ;
                    }
                }
                
            }
            
            //最后一行有黑块没被点到
            /* var oTrNode = document.getElementsByTagName("tr");
            for(var y = 0; y < 4; y++){
                if(oTrNode[4].children[y] || oTrNode[4].childNodes[y]).className == "bgcolor"){
                    alert("游戏结束,你的分数为:"+count);
                }
            } */
            
        }
        
        function endGame() {
            clearInterval(inti);
            alert("游戏结束,你的分数为:"+count);
            count = 0;
            oTextNode.value = count;
        }
        //onMouthEvent();
    </script>
    </body>
    </html>

    响应点击事件并没有用onclick而是用的onmouthdown,onclick是鼠标点击按下并松开才响应,而onmouthdown在鼠标点击按下时就响应了,他的响应速度更快

    手感不太好,尤其是用手机测试的时候,我想到的几个解决办法
    1:添加一块公共点击面积,即两列之间添加一个公共区域,避免点击在线条中间的时候无效,更易于增强点击的精确性,
    2:增加向下滑动时各行之间的衔接性,一次只下移一小段距离

  • 相关阅读:
    Java基础知识强化之IO流笔记39:字符流缓冲流之复制文本文件案例01
    阿里云服务器绕过25端口发邮件
    springboot在lunix后台启动,退出账号也不关闭
    创建Maven项目出错 pom出错
    corn表达式 经典
    开发微信公众号基本配置参数错误
    Spring与ActiveMQ整合
    log4j.properties 打印到控制台 写法
    如何在spring环境中做单元测试
    添加jar包到本地Maven仓库
  • 原文地址:https://www.cnblogs.com/twoice/p/8386608.html
Copyright © 2011-2022 走看看