SuperBall開發總結(五)-優化項目結構

是的,為了豐富我們的游戲內容,是時候規劃一下我們的項目結構了。

    SuperBall
     ├──index.html     //游戲顯示畫面
     ├──js
     ├   ├─vlues.js    //游戲使用數值,參數
     ├   ├─gameDb.js   //游戲webSQL
     ├   ├─suport.js   //輔助函數
     ├   ├─main.js     //主邏輯函數
     ├   ├─renders.js  //渲染函數
     ├   ├─checkHit.js //碰撞檢測函數
     ├   └─update.js   //狀態更新函數           
     ├──css
     ├──images         //游戲圖片資源
     └──sounds         //游戲聲音資源

JavaScript文件順序

    <head>
        ...
        <title>SuperBall</title>
        <link rel="stylesheet" href="css/style.css" />
        <script src="js/values.js"></script>
        <script src="js/gameDB.js"></script>
        ...
    </head>

values.js文件要在第一個引用。

這里文件載入的順序之所以講究,原因在于我們的JavaScript代碼雖然在不同的文件中,但是瀏覽器確實順序解釋,所以當我們還沒有涉及到JavaScript的MVC設計理念時,我們的所有JavaScript代碼實際上是在一個命名空間的,所以必然要先定義變量或常量再使用。

values.js -- 全局變量,游戲參數

  1. 一些游戲常量,例如游戲方塊顏色數組

     var BLOCK_COLORS = ["grey", "orange", "blue", "purple", "green"];
    
  2. 游戲配置參數,例如游戲畫面(canvas)的大小,小球的屬性

     //canvas
     var CANVAS_HEIGHT = 500;
     var CANVAS_PADDING = 30;
     
     //ball
     var SUPER_BALL_R = 10; 
     var BALL_X = CANVAS_HEIGHT/2;
     var BALL_Y = CANVAS_HEIGHT * 0.7;
     ...
    
  3. 游戲運行時的狀態變量

    1. UI變量

       //game score board
       var gameBestTimeBoard;
       var gameBestHitNumBoard;
       ... 
      
    2. 游戲狀態變量

       var nowGameTime = 0;
       var gameRuntimeInterval,
       ...
      
    3. 小球變量

       var ball = {x : BALL_X, y : BALL_Y, a : 2, vx : BALL_VX, vy : BALL_VY, color : colors[4], speed_up : false};
      
    4. ...

mian.js -- JavaScript中控制入口

window.onload = function(){

        initGameRes();

        //select the develop mode
        developMode(PLAY);

        document.onkeydown = checkKeyDown;

        gameRuntimeInterval = setInterval(
            function(){
                gameTime++;
            },
            10
        );

        gameBeginning();

    }


    function gameBeginning(){
        ...
    }

    function countDown(){
        ...
    }

    function gameStart(){
        ...
    }

    function gamePause(){
        ...
    }

    function gameWin(){
        ...
    }

    function gameOver(type, words){
        ...
    }

    function gameBug(){
        ...
    }


    function render(context){
        context.clearRect(0, 0, context.canvas.width, context.canvas.height);

        renderBlocks(context);

        renderBall(context);

        ...


    }

    function checkHit(){

        checkGameState();

        checkHitBorder();

        ...
    }


    function update(){

        updateBlocks();

        updateSuperBall();

        ...

    }

    function checkKeyDown(event){
        switch (event.keyCode) {
            case 37:
                board.x -= 20;
                break;
            ...

            default:break;
        }
    }

從這個入口文件可以看出基本上控制整個游戲的游戲狀態

  1. 初始化UI組件
  2. 設置運行模式、調用鍵盤監聽
  3. 設置游戲運行時循環,游戲時間基準
  4. 進入游戲開場狀態
  5. renders.js checkHit.js update.js中的各個函數整合進render() checkHit() update()三個函數中方便游戲循環調用

support.js -- 輔助函數

  1. 一些需要計算具體數值的函數

     //get board.x
     function getBoardX(){
         ...
     }
    
     //get board y
     function getBoardY(){
         ...
     }
     
     ...
    
  2. 設置屬性的函數

     function setGameResultData(){
         ...
     }
     
     function initGameAttr(){
         ...
     }
     
     function initGameRes(){
         ...
     }
     
     ...
    
  3. UI動態效果的函數

     function showBossDialogSoon(left, words){
         ...
     }
     
     function showGameResultBoard(){
         ...
     }
     
     ...
    

gameDB -- 游戲比分存儲

    superBallDB = openDatabase("super_ball_db", "1.0", "game_score_table", 1024 * 1024 * 5);
    
    ...
    
    gameScoreFunction.game_score_functions = function(){}
    
    ...
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容