zoukankan      html  css  js  c++  java
  • H5实现俄罗斯方块(一)

    这几天一直忙于公司的项目,涉及到流程问题,(有时间会写成博客的)。。。一直没有更新。。。

    为了更加巩固js的基础,自己封装类似于JQuery的操作库来对dom进行操作。

    一:前度页面的绘制。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>俄罗斯方块</title>
        <link rel="stylesheet" href="css/index.css">
    </head>
    
    <body>
        <div class="start-container">
            <p><button id="btn-start">开始游戏</button></p>
            <p><button id="btn-setting">设置</button></p>
        </div>
        <div class="game-container">
            <div class="timer-panel">
                <div class="panel-header">
                    使用时间
                </div>
                <div class="panel-body">
                    <canvas id="timer"></canvas>
                </div>
            </div>
            <div class="help-panel">
                <div class="panel-body">
                    <p>↑ 翻转方块</p>
                    <p>↓ 加速下落</p>
                    <p>→ 向右移动</p>
                    <p>← 向左移动</p>
                </div>
            </div>
            <div class="level-panel">
                <div class="panel-header">
                    当前级别
                </div>
                <div class="panel-body">
                    <canvas id="level"></canvas>
                </div>
            </div>
            <div class="game-main-panel">
                <canvas id="c_game_main"></canvas>
            </div>
            <div class="next-panel">
                <div class="panel-header">
                    下一方块
                </div>
                <div class="panel-body">
                    <canvas id="nextshape"></canvas>
                </div>
            </div>
            <div class="setting-panel">
                <div class="panel-body">
                    <button id="btn-game-pause">暂停</button><br><br><button id="btn-game-setting">设置</button>
                </div>
            </div>
            <div class="score-panel">
                <div class="panel-header">
                    当前得分
                </div>
                <div class="panel-body">
                    <canvas id="score"></canvas>
                </div>
            </div>
            <div class="high-score-panel">
                <div class="panel-header">
                    最高得分
                </div>
                <div class="panel-body">
                    <canvas id="highscore"></canvas>
                </div>
            </div>
        </div>
        <div class="modal-dialog">
            <div class="modal-body">
                <label for="ck-sound">启用声音</label>
                <input type="checkbox" id="ck-sound">
                <br>
                <br>
                <button id="btn-dialog-close">关闭</button>
            </div>
        </div>
        <script src="vendor/howler.min.js"></script>
        <script src="js/config.js"></script>
        <script src="js/ResourceManager.js"></script>
        <script src="js/Canvas.js"></script>
        <script src="js/Keyboard.js"></script>
        <script src="js/Score.js"></script>
        <script src="js/Timer.js"></script>
        <script src="js/Level.js"></script>
        <script src="js/NextShape.js"></script>
        <script src="js/HighScore.js"></script>
        <script src="js/Block.js"></script>
        <script src="js/Shape.js"></script>
        <script src="js/Board.js"></script>
        <script src="js/Tetris.js"></script>
        <script src="js/app.js"></script>
    </body>
    
    </html>
    

     对应的css样式:

    *{
        box-sizing: border-box;
    }
    html,body,div{
        margin: 0;
        padding: 0;
    }
    
    body{
        background: #000;
        color: #fff;
    }
    
    .game-container, .start-container{
        position: relative;
        box-sizing: content-box;
        height: 600px;
         590px;
        margin: 0 auto;
        margin-top: 50px;
        border: 1px solid green;
    }
    
    .game-container{
        display: none;
    }
    
    .start-container{
        background: url(../images/bg_start.png);
        background-size: cover;
         390px;
        padding-top: 280px;
        box-sizing: border-box;
    }
    
    .start-container p{
        text-align: center;
        margin-top: 40px;
    }
    
    .start-container p button{
         200px;
        height: 50px;
        line-height: 50px;
        font-size: 20px;
        font-family: 微软雅黑;
        border: 0;
        border-radius: 50%;
        outline: none;
        cursor: pointer;
        background: lightblue;
    }
    
    .start-container p button:hover{
        background: lightcoral;
    }
    
    .game-main-panel{
        position: absolute;
        left: 100px;
        top: 0;
         390px;
        height: 600px;
        border-left: 1px solid green;
        border-right: 1px solid green;
    }
    .timer-panel{
        position: absolute;
        top: 0;
        left: 0;
         100px;
        height: 100px;
    }
    .help-panel{
        position: absolute;
        top: 150px;
        left: 0;
         100px;
    }
    .level-panel{
        position: absolute;
        left: 0;
        bottom: 0;
         100px;
        height: 100px;
    }
    .next-panel{
        position: absolute;
        right: 0;
        top: 0;
         100px;
        height: 100px;
    }
    .setting-panel{
        position: absolute;
        top: 150px;
        right: 0;
         100px;
    }
    .score-panel{
        position: absolute;
        right: 0;
        bottom: 120px;
         100px;
        height: 100px;
    }
    .high-score-panel{
        position: absolute;
        right: 0;
        bottom: 0;
         100px;
        height: 100px;
    }
    .panel-header{
        height: 30px;
        line-height: 30px;
        padding-left: 5px;
        font-size: 18px;
        color:#fff;
        background: lightsalmon;
    }
    .panel-body{
        text-align: center;
        line-height: 70px;
    }
    .help-panel .panel-body,
    .setting-panel .panel-body{
        line-height: normal;
    }
    .timer-panel, .next-panel, .score-panel{
        border-bottom: 1px solid green;
    }
    
    .modal-dialog{
        display: none;
    }
    
    .modal-dialog .modal-body{
        position: fixed;
        height: 300px;
         390px;
        top: 50%;
        margin-top: -150px;
        left: 50%;
        margin-left: -195px;
        background: #000;
        z-index: 100;
        text-align: center;
    }
    
    .modal-dialog::after{
        content: '';
        position: fixed;
        top:0;
        right: 0;
        bottom: 0;
        left: 0;
        background: rgba(255,255,255,0.3);
    }
    
    
    
  • 相关阅读:
    bestcoder 48# wyh2000 and a string problem (水题)
    Install OpenCV3.0 on Eclipse
    sql 优化 -- sql中的自定函数
    java基础知识总结1
    【Java】日志知识总结和经常使用组合配置(commons-logging,log4j,slf4j,logback)
    ESLint 配置
    Vue命名规范
    在vue中使用jsx语法
    vue中8种组件通信方式, 值得收藏!
    Vue+Express实现登录状态权限控制
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/6158445.html
Copyright © 2011-2022 走看看