Javascript 俄羅斯方塊 遊戲代碼解釋!(1)

來源:互聯網
上載者:User

Javascript 俄羅斯方塊 遊戲代碼解釋!(1)

本俄羅斯方塊代碼採用 JavaScript 指令碼代碼寫成,簡單易懂;

全代碼採用靜態類及靜態變數成員組成;

全指令碼通過實現代碼全域配置 OLSFK.Options = {...}

定義方塊起始座標及定義各自的旋轉點;

從初始化俄羅斯方塊介面開始,再監聽鍵盤事件;以及左右,向下及旋轉動作判斷,重新渲染方塊位置;

判斷是否消行,以及相應的加級判斷,執行速度,加分操作來執行;

最後以判斷是否當前層級大於所定義的最大層級來判斷是否結束;

代碼說明講解

 
  1. OLSFK.Options = { //相關參數  
  2.     width:12,//介面橫向方塊數  
  3.     height:20,//介面縱向方塊數  
  4.     boxWidth : '16px',  
  5.     curLevel:1,  
  6.     speed : 1000, //setInterval,setTimeout  
  7.     direct : { //可以設定是A S D W, 還是← ↓ →   
  8.         Down: 40 , /*run speed*/ 
  9.         Left: 37,  
  10.         Right: 39,  
  11.         Rotate: 38  
  12.     },  
  13.     Move:true,//是否正在移動  
  14.     Eventing:false,  
  15.     Levels: {  
  16.         1:1000,  
  17.         2:900,  
  18.         3:800,  
  19.         4:700,  
  20.         5:600,  
  21.         6:500,  
  22.         7:400,  
  23.         8:300,  
  24.         9:200,  
  25.         10:100  
  26.     },  
  27.     curBlock:4, //當前移動的圖形名稱  
  28.     nextBlock:0,  
  29.     GampMap:new Object(),  
  30.     Timer:null,  
  31.     deline:0,  
  32.     Score:0,  
  33.     Deling:false,  
  34.     Start:false,  
  35.     lineNum:10, //刪除幾行了,加級  
  36.     ScoreNum:40 //消一行加分  

direct 表示 使用鍵盤方位鍵來操作方塊的移動方向;

使用哪種方向鍵按自由喜歡配置,比如字母鍵的A, S, D, W; 或右邊小數字鍵台的數字鍵各自的鍵盤編碼;

比如 上(旋轉)、下、左、右 方向鍵的編碼分別為:38、40、37、39;

Levels:表示層級配置,本配置共分為10級,每個層級所對應的下落速度,即定時執行間隔;

curBlock:表示當前活動的方塊;

nextBlock:表示接下來執行的方塊索引,並顯示介面右上方的預覽框中;

GampMap:用於儲存在根據定義行列數形成的遊戲表格中儲存每個格的資料資訊;

OLSFK.Options.GampMap[x+'_'+y] = 0;

對象表格為: id: "box_"+x+"_"+y;

初始化資料為 ‘0’;  表示該表格還未佔用;當有佔用時,設定值為 ‘1’;

Timer:為定時執行器;setTimeout 定時執行方塊下落的的頻率;定時時間越小,速度越快;

Deling:當正在執行消行操作時,下次暫不顯示並下落;

lineNum:表示消超過 10 行,加一級;

ScoreNum:表示每消一行所加的分數;

 
  1. OLSFK.ReItems = function (cur){ //key旋轉點  
  2.       
  3.     switch (cur)  
  4.     {  
  5.         case 1:  
  6.             OLSFK.Items[1] = {//長塊 LongBlock  
  7.                                 1:{x:4,y:0},  
  8.                                 2:{x:5,y:0},  
  9.                                 3:{x:6,y:0},  
  10.                                 4:{x:7,y:0},  
  11.                                 5:{x:5,y:0} //旋轉點  
  12.                             };  
  13.             break;  
  14.                         //....  
  15.         }  

該方法用於恢複方塊的初始設定;

 
  1. OLSFK.Next = { //key旋轉點  
  2.     //長塊 LongBlock  
  3.     1: {  
  4.         1:{x:0,y:1},  
  5.         2:{x:1,y:1},  
  6.         3:{x:2,y:1},  
  7.         4:{x:3,y:1}  
  8.     },  
  9.         //...  

為不了不與遊戲方塊的設定衝突,獨立出來下次隨機方塊的對象配置;

 
  1. OLSFK.Items = { //key旋轉點  
  2.     //長塊 LongBlock  
  3.     1: {  
  4.         1:{x:4,y:0},  
  5.         2:{x:5,y:0},  
  6.         3:{x:6,y:0},  
  7.         4:{x:7,y:0},  
  8.         5:{x:5,y:0}  
  9.     },  
  10.     //方塊Box  
  11.     2: {  
  12.         1:{x:4,y:0},  
  13.         2:{x:5,y:0},  
  14.         3:{x:4,y:1},  
  15.         4:{x:5,y:1},  
  16.         5:{x:0,y:0}  
  17.     },  
  18.     //凸塊 TuBlock  
  19.     3: {  
  20.         1:{x:4,y:1},  
  21.         2:{x:5,y:0},  
  22.         3:{x:5,y:1},  
  23.         4:{x:6,y:1},  
  24.         5:{x:5,y:1}  
  25.     },  
  26.     //L塊 LBlock  
  27.     4: {  
  28.         1:{x:5,y:0},  
  29.         2:{x:5,y:1},  
  30.         3:{x:5,y:2},  
  31.         4:{x:6,y:2},  
  32.         5:{x:5,y:2}  
  33.     },  
  34.     5: { //反向L塊 FLBlock  
  35.         1:{x:5,y:2},  
  36.         2:{x:6,y:2},  
  37.         3:{x:6,y:1},  
  38.         4:{x:6,y:0},  
  39.         5:{x:6,y:2}  
  40.     },  
  41.     //Z塊 ZBlock  
  42.     6: {  
  43.         1:{x:4,y:0},  
  44.         2:{x:5,y:0},  
  45.         3:{x:5,y:1},  
  46.         4:{x:6,y:1},  
  47.         5:{x:5,y:0}  
  48.     },  
  49.     7: {//反向Z塊 FZBlock  
  50.         1:{x:4,y:1},  
  51.         2:{x:5,y:1},  
  52.         3:{x:5,y:0},  
  53.         4:{x:6,y:0},  
  54.         5:{x:5,y:1}  
  55.     }  

方塊共分為:長條塊,方塊,凸塊(T塊),L塊,反L塊,Z塊,反Z塊幾種;

共7種方塊,以1,2,3,4,5,6,7 索引鍵表示,方塊是四個小塊組成,每塊都有各自的座標,1-4表示組成該塊的初始座標位置,5表示旋轉點;

 
  1. OLSFK.Init = function() { //初始化介面  
  2.     //...  

俄羅斯方塊的介面初始化方法;將在 window.onload 中調用執行;

 
  1. var w = OLSFK.Options.width;  
  2.     var h = OLSFK.Options.height;  
  3.     var total = w * h;  
  4.  
  5.     var x=0,y=0;  
  6.     for (var i=0; i<total; i++)  
  7.     {  
  8.           
  9.         OLSFK.Options.GampMap[x+'_'+y] = 0;  
  10.  
  11.         Lib.Tag('SPAN',{id:"box_"+x+"_"+y,name:"cbox",style:{  
  12.             width:OLSFK.Options.boxWidth,  
  13.             height:OLSFK.Options.boxWidth,  
  14.             border:"2px outset #669",  
  15.             background:"#ddd",  
  16.             float:"left",  
  17.             overflow:"hidden" 
  18.         },innerHTML:"&nbsp;",className:"cssbox"},back);  
  19.  
  20.         var end = i + 1;  
  21.         x++;  
  22.         if (end >= w && end % w == 0)  
  23.         {  
  24.             x=0;  
  25.             y++;  
  26.             Lib.Tag('DIV',{style:{  
  27.                 clear:"both" 
  28.             }},back);  
  29.         }  
  30.  
  31.     } 

通過設定的 Options.width, Options.height 列數與行數,以及設定的小方格寬度,初始化了一個寬:Options.width列,高為 Options.height 的表格介面出來;

Lib.Tag 用於建立標籤對象;

 
  1. Lib.Tag = function(TAG,json,pnode) {  
  2.     //...  
  3. }  

TAG為標籤名,比如: div, span 等;

json為設定標籤樣式 style;

pnode 是該建立所在的父容器;

OLSFK.Init = function() {} 還建立主遊戲空間旁邊的下次隨機方塊預覽區,當前層級,及分數,以及操作“開始”,“暫停”按鈕等;


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.