遊戲區域:遊戲區域是固定的,這裡將它設為寬10單位,高16單位的矩形區域,前端顯示用**來實現,並將每個td儲存在乙個二維陣列中,用於渲染遊戲過程。
方塊:方塊有7種形狀,用乙個4*4的矩陣來儲存方塊的形狀;按方向上鍵方塊可以旋轉,可通過矩陣旋轉來實現;方塊可以左右移動,需要判斷是否出界機左右是否已有方塊;還需注意判斷方塊是否已經觸底。按方向下鍵方塊可以速降。
分數:在每一次方塊降落完成後判斷能否得分。
這部分下文有用上在回來看就行,現在看可能有點混亂( ・ㅂ・)و 。
block_now, block_next; 當前,下一方塊物件,將block_next賦值給block_now,再建立新方塊後賦值給block_next。
allblock: 16*10的矩陣 已完成方塊
ground:16*10的遊戲區域,獲取dom,渲染遊戲區域
實現這個遊戲的最核心就在於這個方塊類了,我們將建立乙個方塊型別,然後7種形狀的方塊繼承這個方塊類。
方塊類的屬性
方塊的例項屬性有:移動方向,狀態,形狀,當前位置,顏色。
function block()
this.pos = [0, 3];//所在行,列
this.color = ["#ffaec9", "#b5e61d", "#99d9ea", "#c8bfe7", "#b97a57"];
}
這裡先明確一下方塊和形狀的關係哈,後面經常用上這個概念。如下,4*4的矩陣我把它叫「方塊」然後有顏色(綠色)的部分我叫它形狀。
7種方塊子類
function block_i()
block_i.prototype = new block();
其他形狀與上面類似:
s : [[0, 1, 1, 0],[1, 1, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
j : [[0, 1, 0, 0],[0, 1, 0, 0],[1, 1, 0, 0],[0, 0, 0, 0]];
o : [[1, 1, 0, 0],[1, 1, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
z : [[1, 1, 0, 0],[0, 1, 1, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
t : [[0, 1, 0, 0],[1, 1, 1, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
l : [[1, 0, 0, 0],[1, 0, 0, 0],[1, 1, 0, 0],[0, 0, 0, 0]];
方塊類的方法
方塊類的方法有:旋轉方塊,移動方塊,速降方塊,列印方塊
旋轉方塊
1.旋轉方塊時我們先將矩陣順時針旋轉90度
for(var i = 0,dst = 3;i < 4;i++, dst--)
2.再將旋轉後的影象移到矩陣左上角,這樣可以表現出在原地旋轉的效果。
for(var i = 0;i < 4;i++)
}if (flag) }}
3.最後將旋轉後的矩陣儲存回原來的矩陣
速降方塊
1.先算出方塊矩陣中有形狀的內容的右邊界和下邊界(因為我們已經將圖案放在左上角了所以不用求左上邊界ヾ( ̄▽ ̄)),比如s形的方塊右邊界是3,下邊界是2這樣。這個用兩個迴圈就能實現了。
2.判斷形狀(注意是形狀)的正下方有沒有方塊(檢查allblock)
下方有方塊時:
(1)計算當前形狀下邊界的塊對應下方的塊的距離y,如圖
(2)計算下方最頂方塊距離上方塊對應位置距離x,如圖
(3)取兩個距離中較小的距離為方塊垂直移動距離,移動方塊。並將方塊狀態修改。
下方沒有方塊時,方塊降至最低,計算距離時,記得得加上方塊底部與形狀底部的距離。並將方塊狀態修改。
移動方塊
使用者通過鍵盤方向鍵來移動方塊:左(37) 上(38) 右(39) 下(40)括號內為鍵碼。
對鍵盤事件進行監聽:
用this.dir記錄方塊當前移動方向。
當使用者按上鍵時,呼叫旋轉方塊函式;
按左右時,將方塊所在列(this.pos[1])加或減1;
按下鍵時,呼叫速降方塊函式。
最後列印方塊(判斷是否出界等問題在列印方塊步驟)
列印方塊
判斷待列印方塊是否超出邊界
判斷要渲染(給形狀上色)的地方是否已經有方塊了
擦除上一時刻方塊
繪製這一時刻方塊
若方塊下落完畢(this.end = 1),將方塊加入到已下落方塊矩陣(allblock)中
好啦!完成到這步就勝利在望了,撒花ヾ( ̄▽ ̄)~
產生方塊
用兩個隨機數隨機產生方塊形狀和顏色:
function createblock(r1, r2)
block_new.color = block_new.color[r2];
return block_new;
}
2.生產分數
在每次列印方塊時都判斷一下是否可以得分消去。
若可以得分,就將allblock中該行刪除(splice),並在最開始位置加上一行空白行([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
然後在ground中,將該行樣式變為上一行樣式,以此類推。呈現出消去該行的效果。
3.記錄最高分
我還弄了個用cookie記錄最高分的功能,每次得分時判斷下是否為最高分,並顯示,具體還是看**啦。
差不多啦,恩恩去吃飯。
04 20 小遊戲練習
import time import random 註冊資訊 name input 請輸入使用者名稱 age input 您好,請輸入您的年齡 format name user info user properties x 1 5 用於存放使用者道具 properties x3 250g x1 5 ...
2048小遊戲編寫思路
有點難 關鍵知識點 下面請各位讀者先學習一下該遊戲中涉及到的幾個關鍵知識點,有了這些必備條件,我們才好講解 2048 遊戲的設計思路。1 改變文字顏色 2048小遊戲的整體的設計思路是 遊戲介面初始化,共有 4 行 4 列,總計 16 個位置,遊戲開始時,在任意的兩個位置上,隨機產生數字 2 或 4...
原生JS編寫小遊戲 跳一跳
1.先隨機生成地圖 2.按住按鈕釋放後完成動作並進行判斷 首先po一下 如下 按住它 主要分為用來繪製圓柱體分布的draw 函式,用來繫結按鈕事件的bindevent 函式,用來監聽css3動畫是否結束的gettransition 函式,用來判斷棋子是否出界的函式judeg 函式。而控制棋子運動的距...