js版俄羅斯方塊設計思想及實現

2021-08-27 09:18:53 字數 2315 閱讀 6201

俄羅斯方塊方塊是小時候的乙個回憶,從最開始的掌上的黑白遊戲機,到電視遊戲機,到電腦,無不有它的痕跡,今天我們來一起重溫它的一種實現方法,也算是整理一下我的思路吧......

1.以中心點座標代替整個方塊

2.以數學座標點代表實際座標

3.統一衝突檢測方法

問題分析:

俄羅斯方塊就是乙個個方塊從上到下的落下,固定,當一行滿的時候就消去這一行,就類與物件分析設計思想,我們很容易想到,要創造兩個物件,乙個就是方塊物件,乙個這是控制物件,在這裡,我們再多加上乙個物件,我稱它為小部件物件,至此,此遊戲一共有三個物件,其描述如下

方塊物件(cube):就是出現的整個方塊,每乙個方塊由四個小方塊組成,一共有7種方塊,每個方塊有幾種狀態,每個方塊都有自己一些行為

控制物件(fangkuai):這個物件的名字不好起,暫且叫控制物件,它控制了方塊何時的移動、下落、變形,它有自己的狀態地圖

小部件物件(kit):就是乙個小物件,它集合了一些公告的屬性、方法

現在,我們以乙個6行,6列的俄羅斯方塊為例

我們先建立乙個座標系,以左上角為原點,橫方向為x軸,豎方向為y軸,

剛開始,方塊從上面點出現,(3,0)點就代表其位置,每隔的一定的時間,在檢測可以向下移動之後,則中心座標的縱座標加1,為(3,1),這樣一直往下移,直到判斷無法下移了,方塊物件的的中心座標為(x1,y1),將此座標交給控制物件,由控制物件將自己的狀態矩陣相應的四個點置為1,這時,檢測消行,之後,讓方塊的位置座標重新為(3,0)就行了

統一衝突檢測方法:

就是不管你是左移,右移,下移,變形等,檢測衝突都統一乙個方法,就是假如執行了對應操作後,檢測方塊的座標對應的矩陣座標是否有1存在,有則存在衝突,無法執行此操作,特別的,對於下移,存在衝突即是到頭了,因此,為了統一越界檢查,邊界也有座標,並且為1

設計思想如圖

方塊的與控制物件的互動只是抽象出來的數學座標的互動,不涉及實際的座標,這樣,使得理解、操作簡單,擴充套件性強

具體設計

方塊物件:

屬性:行為:

顯示:根據種類、狀態、顏色屬性、中心座標等在實際位置座標繪出方塊

下移:中心座標的縱座標(y)加1,執行顯示方法

左移:中心座標的橫座標(x)減1,執行顯示方法

右移:中心座標的橫座標(x)加1,執行顯示方法

變形:狀態屬性加1,執行顯示方法

變色:顏色屬性改變

變種類:種類屬性隨機取值

控制物件:

屬性行為:

繪圖:根據狀態座標,繪了實際的圖形

檢測消行:判斷狀態矩陣是否有某列全為1的情況,如果出現,則消去本列,分數加1,後列向前移動

判斷左移:讓方塊中心座標橫座標-1之後,檢測狀態矩陣,方塊的四個座標對應的矩陣座標是否有1存在,有無法左移,否則,可以

判斷右移:讓方塊中心座標橫座標+1之後,檢測狀態矩陣,方塊的四個座標對應的矩陣座標是否有1存在,有無法右移,否則,可以

判斷下移:讓方塊中心座標縱座標+1之後,檢測狀態矩陣,方塊的四個座標對應的矩陣座標是否有1存在,有無法下移,否則,可以

判斷變形:讓方塊狀態屬性+1之後,檢測狀態矩陣,方塊的四個座標對應的矩陣座標是否有1存在,有無法變形,否則,可以

控制左移:執行判斷方法,若可以,則執行方塊的左移方法

控制右移:執行判斷方法,若可以,則執行方塊的右移方法

控制下移:執行判斷方法,若可以,則執行方塊的下移方法,否則,就是到頭了,將方塊的座標對應的狀態矩陣座標置1,執行繪圖方法,檢測消行,再執行繪圖方法,接著,執行方塊的變種類方法,變色方法,然後改變方塊的中心座標,從最上邊重新開始出現

控制變形:執行判斷方法,若可以,則執行方塊的變形方法

註冊事件:按up執行 控制變形,按left控制左移 ,按right 控制右移,按down控制下移

設定定時器:不同level,不同時間,每隔此時間執行一次 控制下移 方法

小部件物件:

方法:數學座標轉實際座標:

中心座標得到四個座標:

數學座標點顯示的實際塊:比如(3,0),此方法會在網頁中顯示乙個實際的塊

等等優點:

1. 只有三個物件,不會因為方塊不斷的產生出現很多物件,浪費空間,方塊物件只有乙個,重複使用

2. 擴充套件性強,思路清晰,無論多少行,多少列,**不用修改

3. 實現的**還算是少的吧

缺點:矩陣不轉置就好了,這樣消行的時候不是消去的矩陣的列了,而是消行,比較簡單

具體實現**:

確保有jquery.js引入

得分:0分

行數列數級別

大小: 93.9 kb

大小: 4.3 kb

js 實現俄羅斯方塊(三)

嘿嘿,首先我們先搭建遊戲世界 網格 所有的操作包括左移右移下移旋轉都是在這個網格中 既然是使用js來寫當然跑不了html啦,實現網格最簡單的 方法就是用html的 了!那麼 第一步 畫 畫乙個長寬相等的 上面 畫格仔 var line 30 行數var size 20 列數for i 0 i lin...

C 版俄羅斯方塊

請不要使用vc6編譯,建議使用vc2005及以上版本,或dev cpp include windows.h include include include include struct block 4 定義方塊 point tempblock 4 structtblock 4 bool place ...

純JS俄羅斯方塊

俄羅斯方塊 tetris,俄文 是一款電視遊戲機和掌上遊戲機遊戲,它由俄羅斯人阿列克謝 帕基特諾夫發明,故得此名。俄羅斯方塊的基本規則是移動 旋轉和擺放遊戲自動輸出的各種方塊,使之排列成完整的一行或多行並且消除得分。由於上手簡單 老少皆宜,從而家喻戶曉,風靡世界。那麼,我們的問題來了,學挖掘機技術哪...