俄罗斯方块论文最终版 - 图文(6)

2019-03-28 17:02

辽宁科技大学本科生毕业设计(论文) 第22页

5详细设计与实现

5.1 详细设计概述

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。

详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的“蓝图”,以后程序员将根据这个蓝图写出实际的代码。因此,详细设计的结果基本上决定了最终的程序代码的质量。

5.2 游戏主界面设计与实现

游戏主界面是设计的关键也是游戏主要组成部分。为了增强游戏界面的美化效果,

使界面简洁直观。在主界面上添加了gif格式的图片作为背景,并添加了四个按钮和一个进度条。游戏的主界面如图5-1所示。玩家可以通过单击按钮来选择游戏模式:单机版或双人对战版。

图5-1 游戏主界面

辽宁科技大学本科生毕业设计(论文) 第23页

1)单击“单机版”按钮,进入单机游戏。同时主界面上的进度条开始刷新,当前进到100%时,主界面消失。

2)单击“双人对战版”按钮,进入双人对战游戏。同时主界面上的进度条开始刷新,当前进到100%时,主界面消失。

3)单击“帮助”按钮,进入游戏帮助界面,如图5-2。由于游戏操作简单,所以仅用图片帮助形式展现了帮助信息。单击“确定”按钮退出该界面。

图5-2 俄罗斯方块帮助信息

图5-3 退出游戏对话框

辽宁科技大学本科生毕业设计(论文) 第24页

4)单击“退出”按钮,显示退出游戏对话框,如图5-3所示。选择“是”退出游戏,选择“否”继续游戏。

5)游戏代码程序在Eclipse项目窗口中的类文件浏览图如图5-4所示。

com.heweina.game包包含com.heweina.game.Single、com.heweina.game.Double、com.heweina.game.Double.Set包以及以下类。

图5-4 游戏程序代码的类文件浏览图

● MainFrame :游戏主界面类,是俄罗斯方块游戏的主窗口,继承于 JFrame 类,并实现ActionListener 和 Runnable 接口。负责游戏的全局控制。 通过单击按钮来选择游戏的模式:单机版和双人对战版。

● HelpFrame :游戏的帮助窗口,该类继承于 JFrame 类,并实现 ActionListener 接口,主要是通过图片显示来说明游戏的玩法。

● GameExitSet :退出游戏对话框类,继承于 JDialog 类,单击“是”退出游戏,单击“否”继续游戏。

● RussiaBox :方格类,是组成俄罗斯方块的基本元素,用自己的颜色来表示块的外观。该类实现 Cloneable 接口,从而可以合法地使用Object.clone()方法域到域地拷贝类对象,否则这种拷贝将会导致异常。单机版和双人对战版俄罗斯方块的实现均需用到此类。

5.3 俄罗斯方格类的设计与实现

俄罗斯方块的基本元素是RussiaBox类。在语法上它实现了Java平台提供的Cloneable接口。方格类是组成单机版俄罗斯方格(SingleBlock)类和双人对战版俄罗斯方格(DoubleBlock)类的基本元素,它用自己的颜色来表示块的外观。方块类由 4×4 个方格(RussiaBox)构成一个方块,而游戏窗口是一个画布类,这个画面内有<行数>×<列数>个方格类实例。

辽宁科技大学本科生毕业设计(论文) 第25页

显然在俄罗斯方块游戏中的<行数>×<列数>个方格中只有两类方格,即着色方格和未着色方格。要实现方格对象的复制就必须使方格类实现Cloneable接口。实现Cloneable接口后则表明可以合法地使用Object.clone()在一个类的实例之间进行域对域地复制。如果没有实现这个接口又调用了Object的clone()方法将会导致抛出CloneNotSupportedException异常。通常的作法是:一个类在实现Cloneable的接口的同时用一个public类型的方法覆盖Object.clone()方法(Object.clone()在Object中定义为protected类型)。

