當前位置:
首頁 > 遊戲 > 從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

打開今日頭條,查看更多圖片

俄羅斯方塊1980年末期至1990年代初期風靡全世界的電腦遊戲,是落下型益智遊戲的始祖。這一款很經典的益智遊戲,之前就做了一款桌面版的java俄羅斯方塊,這次就嘗試著寫了一款適用於Android平台的俄羅斯方塊。

整個程序設計十分簡潔,只是運用了兩個類而已,最終做出的效果圖如下所示:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

首先,要考慮的自然是遊戲應該如何布局的問題了。我的想法是將手機屏幕分為上下兩部分,上邊用來顯示遊戲者的名稱、所得分數以及下一個方塊,稱為「文字區域」,下邊自然就是遊戲區域了。

如圖所示:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

布局文件如下:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

為了讓遊戲能夠更好地適配Android眾多大小不一的屏幕,需要對布局進行動態規劃。在xml文件中,android:padding=」25px」,text1代表的是上方的文字區域,txet1的背景是一張半透明的圖片,在運行程序時會根據手機屏幕大小動態規劃其高度。text2是文字區域以及遊戲區域之間的間距,我將它的高度定為固定值「30px」。而遊戲區域的高度亦是會動態規劃的,自定義的view將會添加在FrameLayout當中。

自定義的view組件代碼如下,用來繪製並顯示所有的方塊:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

當中,map是一個boolean類型的二維數組,因為我將遊戲區域的比例設為10乘15,所以map的大小即為map[10][15],map[0][0]即為遊戲區域的左上角,map[9][14]為遊戲區域的右下角。如果方塊落在了某個坐標點,則該坐標值設為true,否則為false。則當方塊不斷下落時,通過計算方塊的新的坐標點並重新構建新的map,即可獲得新的view對象。

BRICK_WIDTH為每個方塊的寬度,在構造函數中獲得。

因此,如果new一個Brick對象,且map的值均設為true,將之添加到FrameLayout當中,即可獲得如下效果:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

在Activity類中,通過如下代碼可獲得屏幕信息:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

SCREEN_WIDTH 是屏幕寬度,SCREEN_HIGHT 是屏幕高度,則SCREEN_WIDTH 減去兩倍PADDING,再除以十後,就可以得到方塊的寬度BRICK_WIDTH,而BRICK_WIDTH乘以十五後,即遊戲區域的高度了,這樣就可以算出文字區域的高度了

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

下落方法的基本形狀有如下6種,每個方塊下落時的初始坐標點亦如下所示:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

如正方形方塊有四個點,坐標分別為(4,0)(5,0)(4,1)(5,1)。用List< Point[] >類型的listPoints來保存坐標集合。注意:每個下落方塊的第一個坐標點均是有特殊作用的,這個後邊會說到。

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

在程序中,我的想法是new兩個map對象,map1用來保存所有固定不動的方塊坐標點,map2用來保存還在下落的方塊的坐標點,這樣就能夠new兩個Brick對象,然後通過覆蓋的方法來使之同時顯示在同個區域內。這也是我將它們添加到FrameLayout布局的原因。

下落方塊的移動演算法如下,適用於左移還有右移

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

則要左移和右移時只要分別為move(int moveX, int moveY)函數傳入不同參數即可實現對應操作:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

變形操作要下落方塊有一個固定的旋轉點,這個旋轉點我設為下落方塊的第一個坐標點,這也是我前邊所說的第一個坐標點的特殊作用。

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

消行操作需要在每次下落方塊無法再下落時檢查是否需要實行,所以檢查是從第十五行開始直到第一行:

從零開始月入百萬的經典遊戲俄羅斯方塊開發,沒落的手游能變鳳凰

注意當中的j = j + 1語句,因為當第j行消行後上方區域需要整個「下沉」一行,所以原來的第j-1行就變成了第j行,所以還需要再從現在的第j行檢查起,加一的原因是在for循環中j會減一,所以這裡先加一。

下移操作是整個程序設計中的難點,在這裡面要實現消行檢查,map1和map2的數據更新,以便刷新新的界面,這裡代碼就不再貼出了。

結束導語:我從去年到現在,我根據市場技術棧的最新需求,錄製了一套最新的Java精講視頻教程,如果你現在也在學習Java,在入門學習Java的過程當中缺乏系統的學習教程,你可以關注我的頭條號,並在後台私信我:Java,即可獲得Java精講視頻教程。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |