1、 摘要 随着社会日新月异的变化和互联网的飞速发展,计算机已经普及到人们的日常生活中,网络也成为人们生活中的重要组成部分。 好的游戏 能够 给人们的生活带来健康愉快的补充,唯美的艺术享受, 一定 的教育功效。 俄罗斯方块游戏作为 一款风靡全球的最经典的益智休闲游戏之一 ,已经成为老幼皆宜的小游戏 。对一般用户来说,它的规则简单,容易上手 ,但游戏过程却变化无穷。本游戏的设计综合了 单机 版 与 双人 对战 版 两种模式,用户可任选一种进行游戏。 与通常俄罗斯方块游戏的不同之处在于:在消除满行方块时,方块的颜色会发生变化,以此来提示用户。另外,本游戏还增加了背景音乐和音效的播放功能。单机版中 增加
2、了 排行榜的功能 , 游戏结束时,用户可通过对话框输入自己的姓名并存储到排行榜数据表中,如果进入前 50名,即可在排行榜上看到自己的游戏记录。双人对战版,实现了人和人之间的对战,提高了游戏的互动性和娱乐性。既能 使用户 享受 到游戏中的乐趣, 又能为 用户提供一个展现高超技艺的场所。 本游戏是采用 java 的GUI ( 图形用户界面 ) 组 件创建的, 强调人 机 环境三者作为一个系统进行总体设计 。使操作更人性化,减轻 了用户 的认知负担,使其更适合用户的操作需求 。 关键词 俄罗斯方块;单机版;双人对战版;图形用户界面 Abstract With the rapid change of
3、society and the development of Internet, the computer has already been run through in ours daily life, and the network also becomes one important part of peoples life. The good game could bring the supplement with health and happy, exquisite enjoy of art, certain efficiency of education to peoples l
4、ife. Tetris, as one of the most classical games, which is illuminating and relaxing, is populared with all over the world, has became a little game that is suit both the young and the old. To general users, its rule is simple, easy to grasp, but the process of the game is changing infinitely. The de
5、sign of this game includes two kinds of modes, both single - player games and double battles version, users can choose any of the game. The difference with common Tetris lies in: While eliminating the fully squares, the color of the square will change, so as to hint users. In addition, the broadcast
6、 function of the background music and sound are added in this game. The function of billboard also added into the single - player games, while game is over, users can input their own names through dialog box and store their scores in the table of billboard, if one enters the top of 50, he could see
7、his own record of the game on the billboard. The function of interpersonal fighting is implemented in double battles version, which improves the interactional and recreational of the game. This game can not only makes user to enjoy fun in the game, but also can offer a place to represent superb skil
8、l to user. The component of GUI (Graphical User Interface) of Java is adopted in this game, it takes people - the machine - environmental as a system so as to design, that makes the operation of the system more humaniztion, the cognizant of burden of the users is lightened.And this of course makes i
9、t even more suitable for the demand of users. KEY WORD Tetris; Single-player game; Double-players games; Graphical User Interface 目录 第一章 绪 言 .1 第一节 选题背景及意义 .1 第二节 选题目的 .1 第三节 研究内容 .1 第二章 可行性研究 .5 第一节 引言 .5 第二节 技术可行性 .5 第三节 经济可行性 .5 第四节 操作可行性 .5 第五节 法律可行性 .6 第六节 结论 .6 第三章 需求分析 .6 第一节 引言 .6 第二节 开发意图 .
10、6 第三节 游戏功能分析 .7 第四节 游戏的 UML 基本模型 .9 第四章 总体设计 . 17 第一节 总体设计概述 . 17 第二节 总体设计思想 . 18 第三节 系统的类图 . 19 第四节 游戏的组件图 . 22 第五节 游戏的配置图 . 22 第六节 面向连接的 Socket 的通信机制 . 22 第七节 数据库设 计 . 23 第八节 游戏的总体流程图 . 24 第五章 详细设计与实现 . 25 第一节 详细设计概述 . 25 第二节 游戏主界面设计与实现 . 25 第三节 俄罗斯方格类的设计与实现 . 28 第四节 游戏块的设计与实现 . 29 第五节 游戏控制的设计与实现
11、. 30 第六节 单机版俄罗斯方块游戏的设计与实现 . 31 第七节 双人对战俄罗斯方块游戏的设计与实现 . 36 结束语 42 谢辞 44 参考文献 . 45 1 第一章 绪 言 第一节 选题背景及意义 游戏软件是一种与文化背景密切联系的产品,具有很强的民族性和丰富的文化内涵。伴随着游戏软件在市场上的销售,与其相关的文化也随之传播。因此发展我国自主的益智休闲的游戏软件已是当务之急。游戏是一种基于计算机的应用软 件,是新型的休闲娱乐方式。当前开发的游戏软件应该做到知识性、娱乐性、趣味性、教育性相统一。 俄罗斯方块作为 最经典的益智休闲游戏之一 , 截至 2009 年 已经 发售了 1.25 亿
12、份,受到 50多个国家和地区的玩家喜爱,有超过 50 种语言的版本,运行在几十种游戏平台上,从掌机、街机、个人电脑,到手机和 PDA。 本游戏 根据软件工程有关的规范,以合理的开发原则,设计出 综合了 单机 版和双人对战版两种模式的 俄罗斯方块游戏,给人们的生活带来唯美的艺术享受和健康愉快的补充。 第二节 选题目的 改善现存俄罗斯方块游戏的单一模式, 开发出一 个可操作性、美观性、及时性的俄罗斯方块游戏。本游戏综合了单机版和双人对战版两种模式, 用户可任选一种进行游戏 。方便简单又快捷,是娱乐休闲的好方法。 游戏中提供了漂亮 美观 的 界面 和动听的音乐,使得 游戏的 视觉表现 与 用户界面
13、及背景音乐, 融合为有机的 整体 ,给人们带来更 为 丰富的娱乐和体验 ,同时也 给 玩家 带来无限激情。 在当前的游戏开发领域中, Java 有自己的独到之处,用 Java 编写的代码简单明了、可移植性强,所以本游戏的开发采用面向对象的设计方法,采用开源开发环境 MyMyEclipse8.5,界面利用 Java Swing 提供 的图形类实现,游戏块的运行采用多线程( Thread)机制。 第三节 研究内容 本游戏包括两种游戏模式:单机版和双人对战版。在整个游戏的开发过程中涉及到Java 基本知识的大部分内容,如事件、线程、动画、双缓冲图像、图形界面、 Socket数据传输等方面的知识。主要
14、内容如下: 一 、 Java GUI 编程 2 利用 Java 实现的俄罗斯方块几乎能用到 Java GUI 的所有方面,其中包括 Sun 公司为 Java 提供的两个图形界面类库: AWT:其中提供了建立和设置 Java 的图形用户界面的基本工具。 AWT 由 Java 中的java.awt 包提供,里面包含了许多可用来建立与平台无关的图形用户界面( GUI)的类,这些类被称为构件( Components) 1。 Swing:是 Java Foundation Classes( JFC)的一部分,与 ATW 的重量级构件不同,Swing 中大部分是轻量级构件。正是这个原因, Swing 几乎
15、无所不能,不但有各式各样先进的构件,而且更为美观易用。 在本俄罗斯方块游戏的实现中,主要采用 Swing 类库。 (一) 、 基本窗口类 图形用户界面的程序效果类似于 Windows 系统下运行的 程序。在俄罗斯方块游戏中用到 JFrame 、 JWindow 、 JPanel 和 JDialog 等几种窗口类。 (二) 、 原子构件: 俄罗斯方块游戏中用到的原子构件很多,如: JLabel 、 JButton 、 JColorChooser、 JTextField 、 JTextArea 等,这些构件的用法比较简单。 (三) 、 菜单类: 对一个大的 GUI 程序而言通常包括各种菜单,俄罗斯
16、方块游戏中也包含多种菜单,如: JMenu 、 JMenuItem 、 JMenuBar 等, Java 为这些菜单构件提供了相应的类。 (四) 、 事件处理: 大多数的 Java 程序通过 GUI 构件(例如按钮、窗口、菜单等)与用户进行交互,俄罗斯方块游戏也是如此。俄罗斯方块游戏与用户最重要的交互活动时用户通过键盘来控制游戏、通过按钮和菜单来设置游戏。前者在 Java 中表现为键盘事件,后者表现为动作事件。在 Java 中事件由分层的事件类表示,而接口则描述了对特定事件的响应方法。想要处理这些事件的类就必须实现一个或多个接口以及这些接口中的方法。 (五) 、 布局管理: Java 语言中,
17、提供了布局管理器这个工具来管理组件 在容器中的布局 2。布局管理器按照布局说明选择构件的最佳位置,保证布局的总体外观在不同的操作系统下与Java 程序的描述保持一致。 一个布局管理器确定各构件在显示区域的次序、相对大小和相对位置。布局管理器在 AWT 中定义为接口, Java 提供了若干类来实现它,其中最基本的类有: FlowLayout 、 GirdLayout 、 BorderLayout 。 (六) 、 图形类与图形的绘制: 使用 Graphics 类提供的绘图方法“ public void paint(Graphics g)”可以画出线条、矩形、 圆形等图形。 3 由于 Frame 类
18、继承于 Component 类,所以可以通过覆盖所继承的 paint 方法来进行绘图。还有一种很流行的绘图方法,即创建一个单独的类,这个类继承于 Canvas 类并且覆盖 paint 方法。俄罗斯方块游戏采用的是继承于 Canvas 类的方式。 Graphics 类 Graphics 类用于在一个可视构件内绘图。一个 Graphics 对象包含了绘图所必需包含的信息,其中包括坐标、色彩、字体和剪贴板区。绘图在一个二维整数坐标系中进行,该坐标的原点在构件的左上角。 X 轴在水平方向上从左至右增长, Y 轴在垂直方向上从上至下增长。 Canvas 类 Canvas 是一个具有自己坐标系统的构件,使
19、用布局管理器可以确定它在其他构件中的位置。 Canvas 继承 于 Component 类,并 继承了它的 paint(Graphics g)、update(Graphics g)以及 repaint()方法。 使用 Canvas作为绘图工具时首先创建一个类继承于 Canvas类并且覆盖 paint方法,再将这个类作为一个成员加入到类似于 Frame 或 Applet( JFrame 或 JApplet)的类中,用某种布局管理器对其进行定位。这 个类需要完成如下工作: Frame 或 Applet( JFrame 或 JApplet)作为控制者确定所有构件的位置、处理用户的输入、处理其他对象的
20、交互。 利用 Canvas 处理绘图,它的最重要的方法是 paint,该方法可以被覆盖。在必要的时候还可以自己定义一些用于绘图的辅助方法。 无论使用 Graphics 还是使用 Canvas 作为图形对象,都可在需要更新时自动调用repaint 方法。 repaint 方法也可以直接在绘图程序中调用。在 repaint 中需要调用update 方法, update 方法在清除屏幕后再调用 paint 方法。 paint 方法也可以被实际应用需要的绘图代码进行覆盖。 二 、 Java 多线程机制 俄罗斯方块的实现充分利用了 Java 的线程功能。在游戏过程中需要对玩家的控制进行实时处理。由于游戏
21、中方块的动态性,每个方块都有一定的生命周期,所以选用线程来实现方块。一个方块用一个线程对象实现,该类继承于 Thread 类,当一个方块出现时也就表示一个线程产生并开始运行。通过对键盘消息的响应,实现移动、下落、变形等操作。 利用多线程可以使整个游戏的结构更加松散耦合,使资源更加平衡,使用户的操作更加方便。 三 、 Java 与网络通信 网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通信。在网络编程中有三个主要问题: 4 如何准确定位网络上的一台或多台主机。 如何进行连接。 连接后如何可靠高效地进行数据传输。 这几个问题也是实现俄罗斯方块双人对战版游戏的关键所在。下面首先了解如何实
22、现主机定位、建立通信和数据传输。 (一) . 主机定位 在 TCP/IP 协议中 IP 层主要负责网络主机的定位、数据传输的路由,由 IP地址可以唯一地确定 Internet 上的一台主机。 TCP 则提供面向应用的数据传输机制,这是网络编程的主要对象 ,一般情况下不需要关心 IP 层是如何处理数据的。 通常在一台主机上总是有多个进程 需要网络资源进行网络通信。准确的讲网络通信的对象不是主机,而是主机中运行的进程。这是仅通过主机名或 IP 地址来标识这么多进程显然是不够的。端口号就是为了在一台主机上提供更多的网络资源而采取的一种手段也是 TCP 提供的一种机制。只有通过主机名或 IP 地址与端
23、口号的组合才能唯一确定网络通信中的对象,即进程。 (二) . 建立通信 网络数据通信具有两种不同的传输机制:一种是面向连接的通信协议,这种传输方式在数据传送前必须先在两端建立连接,并且所传送的数据不会丢失,这种方式称为 TCP;另一种方式则是面向非连接的方式,即传送数据前无需先建立连接,而是将 所要传送的数据包成一个个分组再传送,使用这种方式时,由于没有额外 的控制,所以传送的数据可能丢失,这种方式成为 UDP。 TCP和 UDP都是传输层上的通信协议,也是一般 TCP/IP网络上最常使用的通信协议,且各有用途。在 Java 中以类库的形式提供了对这两种不同协议的支持。为了提高俄罗斯方块游戏数
24、 据传输的可靠性,双人对战版游戏的开发将通过 TCP 通信技术实现游戏中的数据传输。 (三) . 数据传输 通信机制建立后就要进行数据传输,即要在这个通信机制上建立数据流。如果要将数据发往对方,则要建立数据输出流;如果要读取数据则要建立数据输入流。特别是如果要保存和读取整个对象,则需要创建一些存储对象的成员变量和读取成员变量的方法,而且对象中的成员变量最好能够自动地被保存和读取。 Java 可以支持将对象作为一个整体通过流进行传输和存储,但必须将对象序列化后才能保证有效地存储和读取对象。 5 第二章 可行性研究 第一节 引言 系统开发的总体任务是实现游戏的可操作性、美观性、及时性。本游戏开发过
25、程遵循软件工程规范,采用结构化和面向对象分析设计方法。主要实现 windows 的 GUI 程序开发,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键及空格键来对游戏进行操作。 下面从技术、经济、操作、法律三个方面分析本系统的可行性 : 第二节 技术可行性 可用于本游戏的编程语言有 Java 、 VC+、 C#.NET 等,考虑到编写程序的难易程度,和对语言的了解程度以及各种编程语言自身的特点,选择乐 Java 作为编程语言进行开发。 首先 ,作为一种程 序设计语言 ,Java 是一种 简单 的 、 面向对象的、分布式的、健壮的、安全的、结构中立的、易移植的、多线程的动态语言。它 不依
26、赖于机器的结构 , 并且提供了并发的机制、具有很高的性能。其次 ,它最大限度地利用了网络 , Java 的小应用程序可在网络上传输而不受 CPU 和环境的限制。另外 ,Java 还提供了丰富的类库 ,使程序设计者可以很方便地建立自己的系统。 同时还利用 了 MySQL 数据库系统作为其后台数据库, 实现排行榜的存储和查询, 确保了该系统中数据处理的高效性、快速性和安全性 。 第三节 经济可行性 本游戏 是为 丰富人们业余生活 开发的,规模适中,工作复杂性低,实用性强。从开发人力、物力、时间上考虑,开发成本少。而且利用了 开源开发环境 MyEclipse8.5, 加快了开发进度,大大的缩短了开发
27、周期,节省了人力、物力、时间,提高了项目开发的效率,降低了开发成本。由于需求分析完整,减少了很多后期维护的复杂性。另外,本系统具有 很实用的 现实意义。 因此,从经济角 度考虑 本系统 的开发在经济上是完全可行的。 第四节 操作可行性 本游戏是采用 java 的 GUI ( 图形用户界面 ) 组件创建的简单有好的操作界面,运6 行也效果简单明了,所有功能均根据基本需求进行开发。 强调人 机 环境三者作为一个系统进行总体设计。使操作更人性化,减轻 了用户 的认知负担,使其更适合用户的操作需求 。 对所有数据的输入进行完整性和合法性检查,尽量减少误操作。因此 在 操作上是可行的。 第五节 法律可行
28、性 本游戏的开发作为毕业课程设计以提高分析和解决实际问题的能力,以个人为单位,仅供个人平常娱乐所用, 所用他人的成果部分都已注明 。 所以不存在侵权的问题。 该软件是合法的, 不会引起任何社会问题。因此,从法律上考虑本系统是可行的。 第 六 节 结论 综上所述, 本游戏在 技术方面、经济方面、操作方面、法律方面 均是 可行 的,由此得出结论:本 游戏软件 的技术成熟、完备 。各方面均无重大问题, 因此本 游戏软件 可开始 着手编写 。 第 三 章 需求分 析 第一节 引言 需求分析是软件 定义时期的最后一个阶段 ,也是关系到软件开发成败的关键步骤。它的基本任务是准确回答“系统必须做什么?”这个
29、问题 2。即确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求 3。 在这个阶段中,开发者要做大量的调查和研究,收集信息,明确系统功能。需求分析的结果是系统开发的基础,它的成功与否直接关系到项目的成败和软件的质量。 对软件需求的理解程度是决定软件开发工作成功与否的至关重要的环节,需求分析的任务是发现、规范的过程,有益于提高软件开发过程中的能见度;便于对软件开发过程进行控制与管理;便于采用工程方法开发软件,提高软件的质量;便于开发人员、维护人员、管理人员之间的交流、协作。 第二节 开发意图 竭力为广大俄罗斯方块游戏爱好者提供一款趣味性强、容易学、上手快的益智休闲类游戏,来
30、丰富大家的业余生活。 7 第三节 游戏 功能分析 一 、 项目目标 项目实现了俄罗斯方块游戏的所有基本功能,同时,为了满足玩家的个人需求,在游戏中加入了背景音乐和音效等效果,从而使游戏从感官上更加吸引玩家;在单机版中设置了当游戏窗口最小化时,游戏能够自动暂停,窗口恢复时游戏自动继续的功能以方便玩家的游戏操作;在双人对战版中加入了玩家自主设置键盘的操作,从而使操作更加简单,更容易上手,且不易失误。力争使游戏具有可靠性,安全性,完整性,灵 活性,开发出一款更加适合人们需求的俄罗斯方块游戏。 二 、 系统概述 屏幕上有一个 X列 Y行 的区域,计算机自动产生 7种不同形状的方块,并出现在区域的最顶端
31、,然后每过一个固定的时间向下落移动一格。玩家可用上、下、左、右及空格键来控制方块的旋转和移动,以便按照玩家所需要的形态和位置落下,不过前提是方块移动和旋转后的位置必须是空的。这 7 种方块可以旋转 90、 180、 270,因此每种方块有 4 种状态, 7 种方块总共有 28 种状态。 另外,在游戏区域产生一个新的方块的一瞬间,立即产生下一个下 落 方块的形状并在提示区域的左上方有预 先提示。同时,在游戏界面的右下方,将显示玩家所得的分数以及游戏的 难度 级别。每当游戏玩家成功消除一行方块时,将按照一定的算法计算出所得分数,并修改游戏状态区域的分数和行数的数值。本游戏提供了 十 个游戏级别,用
32、户可根据自己的兴趣选择相应的级别。 下 落 方块可以通过旋转改变其显示形状,并且不断地往下 落 ,直到它接触到游戏区域底部或者其他已经 垒叠 起 来 的下 落 方块。当一个下 落 方块到达游戏区域底部或者接触到其他已经 垒叠 起的下 落 方块后,其位置 即 确定下来 , 并占有该空间的位置区域。 如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,垒在其上的方块将按照一定的算法 落下来 代替 该 行空间。游戏的结束是以下 落 方块的顶部到达游戏区域顶部作为判断依据 ,若 存在空格的方块填满整个窗口,则游戏失败。 系统默认设置使用右边的窗口,用光标操作:“”左移一格;“”右移一格;“”变形;“”下移一格;“空格”丢下方块。双人对战版中玩家还可以定义自己的习惯的按键来操作游戏。 三 、 系统运行环境 硬件环境:内存: 512M,硬盘: 256M, cpu: 1.8HZ 以上 软件环境: MyEclipse8.5, JDK1.6 和 MySQL 数据库。 四 、 系统功能需求 (一)、 游戏主界面功能需求 良好的用户界面,能够在视觉上吸引玩家。为了使界面简洁美观,需要在主界面中