在方格类中用一个Dimension对象表示一个方格的大小,因此Dimension对象是RussiaBox类的一个成员变量。另外,方格类还使用了两个与Dimension有关的方法,分别用来获得和设置方格的大小。Dimension类封装了一个构件的高度和宽度,这个类与一个构件的许多属性相关联,因此在Component类中定义多个与之相关的方法。Dimension类的高度值和宽度值都是一个整数,表明有多少个像素点。

5.4 游戏块的设计与实现

游戏块是俄罗斯方块游戏的最基本元素。在设计游戏块的过程中有以下两种思路: ① 利用引入图形方块来构造游戏块,即每一个游戏格为一个图形块。 ② 利用Java中提供的图形类对象并对其着色来实现游戏块。

这里采用第2种设计思路,因为图形类对象的使用便于进一步对游戏进行控制,另外,采用图形对象还能在实现双人对战游戏时减少数据的传输量。

首先,定义一个 RussiaBox 类来表示一个游戏单元方格,然后定义一个游戏方块,该游戏由 4×4 个 RussiaBox 单元格组成,定义 4×4 的游戏方块是为了便于实现前面提到的7种不同的俄罗斯方块,因为7种俄罗斯方块的旋转变化恰好都在长、宽各位4个单元格的画布之内。通过着色方式可以轻松实现方块的28种不同形态,并对后续的游戏运行控制提供便利。

该类用4位16进制数表示一个4×4个 方格组成的方块,即一个方块的状态,如图 5-5所示的一个横条,用一个4位16进制表

示即为0x0f00,其中0x表示16进制,0x后 图5-5 0x0f00表示的方块 的第一个数0表示方块的第一行没有填充,第二个数f表示方块的第二行全部填充,由

辽宁科技大学本科生毕业设计(论文) 第26页

f?(1111)2可以看出16进制的数对应的二进制为1时表示该方格被填充;为0时则不

填充。

这28中状态可用如下一个STYLES数组表示出来: public final static int[][] STYLES = {

};

一个STYLES中的元素是用一个整数表示的,如横长条是用0x0f00表示,再用key=0x8000与STYLES的某个元素style进行“与”运算,即取出了style中的第一位,这一位如果是1,则表示对应的方格在该方块中是要用色彩来显示的,因此产生一个方格,即一个RussiaBox对象。检查之后再作移位运算key>>1,如0x8000移位后变成0x4000,再利用它进行检查与style第二位对应方块的位置是否应该产生一个有色彩的方格,如此下去,这个二重for循环一共要检查16个方格的位置。

鉴于上面的表示方法,RussiaBox类的构造方法以一个STYLES、该方块所在的画布及其在画布中的坐标、游戏等级作为参数。

构造方法中的利用二重循环创建16个方格。利用display()方法可以将当前方块在画布的对应位置上显示出来。此种定义方块的方法也为后面对游戏块的操作提供了方便,如方块的变形操作等。

由于游戏中方块的动态性,每个方块有一定的生命期,用线程实现方块是最好的方法。方块用一个类实现,该类直接继承线程类Thread,所以一个方块的出现就是一个线程对象的产生并运行。它可以由键盘控制移动、下落、变形等。

该线程的主体是run()方法,该方法主要控制方块的下落,其中下落的速度由sleep方法的参数来控制,该参数的值又是由一个基本值和游戏的级别来控制的,级别越高则休眠的时间越短而且下落越快。

{0x0f00, 0x4444, 0x0f00, 0x4444}, // 长条型的四种状态 {0x04e0, 0x0464, 0x00e4, 0x04c4}, // 'T'型的四种状态 {0x4620, 0x6c00, 0x4620, 0x6c00}, // 反'Z'型的四种状态 {0x2640, 0xc600, 0x2640, 0xc600}, // 'Z'型的四种状态 {0x6220, 0x1700, 0x2230, 0x0740}, // '7'型的四种状态 {0x6440, 0x0e20, 0x44c0, 0x8e00}, // 反'7'型的四种状态 {0x0660, 0x0660, 0x0660, 0x0660}, // 方块的四种状态


俄罗斯方块论文最终版 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:世界地理知识点总结 - 图文

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

马上注册会员

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