java實作俄羅斯方塊
- 1、問題描述:
- 2、設計要求:
- 3、問題分析:
- 4、概要設計
- 5、詳細設計
- controller
- 1)Operation
- 2)OpButton
- 3)AutoDown
- 4)GameMain
- Model
- 1)GameData
- 2)PlayData
- 3)Blocks
- view
- 1)LoginChange
- 2)OverChange
- 3)MainWin
- 4)AlertDialog
- 5)StaticPanel
- 6)ScoreNext
- 7)GamePanel
- 8)PlayerPanel
- 9)ImgButton
- 6、運行演示
1、問題描述:
俄羅斯方塊螢屏中央有一個矩形容器,程式剛開始時是空的;當滑鼠單擊“開始”選單時,矩形容器內從上向下隨機出現俄羅斯方塊的部件,通過鍵盤上的左右鍵分別左右移動部件(一個單位),向上鍵順時針旋轉90度,當部件到達容器底部或已停止的部件上時,停止;當容器的同一行被部件填滿時,該行消失,其他行依次向下移動,
2、設計要求:
要求設計程式輸出如下:
- 螢屏中央有一個矩形容器,選擇“開始”選單,俄羅斯方塊的部件隨機產生并在容器中從上向下下落,
- 有七種標準俄羅斯方塊部件,并隨著鍵盤上的左右鍵分別左右移動,隨著鍵盤上的向上鍵分別順時針旋轉90度,
- 當部件到達容器底部或已停止的部件上時,停止;當同一行部件完整拼接上時,該行消失,其他行向下移動,在適 當位置顯示當前累計分,
- 當部件總行數超過矩形容器高度時,提示“游戲失敗”資訊并停止,
3、問題分析:
-
七種標準俄羅斯方塊部件的建立和存盤:
每一種俄羅斯方塊部件都進行拆分成一個個方塊,選定一個方塊作為中心點,該方塊的存盤坐標為(0,0),其余的方塊以中心點為標準存盤坐標,把這個部件的各個方塊的坐標存盤到一個自定義類 B l o c k s Blocks Blocks中( B l o c k s Blocks Blocks類把各個坐標存盤到 P o i n t Point Point物件中),再把所有7種部件的 B l o c k s Blocks Blocks物件存盤到 B l o c k s Blocks Blocks陣列中備用, -
俄羅斯方塊部件的控制:
首先用 j a v a . a w t java.awt java.awt包下的畫筆 G r a p h i c s Graphics Graphics根據該俄羅斯方塊部件的各個方塊的 P o i n t Point Point物件畫在面板上;對于部件的左右向下移動,設定滑鼠監聽器和鍵盤監聽器,監聽獲取偏移量,使部件整體移動,在重新畫在面板上,而對于部件的自動掉落用無限回圈的執行緒執行不斷畫即可;對于部件的旋轉,根據三角函式可以得出一個公式,部件經過90°旋轉,坐標x標變為原來y坐標的負值(即-y),坐標y變為原來x坐標的x值,因此,旋轉只需要根據公式改變該部件各個方塊的坐標,再重新畫在面板上即可,當然還要注意邊界問題,旋轉之前先檢測是否越界,才決定能否旋轉,不止是邊界還有相鄰的方塊不能重疊,所有旋轉前還需要檢測是否和其他部件重疊再決定是否旋轉, -
俄羅斯方塊的計分和結束:
保存以前的俄羅斯方塊部件采用的二維陣列存盤,在面板對應的位置有部件存在則在二維陣列對應的位置的值設為對應部件的編號,反之為0,每重畫一次面板都會先訪問這個二維陣列再根據偏移量,畫出這一次之前的所有方塊部件和畫這次的方塊部件;主要一行都有方塊則得分,即二維陣列中只要有一(多)行都是非0值就得分并消除這一行(也可以多行),消除的方法是把陣列的值整體移動到下一(多)行,再重畫;結束就是二維陣列只要有一列都是非0值則游戲結束,此時的得分就是你最終的分數, -
俄羅斯方塊的登錄和榮譽榜
本專案運用到了輕量級資料庫 s p l i t e splite splite,玩家可以注冊登錄用戶,不登陸就開始游戲的玩家默認為未知玩家;登錄頁面首先會檢測當前的昵稱是否有存在,要是存在當前昵稱,則輸入密碼登錄,反之注冊;玩家進行游戲直到游戲結束的最終得分會根據你的當前用戶然后把存到資料庫中,然后用畫筆畫在榮譽榜上;榮譽榜會取資料庫中的分數前四名進行展示;為了不出現多用戶的沖突需要用到 s y n c h r o n i z e d synchronized synchronized同步, -
俄羅斯方塊的下一個展示和游戲暫停與繼續
游戲的下一個展示就是把下一個俄羅斯方塊部件準備好再畫再提示區;游戲的暫停就是讓線程不做任何操作,繼續就是恢復該專案的“游戲中”的狀態,
4、概要設計


- 用了MVC架構
- 用了三種設計模式
1)模板方法模式 I m a g e B u t t o n ImageButton ImageButton
2)單例模式 A l e r t D i a l o g AlertDialog AlertDialog
3)策略模式 C h a n g e r Changer Changer - s p l i t e splite splite資料庫
5、詳細設計
controller

1)Operation
俄羅斯方塊部件的操作(左、右、下、旋轉、開始游戲和登錄)
2)OpButton
按鍵的監聽實作
3)AutoDown
俄羅斯方塊部件的自動下落
4)GameMain
主函式,對俄羅斯方塊運行的初始化,執行緒的運行
Model

1)GameData
旋轉時條件的檢測,保存之前的俄羅斯方塊部件,邊界移動限制,消除行的檢測和實作
2)PlayData
資料庫splite的連接,資料的讀寫,游戲用戶的昵稱、密碼和分數存盤,分數的取出
3)Blocks
俄羅斯方塊各個部件的存盤資料結構
view

1)LoginChange
登錄注冊彈窗頁面的設定,登錄和注冊的狀態
2)OverChange
游戲結束的彈窗頁面設定
3)MainWin
主頁面的游戲區、榮譽榜、提示區、得磁區和控制區以及各個按鈕的設定
4)AlertDialog
登錄注冊彈窗頁面的開啟關閉控制,游戲結束提示彈窗頁面開啟關閉控制
5)StaticPanel
主頁面的渲染
6)ScoreNext
提示區的實作
7)GamePanel
游戲區俄羅斯方塊的繪制
8)PlayerPanel
榮譽榜資料的繪制
9)ImgButton
按鈕的美化
6、運行演示
1、資料庫
p
l
a
y
e
r
player
player的
p
l
a
y
e
r
s
players
players表

2、俄羅斯方塊的部件可以用滑鼠控制也可以用鍵盤控制
滑鼠控制:開始按鈕上的四個按鍵
鍵盤控制:左鍵右鍵控制左右、下鍵控制向下、上鍵控制旋轉

3、點擊登錄按鈕

4、登錄界面

5、注冊玩家1

6、表
p
l
a
y
e
r
s
players
players資料

7、結束游戲,玩家1分數為0

8、榮譽榜取表分數前四名玩家資訊

9、點擊登錄按鈕

10、密碼錯誤

11、重新開始游戲

12、暫停后可繼續

13、消除一行,現在分數為10

14、游戲結束,玩家1分數為10

15、榮譽榜重繪

16、注冊玩家2

17、

18、游戲結束,玩家2分數為20

19、資料庫更新

20、榮譽榜更新

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400387.html
標籤:其他
下一篇:元旦快樂啊
