基于Java的俄罗斯方块的设计和实现-毕业论文(3)

2019-08-30 17:14

创建新游戏界面游戏界面区处理玩家操作显示玩家操作结果 图3-3 界面模块示意图

图2-4为游戏控制区设计示意图,如图所示,游戏控制区模块分为开始、暂停、继续、初始游戏级别设置、初始颜色设置、退出等功能模块。

开始暂停游戏控制区初始级别设置初始颜色设置退出 图3-4 控制区模块示意图

7

4 系统的详细设计与实现

Java是一种纯面向对象(Object-Oriented)的程序语言,它的诸多优点在此就不作详细论述了。从面向对象的观念出发,本程序主要可分为以下几个模块: ? 游戏主界面显示模块 ? 方块及数据显示模块 ? 方块移动控制模块 ? 游戏界面颜色控制模块 ? 游戏进度、等级控制模块

分析对象的技巧在于它的功能的扩展性及维护效率。试想,如果因为外部环境或者用户需求的变化需要对程序进行功能扩展或者维护,就要对代码作大幅度的更动甚至重写,这样就失去了面向对象的优势,所以在本程序分析时将独立性高的模块作为一个对象,以提高程序的可扩展性和可维护性。以下该游戏中类的设计:

ControlMainGame类:继承自JFrame类,作为游戏的主类,负责对游戏的主体全局进行控制,连接与指挥各个类的枢纽。

ControlPanel类:继承自JPanel类,作为操作面板类,负责安放主游戏窗口,积分板,级别控制按钮等窗口用以控制游戏进程。

ChangeBlockColor类:继承自JPanel类,ChangeBlockColor线程类动态改变画布类的方格颜色,画布类通过检查方格颜色来体现ChangeBlockColor方块的移动情况与消去状况。

BlockPaint类:方格类,组成方块的基本元素,主要表达方式为颜色。 BlockOperation类:继承自Thread类,作为操控方块的类,控制方块的移动,下落以及变形。

4.1 游戏主界面显示模块

一个优秀的软件系统不仅体现在核心的功能的多样性和强大上,如果使用者所面对的是枯燥的、陈旧的界面的话,那么这个的软件系统是不成功的,所以好的、精美的界面设计是极为重要的环节。为玩家设计制作布局合理、视觉效果良好的界面的重要性就不言而喻了。

游戏主界面采用Swing组件开发,并且向其注册监听器,以实现各种控制功能,综合游戏窗体的设计,其上至少需要注册三个监听器,分别是动作监听器(ActionListener)、键盘监听器(KeyListener)、选项监听器(ItemListener)。

8

根据初步设计,可以确定客户端上所要用到的Swing组件对象有JFrame对象、JPanel对象,JLabel对象、JButton对象、JMenuBar对象、JMenu对象、JMenuItem对象、JTextField对象、JTextArea对象、JDialog对象等,至少十个Swing组件对象。下图4-1为游戏主界面截图。

图4-1 游戏主界面截图

本游戏主界面设计的初始颜色搭配基于对比鲜明的原则,默认背景色为深绿色,左上角设置俄罗斯方块图标,得分初始值为0,等级初始值为1,最高分记录初始值为0。游戏主窗体尺寸设置为(520,580),方块移动范围窗格由一个20行、12列的二维数组控制,且左上角图标设置为方块图案,起标识作用。 4.2 画布、方块显示模块

9

本游戏中将画布底色默认设计成深绿色,在方块下落过程中,根据颜色的变化识别下落的方块。

4.2.1 背景画布模块设计

该游戏的主背景画布是一个20行、12列的二维数组,方块显示是由相应颜色变化来标识,主窗体用颜色填充后可形成呈现出来背景样式和方块。本游戏用继承自JPanel的ChangeBlockColor类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目。背景画布实现代码如下: /*

ChangeBlockColor 类 画布类的构造函数 rows int, 画布的行数 cols int, 画布的列数

行数和列数决定着画布拥有方格的数目 */

class ChangeBlockColor extends JPanel { private Color backColor = new Color(0,51,0) , frontColor = new Color(255,153,0); private int rows, cols, score = 0, scoreForLevelUpdate = 0; private BlockPaint[][] boxes; private int boxWidth, boxHeight; public ChangeBlockColor(int rows, int cols) { this.rows = rows; this.cols = cols; boxes = new BlockPaint[rows][cols]; for (int i = 0; i < boxes.length; i++) { for (int j = 0; j < boxes[i].length; j++) { boxes[i][j] = new BlockPaint(false);// } } } //画布类的构造函数 public ChangeBlockColor(int rows, int cols, Color backColor, Color frontColor) { this(rows, cols); this.backColor = backColor;//背景色 this.frontColor = frontColor;//前景色 } //覆盖JComponent类的函数,画组件 // g 图形设备环境

10

public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(frontColor); for (int i = 0; i < boxes.length; i++) { for (int j = 0; j < boxes[i].length; j++) { g.setColor(boxes[i][j].isColorBox() ? frontColor : backColor); g.fill3DRect(j * boxWidth, i * boxHeight, boxWidth, boxHeight, true); } } } 4.2.2 预览方块模块设计

方块和数据信息是游戏中最基本的功能模块。ShowBeforePanel这个类提供方块预显图形 ,blockkindnum用来控制随机产生的方块编号,blockstatusnum用来控制方块的四种旋转状态。定义一个4x4方阵,共16个小格。用“0”和“1”来表示每个方格是绘制新颜色还是保留底色。

每得到一个新方块,都是随机从七种形态的方块中选取一种。游戏定义了一个变量,代表新方块的模型。比如定义int型数组STYLE代表28中方块类型,7行4列,每个元素代表其中一种方块。即0<=blockkindnum<=6,0=

那么,当方块落下需要得到新方块时,只需随机得到一对blockkindnum,blockstatusnum值,然后再根据这个STYLE的值构画相应的方块。剩下的问题就是应该怎么随机到一对STYLE行列值。

Java语言包中的Math类提供了一个生成随机数的方法random(),调用这个方法会产生一个在0-1之间的双精度浮点数。所以每次要得到新方块时,只需调用一次这个方法,得到一个0-1的双精度浮点数,然后用该数乘以7,之后强转成整型,即可得到1—7的整数,用来控制行。用该数乘以4,之后强转成整型,即可得到1—4的整数,用来控制列。

由此可以组合出多种图形定义然后用代码实现下列功能: 1>每次执行首先为随机数产生不同的初值。

style=BlockOperation.STYLES[(int)(Math.random()*7)][(int) (Math.random() * 4)];

11


基于Java的俄罗斯方块的设计和实现-毕业论文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:城市道路工程试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: