任亞飛
俄羅斯方塊是由阿列克謝·帕基特諾夫于1984年6月發(fā)明的休閑游戲。俄羅斯方塊原名是俄語Тетрис(英語是Tetris),這個名字來源于希臘語tetra,意思是“四”,而游戲的作者最喜歡網(wǎng)球(tennis)。于是,他把兩個詞tetra和tennis合而為一,命名為Tetris,這也就是俄羅斯方塊名字的由來。玩法主要是由不同形狀的方塊從上面不斷落下,填滿一排時就會消除并增加分數(shù),方塊摞到頂時游戲結(jié)束。這次我們用Scratch制作俄羅斯方塊游戲,感受自己成為這款游戲的創(chuàng)造者的興奮吧!
1.角色背景繪制與背景格的生成
2.角色控制與運動以及判斷輸贏
3.消除方塊與方塊回填
1.角色背景繪制與背景格的生成角色“底板格”大小是24×24,由3個造型組成,綠色、黃色兩個相同大小的格子造型;一條橫線的造型,3個造型的輪廓粗細為10。
角色“方塊”采用黃色填充,大小也是24×24,本文總共由7個造型組成,根據(jù)24×24的大小的格子來組合成7個不同的造型圖案。
角色“下一步”是復(fù)制角色“方塊”,然后改了填充顏色為黑(如圖1)。
背景格生成程序定義了兩個函數(shù):分別為“行”和“游戲背景”。
角色“底板格”的“行”函數(shù),因為角色“底板格”綠底背造型為24×24的大小,所以往x軸的方向移動24步為一個格子距離,背景的大小為10×15格,一行格子的數(shù)量為10個。由此可以把函數(shù)“行”定義為:換成角色“底板格”綠底背的造型,圖章一次后將x坐標增加24重復(fù)10次。
角色“底板格”的“游戲背景”函數(shù):每開始一次游戲,我們需要把上次游戲的圖章部分刪除掉,給角色“底板格”一個起始坐標值,同時隱藏該角色“底板格”,因為我們只需要看到圖章部分,角色在舞臺顯示有點格格不入,所以隱藏掉。開始執(zhí)行函數(shù)“行”,那么一排就生成好了,然后回到x軸方向的原點,把y軸增加-24,和函數(shù)“行”一起重復(fù)執(zhí)行15次,10×15的大小的背景格就瞬間生成了。
線程:點擊綠旗后執(zhí)行函數(shù)“游戲背景”,背景瞬間生成(如圖2)。
2.背景繪制
繪制背景時注意背景的黃色邊框線顏色跟角色“方塊”顏色要相同,給角色“方塊”控制左右移動,旋轉(zhuǎn),到達底部時圖章的判斷(如圖3)。
3.角色控制與運動
新建三個全局變量:“造型”“游戲控制”“分數(shù)”。
角色“方塊”:方塊從正中間向下掉,掉落的造型是角色“下一步”顯示的造型,利用鍵盤方向鍵控制角色“方塊”的左右移動以及水平翻轉(zhuǎn)。
方塊的下落:方塊面向90度的方向,隱藏方塊,換成1到7的隨機造型,本文角色固定在(-48,172)坐標值上,將變量“造型”設(shè)為角色“下一步”的造型編號;重復(fù)執(zhí)行以下腳本:等待0.5秒,顯示,將y坐標增加-24,換成變量“造型”的造型。如果碰到舞臺底部的黃色,就把y坐標增加24,蓋下圖章,再次把變量“造型”設(shè)為角色“下一步”的造型編號,廣播“判斷消除”的消息(注:此消息是在角色“背景格”作消格和填充的用途),再次回到原點起始坐標值隱藏該角色(如圖4)。
方塊的移動水平翻轉(zhuǎn):按下鍵盤方向鍵左對應(yīng)x軸方向,按下就增加-24,如果碰到左邊顏色黃那么x軸就增加24;按下鍵盤方向鍵右對應(yīng)x軸方向增加24,如果碰到右邊顏色黃那么x軸就增加-24;按下鍵盤方向鍵上右旋轉(zhuǎn)90度,碰到顏色黃,說明不夠翻轉(zhuǎn)距離,返回90度抵消,相當于減去90度回到原來的度數(shù);按下鍵盤方向鍵下主要是給角色“方塊”下落速度,y坐標增加-24,一直按達到快速下降的原理,如果碰到舞臺底部或者角色“方塊”的顏色為黃色就把y軸增加24圖章該角色造型(如出現(xiàn)bug可以參考下圖給一個角色下落區(qū)間)(如圖5)。
角色“下一步”:作用是游戲區(qū)域下落的方塊提前在舞臺的右下方“下一步”那里顯示出來。
具體實現(xiàn):我們給變量“游戲控制”賦值為0,把角色“下一步”固定在舞臺右下方下一步的區(qū)域,面向90度的方向,換成1到7的隨機造型;重復(fù)執(zhí)行以下腳本——等待角色“方塊”的y坐標等于172,換成1到7的隨機造型,將變量“游戲控制”增加1,等待0.5秒。(注:本文角色“方塊”的y坐標起始值在舞臺的y坐標172高度。)
重復(fù)執(zhí)行等待一秒,將變量“游戲控制”設(shè)為0。變量具體作用是控制游戲的結(jié)束(如圖6)。
4.判斷輸贏
根據(jù)變量“游戲控制”來判斷。因為角色“方塊”是從y坐標172向下掉落的,遇到黃色就會圖章自己,自己的顏色也是黃色,如果一直圖章到頂部了,變量“游戲控制”就會增加到2(因為變量“游戲控制”重復(fù)執(zhí)行設(shè)為0的時間是1秒,而該變量增加1的條件是角色“方塊”y坐標值等于172,獲取變量“游戲控制”增加的時間是0.5秒,該變量增加到2理論邏輯也就成立)。也就是大于1,那么我們在背景腳本寫當變量“游戲控制”大于1時停止所有腳本運行達到游戲結(jié)束的功能(如圖7)。
5.消除方塊與方塊回填
當方塊填滿背景格一排以及多排的時候及時消除填滿區(qū)域,剩余的方塊會落到消除的區(qū)域,且X軸的方向不變。
消除原理——建立變量分數(shù),利用角色“底板格”判斷線造型從下往網(wǎng)上偵測,必須要從背景左邊x,底部y的方向重復(fù)偵測判斷15次,因為背景是10×15的大小。如果沒有碰到綠色,代表這一排是方塊格滿的,把變量“分數(shù)”增加24,然后用函數(shù)“行”把這一排用角色“底板格”的綠底背造型圖章完這一排變成背景的底色綠色。
回填原理——如果碰到綠色,X軸方向增加24,一行是10個格子,重復(fù)10次換成角色“底板格”黃色格的造型去背景10×15的區(qū)域偵測碰到黃色,如果偵測到有碰黃色一次,就將現(xiàn)有的y坐標值減去變量“分數(shù)”的值,回落到消除的地方圖章黃色格達到現(xiàn)有方塊回填的效果。變量“分數(shù)”增加值條件為消除一行增加24,y坐標同時也增加24同步進行,以此類推,所以回填圖章的邏輯就是當前y左邊值減去變量“分數(shù)”值去回填。再次把y坐標增加變量“分數(shù)”值上去繼續(xù)偵測;同理偵測到綠色,那么就要換成“綠底背”的造型,減去y坐標的變量分數(shù)值,圖章綠底背造型(說明偵測的地方?jīng)]有黃色格子填充,所以下去圖章綠色格子)。又返回上次坐標繼續(xù)偵測。
“判斷消除”函數(shù),角色“方塊”掉落碰到黃色圖章后發(fā)送判斷消息,當角色“底板格”接到角色“方塊”消息后執(zhí)行函數(shù)判斷消除。角色“方塊”每圖章一次,角色“底板格”就判斷一次消除和回填。達到游戲消除和回填功能。