1、3. 游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难 度,都会相应地显示出代表该难度的图片。开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再进入。4. 2、方块下落、变形功能5. 在整个俄罗斯方块游戏中,方块的设计是核心。这里设计了一个方块类:Square( ),用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显示、初始化新块等。6. 3、自动升级功能7. 当分数累积到一定大小时,系统将自动为玩家提高难度。这里设置了每消除10 行方块, 就增加一级难度。当难度增加的时候,方块会相应地改变颜色,以作为对玩
2、家的提示。8. 4、游戏音乐功能9. 游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。10. 5、获取帮助功能11. 这里设置了一个类,用来显示帮助,按F1 键就能弹出窗口,显示游戏规则。3.系统功能设计分析1. 俄罗斯方块游戏根据功能的不同,设置了如下12 个类:Square, Command, GameArea, GameSetting, GameOver, Help, ImagePanel, JieMian, MyPanel, MyTimer, PlayMidi, WinListener,每个类的描述如下:2.1 、Square,方块类。这个类中定义了生成方块的方法,用二维数组 i
3、nt pattern, 存放 7 种方块的四种状态。在构造方法中以随机的形式生成方块,同时提供了以下几种方法:reset( ),leftTurn( ),leftMove( ),rightMove( ),fallDown( ),assertValid(int t,int s,int row,int col),dispBlock(int s)。分别实现方块的重画、翻转、左移、右移、下落、同步显示等功能。2.2 、Command,处理控制类。这是一个实现ActionListener 接口的类,主要处理点击按钮事件。类中定义了三个 int 型变量:button_play,button_quit,but
4、ton_pause,和一个boolean 型的变量:pause_resume,并赋值。在 GameArea 类中通过事件响应,在按钮执行方法中调用其值,使用switch 语句,根据不同按钮不同的值,来响应不同的事件。2.3 、GameArea,游戏界面类。GameArea 继承了 JFrame,是俄罗斯方块的主要游戏界面。这个类定义了GameSetting 类的 gameScr 对象和ImagePanel 类的 imagepanel 对象作为游戏区域面板和控制区域面板。在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显示。2.4 、GameSettin
5、g, 游戏画布类。这个类生成的对象将作为游戏界面的方块下落区域,画布的设置为 15 行 10 列,当中的方格边长为30,类中还定义了一个二维数组int scrArr作为屏幕数组,表示每一个方格。游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;如果该方格中的值为0,则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。单击 Play 按钮时,系统调用 initScr( )方法,初始化屏幕,将屏幕数组清零。当满足满行删除的条件时,系统调用 delete
6、FullLine( )方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。2.5 、GameOver,游戏结束弹出提示框类。当游戏结束时,系统弹出提示,包括玩家分数以及询问玩家要继续游戏还是退出。2.6 、Help,帮助类。在游戏界面,按F1 键,弹出提示窗口,获取帮助。2.7 、ImagePanel,背景图片类。这个类继承了JPanel 类,用来作为游戏界面中控制区域的容器,并添加图片。2.8 、JieMian,主界面类。这个类继承了JPanel 类,作为游戏的第一个界面,也是难度选择界面。定义了 9 个单选按钮,当玩家未选任何难度就按Enter 时
7、,系统会弹出一个提示框, 提示玩家先选难度再进入。2.9 、MyPanel,重写 MyPanel 类,使 Panel 的四周留空间。2.10 、MyTimer,定时线程类。类中定义了一个run()方法,用sleep()函数实现方块下落的快慢,即调节难度。2.11 、PlayMidi,添加音乐类。在游戏过程中添加背景音乐。2.12、WinListener,关闭窗口类。4. 主要类的 UML 类图表示1. Square 2. int pattern 3. int SquareType 4. int SquareState 5. int blockState 6. int row,col 7. Ga
8、meSetting scr 8.+ void reset() 9.+ void leftTurn() 10. + void leftMove() 11. + void rightMove() 12. + boolean fallDown() 13. boolean assertValid(int t,int s,int row,int col) 14. + synchronized void dispBlock(int s) 5.(Square 类的 UML 类图表示)15. GameSetting 16. int unitSize 17. int rowNum 18. int columnN
9、um 19. int maxAllowRowNum 20. int SquareInitRo 21. int SquareInitCol 22. int scrArr 23.Square b 24.initScr() 25.+ void paint(Graphics g) 26.+ void drawUnit(int row,int col,int type) 27.+ Square getBlock() 28.+ int getScrArrXY(int row,int col) 29.+ int getInitRow() 30.+ int getInitCol() 31.void delet
10、eFullLine() 32.boolean isGameEnd() 33.+ void keyPressed(KeyEvent e) 三、详细设计:1 模型层设计1) 图形的产生通过图形工厂类ShapeFactory 的 getShape(ShapeListener listener)方法随机产生方块的某种状态,这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种设计模式的通俗解释就是:你想要一个产品,你需要让工厂给你生产一个,你要告诉工厂你要生产什么产品,就把你需要生产的这个产品当做参数传给工厂类的生产产品的方法,然后根据你传进来的产品,而决定工厂人生产什么产品,产生出
11、来产品后,最后要返回您要的这个东西。随机产生一个数随机数1234567一字形Z 字形反 Z 形7 字形反 7 形倒T 形田字型2)图形数据结购定义一个 4x4 方阵,共 16 个小格。用“0”和“1”来表示每个方格是绘制还是空白,由此可以组合出多种图形,如图所示:其中图一表示为0,0,0,0,1,1,1,1 ,0,0,0,0,0,0,0,0其中图二表示为0,0,0,0,0,1,1,0 ,0,1,1,0,其中图三表示为0,0,0,0,0,1,0,0 ,0,1,1,1,其中图四表示为0,0,0,0,0,1,0,1 ,0,0,1,0方块的旋转是通过绘制 4 个方向的方块,在不同旋转角度显示不同方向的
12、方块来完成的。所以程序要控制方块的旋转方向,只要控制显示哪副图就可以了。本游戏是用一个三维数组int shapes = new int;作为存储方块的数据结构来保存方块的 28 种状态的。代码如下:public final static int STYLES = / 共 28 种状态 0x0f00, 0x4444, 0x0f00, 0x4444 , / 长条型的四种状态 0x04e0, 0x0464, 0x00e4, 0x04c4 , / T型的四种状态 0x4620, 0x6c00, 0x4620, 0x6c00 , / 反Z 0x2640, 0xc600, 0x2640, 0xc600 ,
13、 / 0x6220, 0x1700, 0x2230, 0x0740 , / 7 0x6440, 0x0e20, 0x44c0, 0x8e00 , / 反 0x0660, 0x0660, 0x0660, 0x0660 , / 方块的四种状态; /* * 构造函数*/ public RussiaBlock(int y, int x, int level, int style) this.y = y; this.x = x;this.level = level; moving = true; pausing = false; this.style = style;canvas = GameCanvas.getCanv
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1