基于java的俄罗斯方块的设计与实现.docx_第1页
基于java的俄罗斯方块的设计与实现.docx_第2页
基于java的俄罗斯方块的设计与实现.docx_第3页
基于java的俄罗斯方块的设计与实现.docx_第4页
基于java的俄罗斯方块的设计与实现.docx_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要随着社会日新月异的变化和互联网的飞速发展,计算机已经普及到人们的日常生活中,网络也成为人们生活中的重要组成部分。好的游戏能够给人们的生活带来健康愉快的补充,唯美的艺术享受,一定的教育功效。俄罗斯方块游戏作为一款风靡全球的最经典的益智休闲游戏之一,已经成为老幼皆宜的小游戏。对一般用户来说,它的规则简单,容易上手,但游戏过程却变化无穷。本游戏的设计综合了单机版与双人对战版两种模式,用户可任选一种进行游戏。与通常俄罗斯方块游戏的不同之处在于:在消除满行方块时,方块的颜色会发生变化,以此来提示用户。另外,本游戏还增加了背景音乐和音效的播放功能。单机版中增加了排行榜的功能,游戏结束时,用户可通过对话框输入自己的姓名并存储到排行榜数据表中,如果进入前50名,即可在排行榜上看到自己的游戏记录。双人对战版,实现了人和人之间的对战,提高了游戏的互动性和娱乐性。既能使用户享受到游戏中的乐趣,又能为用户提供一个展现高超技艺的场所。本游戏是采用java的GUI ( 图形用户界面) 组件创建的,强调人机环境三者作为一个系统进行总体设计。使操作更人性化,减轻了用户的认知负担,使其更适合用户的操作需求。关键词 俄罗斯方块;单机版;双人对战版;图形用户界面AbstractWith the rapid change of 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 life. 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 design 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 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 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 skill 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 it even more suitable for the demand of users.KEY WORD Tetris; Single-player game; Double-players games; Graphical User Interface目录第一章绪 言1第一节 选题背景及意义1第二节 选题目的1第三节 研究内容1第二章 可行性研究2第一节引言2第二节 技术可行性2第三节 经济可行性2第四节 操作可行性2第五节 法律可行性2第六节 结论2第三章 需求分析2第一节 引言2第二节 开发意图2第三节 游戏功能分析2第四节 游戏的UML基本模型2第四章 总体设计2第一节 总体设计概述2第二节 总体设计思想2第三节 系统的类图2第四节 游戏的组件图2第五节 游戏的配置图2第六节 面向连接的Socket的通信机制2第七节 数据库设计2第八节 游戏的总体流程图2第五章 详细设计与实现2第一节详细设计概述2第二节 游戏主界面设计与实现2第三节 俄罗斯方格类的设计与实现2第四节 游戏块的设计与实现2第五节 游戏控制的设计与实现2第六节 单机版俄罗斯方块游戏的设计与实现2第七节 双人对战俄罗斯方块游戏的设计与实现2结束语2谢辞2参考文献2第一章 绪 言第一节 选题背景及意义游戏软件是一种与文化背景密切联系的产品,具有很强的民族性和丰富的文化内涵。伴随着游戏软件在市场上的销售,与其相关的文化也随之传播。因此发展我国自主的益智休闲的游戏软件已是当务之急。游戏是一种基于计算机的应用软件,是新型的休闲娱乐方式。当前开发的游戏软件应该做到知识性、娱乐性、趣味性、教育性相统一。俄罗斯方块作为最经典的益智休闲游戏之一,截至2009年已经发售了1.25亿份,受到50多个国家和地区的玩家喜爱,有超过50种语言的版本,运行在几十种游戏平台上,从掌机、街机、个人电脑,到手机和PDA。本游戏根据软件工程有关的规范,以合理的开发原则,设计出综合了单机版和双人对战版两种模式的俄罗斯方块游戏,给人们的生活带来唯美的艺术享受和健康愉快的补充。第二节 选题目的改善现存俄罗斯方块游戏的单一模式,开发出一个可操作性、美观性、及时性的俄罗斯方块游戏。本游戏综合了单机版和双人对战版两种模式,用户可任选一种进行游戏。方便简单又快捷,是娱乐休闲的好方法。游戏中提供了漂亮美观的界面和动听的音乐,使得游戏的视觉表现与用户界面及背景音乐,融合为有机的整体,给人们带来更为丰富的娱乐和体验,同时也给玩家带来无限激情。在当前的游戏开发领域中,Java 有自己的独到之处,用Java编写的代码简单明了、可移植性强,所以本游戏的开发采用面向对象的设计方法,采用开源开发环境MyMyEclipse8.5,界面利用Java Swing提供的图形类实现,游戏块的运行采用多线程(Thread)机制。第三节 研究内容本游戏包括两种游戏模式:单机版和双人对战版。在整个游戏的开发过程中涉及到Java基本知识的大部分内容,如事件、线程、动画、双缓冲图像、图形界面、Socket数据传输等方面的知识。主要内容如下:一、 Java GUI 编程利用Java 实现的俄罗斯方块几乎能用到Java GUI 的所有方面,其中包括Sun 公司为Java 提供的两个图形界面类库:AWT:其中提供了建立和设置Java的图形用户界面的基本工具。AWT 由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类被称为构件(Components)1。Swing:是Java Foundation Classes(JFC)的一部分,与ATW 的重量级构件不同,Swing 中大部分是轻量级构件。正是这个原因,Swing 几乎无所不能,不但有各式各样先进的构件,而且更为美观易用。在本俄罗斯方块游戏的实现中,主要采用Swing类库。(一)、基本窗口类图形用户界面的程序效果类似于 Windows 系统下运行的程序。在俄罗斯方块游戏中用到 JFrame 、JWindow 、JPanel 和 JDialog 等几种窗口类。(二)、原子构件:俄罗斯方块游戏中用到的原子构件很多,如:JLabel 、 JButton 、 JColorChooser、 JTextField 、 JTextArea 等,这些构件的用法比较简单。(三)、菜单类:对一个大的GUI 程序而言通常包括各种菜单,俄罗斯方块游戏中也包含多种菜单,如:JMenu 、 JMenuItem 、JMenuBar 等,Java 为这些菜单构件提供了相应的类。(四)、事件处理:大多数的Java 程序通过GUI 构件(例如按钮、窗口、菜单等)与用户进行交互,俄罗斯方块游戏也是如此。俄罗斯方块游戏与用户最重要的交互活动时用户通过键盘来控制游戏、通过按钮和菜单来设置游戏。前者在Java 中表现为键盘事件,后者表现为动作事件。在Java 中事件由分层的事件类表示,而接口则描述了对特定事件的响应方法。想要处理这些事件的类就必须实现一个或多个接口以及这些接口中的方法。(五)、布局管理:Java 语言中,提供了布局管理器这个工具来管理组件在容器中的布局2。布局管理器按照布局说明选择构件的最佳位置,保证布局的总体外观在不同的操作系统下与Java程序的描述保持一致。一个布局管理器确定各构件在显示区域的次序、相对大小和相对位置。布局管理器在AWT 中定义为接口,Java 提供了若干类来实现它,其中最基本的类有:FlowLayout 、 GirdLayout 、 BorderLayout 。(六)、图形类与图形的绘制:使用Graphics 类提供的绘图方法“public void paint(Graphics g)”可以画出线条、矩形、 圆形等图形。由于Frame类继承于Component 类,所以可以通过覆盖所继承的paint 方法来进行绘图。还有一种很流行的绘图方法,即创建一个单独的类,这个类继承于Canvas类并且覆盖paint方法。俄罗斯方块游戏采用的是继承于Canvas类的方式。 Graphics 类Graphics 类用于在一个可视构件内绘图。一个Graphics对象包含了绘图所必需包含的信息,其中包括坐标、色彩、字体和剪贴板区。绘图在一个二维整数坐标系中进行,该坐标的原点在构件的左上角。X轴在水平方向上从左至右增长,Y轴在垂直方向上从上至下增长。 Canvas类Canvas是一个具有自己坐标系统的构件,使用布局管理器可以确定它在其他构件中的位置。Canvas继承于Component 类,并继承了它的paint(Graphics g)、update(Graphics g)以及repaint()方法。使用Canvas作为绘图工具时首先创建一个类继承于Canvas类并且覆盖paint方法,再将这个类作为一个成员加入到类似于Frame或Applet(JFrame 或JApplet)的类中,用某种布局管理器对其进行定位。这个类需要完成如下工作:Frame 或Applet(JFrame 或JApplet)作为控制者确定所有构件的位置、处理用户的输入、处理其他对象的交互。利用Canvas处理绘图,它的最重要的方法是paint,该方法可以被覆盖。在必要的时候还可以自己定义一些用于绘图的辅助方法。无论使用Graphics还是使用Canvas作为图形对象,都可在需要更新时自动调用repaint方法。repaint方法也可以直接在绘图程序中调用。在repaint中需要调用update方法,update方法在清除屏幕后再调用paint方法。paint方法也可以被实际应用需要的绘图代码进行覆盖。二、 Java多线程机制俄罗斯方块的实现充分利用了Java的线程功能。在游戏过程中需要对玩家的控制进行实时处理。由于游戏中方块的动态性,每个方块都有一定的生命周期,所以选用线程来实现方块。一个方块用一个线程对象实现,该类继承于Thread类,当一个方块出现时也就表示一个线程产生并开始运行。通过对键盘消息的响应,实现移动、下落、变形等操作。利用多线程可以使整个游戏的结构更加松散耦合,使资源更加平衡,使用户的操作更加方便。三、 Java与网络通信网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通信。在网络编程中有三个主要问题: 如何准确定位网络上的一台或多台主机。 如何进行连接。 连接后如何可靠高效地进行数据传输。这几个问题也是实现俄罗斯方块双人对战版游戏的关键所在。下面首先了解如何实现主机定位、建立通信和数据传输。(一). 主机定位在TCP/IP协议中IP层主要负责网络主机的定位、数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。TCP则提供面向应用的数据传输机制,这是网络编程的主要对象,一般情况下不需要关心IP层是如何处理数据的。通常在一台主机上总是有多个进程需要网络资源进行网络通信。准确的讲网络通信的对象不是主机,而是主机中运行的进程。这是仅通过主机名或IP地址来标识这么多进程显然是不够的。端口号就是为了在一台主机上提供更多的网络资源而采取的一种手段也是TCP提供的一种机制。只有通过主机名或IP地址与端口号的组合才能唯一确定网络通信中的对象,即进程。(二). 建立通信网络数据通信具有两种不同的传输机制:一种是面向连接的通信协议,这种传输方式在数据传送前必须先在两端建立连接,并且所传送的数据不会丢失,这种方式称为TCP;另一种方式则是面向非连接的方式,即传送数据前无需先建立连接,而是将所要传送的数据包成一个个分组再传送,使用这种方式时,由于没有额外的控制,所以传送的数据可能丢失,这种方式成为UDP。TCP和UDP都是传输层上的通信协议,也是一般TCP/IP网络上最常使用的通信协议,且各有用途。在Java中以类库的形式提供了对这两种不同协议的支持。为了提高俄罗斯方块游戏数据传输的可靠性,双人对战版游戏的开发将通过TCP通信技术实现游戏中的数据传输。(三). 数据传输通信机制建立后就要进行数据传输,即要在这个通信机制上建立数据流。如果要将数据发往对方,则要建立数据输出流;如果要读取数据则要建立数据输入流。特别是如果要保存和读取整个对象,则需要创建一些存储对象的成员变量和读取成员变量的方法,而且对象中的成员变量最好能够自动地被保存和读取。Java可以支持将对象作为一个整体通过流进行传输和存储,但必须将对象序列化后才能保证有效地存储和读取对象。第二章 可行性研究第一节 引言系统开发的总体任务是实现游戏的可操作性、美观性、及时性。本游戏开发过程遵循软件工程规范,采用结构化和面向对象分析设计方法。主要实现windows的GUI程序开发,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键及空格键来对游戏进行操作。下面从技术、经济、操作、法律三个方面分析本系统的可行性:第二节 技术可行性可用于本游戏的编程语言有Java 、VC+、C#.NET等,考虑到编写程序的难易程度,和对语言的了解程度以及各种编程语言自身的特点,选择乐Java作为编程语言进行开发。首先 ,作为一种程序设计语言 ,Java是一种简单的、面向对象的、分布式的、健壮的、安全的、结构中立的、易移植的、多线程的动态语言。它不依赖于机器的结构,并且提供了并发的机制、具有很高的性能。其次 ,它最大限度地利用了网络,Java的小应用程序可在网络上传输而不受 CPU和环境的限制。另外 ,Java还提供了丰富的类库 ,使程序设计者可以很方便地建立自己的系统。同时还利用了MySQL数据库系统作为其后台数据库,实现排行榜的存储和查询,确保了该系统中数据处理的高效性、快速性和安全性。第三节 经济可行性本游戏是为丰富人们业余生活开发的,规模适中,工作复杂性低,实用性强。从开发人力、物力、时间上考虑,开发成本少。而且利用了开源开发环境MyEclipse8.5,加快了开发进度,大大的缩短了开发周期,节省了人力、物力、时间,提高了项目开发的效率,降低了开发成本。由于需求分析完整,减少了很多后期维护的复杂性。另外,本系统具有很实用的现实意义。因此,从经济角度考虑本系统的开发在经济上是完全可行的。第四节 操作可行性本游戏是采用java的GUI ( 图形用户界面) 组件创建的简单有好的操作界面,运行也效果简单明了,所有功能均根据基本需求进行开发。强调人机环境三者作为一个系统进行总体设计。使操作更人性化,减轻了用户的认知负担,使其更适合用户的操作需求。对所有数据的输入进行完整性和合法性检查,尽量减少误操作。因此在操作上是可行的。第五节 法律可行性本游戏的开发作为毕业课程设计以提高分析和解决实际问题的能力,以个人为单位,仅供个人平常娱乐所用,所用他人的成果部分都已注明。所以不存在侵权的问题。该软件是合法的,不会引起任何社会问题。因此,从法律上考虑本系统是可行的。第六节 结论综上所述,本游戏在技术方面、经济方面、操作方面、法律方面均是可行的,由此得出结论:本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写。第三章 需求分析第一节 引言需求分析是软件定义时期的最后一个阶段,也是关系到软件开发成败的关键步骤。它的基本任务是准确回答“系统必须做什么?”这个问题2。即确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求3。在这个阶段中,开发者要做大量的调查和研究,收集信息,明确系统功能。需求分析的结果是系统开发的基础,它的成功与否直接关系到项目的成败和软件的质量。对软件需求的理解程度是决定软件开发工作成功与否的至关重要的环节,需求分析的任务是发现、规范的过程,有益于提高软件开发过程中的能见度;便于对软件开发过程进行控制与管理;便于采用工程方法开发软件,提高软件的质量;便于开发人员、维护人员、管理人员之间的交流、协作。第二节 开发意图竭力为广大俄罗斯方块游戏爱好者提供一款趣味性强、容易学、上手快的益智休闲类游戏,来丰富大家的业余生活。第三节 游戏功能分析一 、项目目标项目实现了俄罗斯方块游戏的所有基本功能,同时,为了满足玩家的个人需求,在游戏中加入了背景音乐和音效等效果,从而使游戏从感官上更加吸引玩家;在单机版中设置了当游戏窗口最小化时,游戏能够自动暂停,窗口恢复时游戏自动继续的功能以方便玩家的游戏操作;在双人对战版中加入了玩家自主设置键盘的操作,从而使操作更加简单,更容易上手,且不易失误。力争使游戏具有可靠性,安全性,完整性,灵活性,开发出一款更加适合人们需求的俄罗斯方块游戏。二、系统概述屏幕上有一个X列Y行的区域,计算机自动产生7种不同形状的方块,并出现在区域的最顶端,然后每过一个固定的时间向下落移动一格。玩家可用上、下、左、右及空格键来控制方块的旋转和移动,以便按照玩家所需要的形态和位置落下,不过前提是方块移动和旋转后的位置必须是空的。这7种方块可以旋转90、180、270,因此每种方块有4种状态,7种方块总共有28种状态。另外,在游戏区域产生一个新的方块的一瞬间,立即产生下一个下落方块的形状并在提示区域的左上方有预先提示。同时,在游戏界面的右下方,将显示玩家所得的分数以及游戏的难度级别。每当游戏玩家成功消除一行方块时,将按照一定的算法计算出所得分数,并修改游戏状态区域的分数和行数的数值。本游戏提供了十个游戏级别,用户可根据自己的兴趣选择相应的级别。下落方块可以通过旋转改变其显示形状,并且不断地往下落,直到它接触到游戏区域底部或者其他已经垒叠起来的下落方块。当一个下落方块到达游戏区域底部或者接触到其他已经垒叠起的下落方块后,其位置即确定下来,并占有该空间的位置区域。如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,垒在其上的方块将按照一定的算法落下来代替该行空间。游戏的结束是以下落方块的顶部到达游戏区域顶部作为判断依据,若存在空格的方块填满整个窗口,则游戏失败。系统默认设置使用右边的窗口,用光标操作:“”左移一格;“”右移一格;“”变形;“”下移一格;“空格”丢下方块。双人对战版中玩家还可以定义自己的习惯的按键来操作游戏。三、系统运行环境硬件环境:内存:512M,硬盘:256M,cpu:1.8HZ以上软件环境: MyEclipse8.5,JDK1.6和MySQL数据库。四、系统功能需求(一)、 游戏主界面功能需求良好的用户界面,能够在视觉上吸引玩家。为了使界面简洁美观,需要在主界面中添加背景图片来渲染游戏的气氛,同时为了便于玩家的操作,需要设置四个按钮供玩家选择,分别是“单机版”、“双人对战版”、“帮助”、“退出”。这样的设置让用户一目了然。另外,为了能够实时的显示游戏的进度,还需在主界面下方添加进度条,用动态感来吸引玩家。(二)、 单机版游戏功能需求为了满足广大玩家的需要,本游戏特别设置了单机版游戏,这项功能可以让玩家在短期能提高游戏水平,以便更快地适应双人对战版游戏。单机版游戏的界面采用JFrame界面来进行设计。使游戏界面更加美观大方。该界面由4个模块构成,分别是菜单条、菜单项、控制面板和游戏画布。其中菜单条包括游戏、控制、窗口风格、音乐控制、帮助四个菜单。控制面板包括预提示面板,当前信息提示面板、游戏控制按钮面板和背景音乐控制按钮面板。在单机版游戏中,玩家可以根据自己的需要设置游戏级别。另外,为了满足玩家的听觉需求,还增加了自动播放背景音乐的功能、更换背景音乐的功能、暂停背景音乐的功能以及音效效果。为了满足玩家的心理需求,还添加了排行榜的功能,方便玩家及时记录自己游戏战绩。为了进一步方便玩家的实际操作,还为部分操作添加了快捷键的功能,用户无需点击按钮或菜单项即可达到游戏目的。(三)、 双人对战版游戏模块功能需求为了增强玩家对本游戏的兴趣,还特别设计了双人对战版游戏。双人对战版具有单机版游戏的基本功能。除此之外,还能实时地显示对方玩家的游戏状态。这样可以根据对方的状态,及时改变自己的游戏策略。本功能改变了以往双人版只能在同一台机器上运行的模式。实现了网络双人对战,可以用一台机器作为服务器运行,另一台机器作为客户端运行,也可以在同一台机器上运行。对战双方的数据无需通过其他服务器处理,因此实现的是点对点的通信。(四)、 俄罗斯方块的需求良好的方块形状设计,绘制七种常见的基本图形,各个方块要能实现旋转变形、移动和显示。方块的旋转可设为顺时针或逆时针,本游戏采用逆时针变形。(五)、 键盘处理事件的需求方块下落时,可通过键盘方向键(上、下、左、右、空格键)对该方块进行向上(旋转变形),向下移动、向左移动、向右移动和丢下操作。双人对战版玩家还可以根据自己的需要设置键盘的操作。(六)、 显示需求当方块填满一行时可以消行,剩余方块向下按照一定的算法向下移动并统计分数。当达到一定的分数时游戏升级,并显示游戏升级信息;当游戏方块填满整个屏幕时,游戏结束,并显示游戏结束信息。本游戏共设置十个级别,方块的下落速度随着级别的升高而加快。第四节 游戏的UML基本模型一、 游戏的用例图用例图是由软件需求分析到最终实现的第一步,它描述人们希望如何使用一个系统。用例图在需求分析阶段有很重要的作用,它是作为参与者的外部用户所能观察到的系统功能的模型图,它显示多个外部参与者以及他们与系统提供的用例之间的连接4。整个开发过程都是围绕需求阶段的用例进行的。通过分析确定本系统的抽象参与者有:计算机和玩家两类。计算机(computer)。计算机可以实现自动播放背景音乐、方块定时下移、随机产生方块、自动消除满行、更新分数、报告游戏结果等。计算机控制游戏的用例图如图3-1所示。图3-1 计算机控制游戏的用例图玩家(player)。玩家是本游戏的重要参与者,其中单机版玩家(SinglePlayer)和双人对战版玩家(DoublePlayer)是对玩家的泛化。玩家可以选择游戏模式、控制方块。控制方块用例包括旋转方块、左移方块、右移方块、下移方块、丢下方块等用例。单机版玩家和双人对战版玩家除了包含这些用例外,还各自有相应的用例。其中:单机版玩家可以控制游戏和设置游戏,控制游戏用例又包括控制游戏状态和控制背景音乐。控制游戏状态用例包括开始游戏、暂停游戏、继续游戏、从新开始、退出等用例,其中从新开始是对开始游戏用例的扩展;控制背景音乐包括更换音乐、暂停播放和继续播放三个用例。设置游戏包括设置方块颜色、设置背景颜色、设置难度级别、设置窗口状态四个用例,其中设置窗口状态用例又包括设置系统平台风格、设置主题风格和设置跨平台风格三个用例。双人对战版玩家也可以控制游戏和设置游戏,但与单机版玩家不同,控制游戏用例包括控制背景音乐、建立游戏、连接游戏和退出游戏四个用例,控制背景音乐用例又包括暂停播放和继续播放两个用例;设置游戏用例包括设置操作键用例。玩家操作游戏的总的用例图如图3-2所示,从图中可以清楚地看到参与者之间的泛化关系和各个参与者所参与的用例,以及用例之间的关系。图3-2玩家操作游戏的用例图二 、游戏的包图包图是维护和控制系统总体结构的重要建模工具4。创建包图是在为了在逻辑上把一个复杂的系统模块化,进而高效地组织Java源代码。游戏的包图如图3-3所示,通过该图可以清楚地看到游戏中各个包之间的关系,为后续的游戏设计提供方便。图3-3 游戏的包图三、 游戏的状态图状态图是系统分析的一种常用工具,它能够表征系统的变化状态。单机版游戏的状态图如图3-4所示。双人对战版游戏服务器端和客户端的状态图分别如图3-5和图3-6所示。图3-4 单机版游戏状态图单机版:玩家进入单机版游戏模式后,可以点击“开始”按钮开始游戏,游戏进行过程中如果游戏最小化或者玩家点击“暂停”按钮或菜单项,则游戏暂停。如果游戏界面恢复或玩家点击“继续”按钮或菜单项则游戏可以继续,游戏进行过程中玩家还可以点击“停止”按钮或菜单项,使游戏停止。无论游戏是否进行,玩家都可以点击“退出”按钮或菜单项退出游戏。图3-5 双人对战版服务器端状态图服务器端:玩家进入双人对战版游戏模式后,可以建立连接,使服务器在某个端口提供监听服务,并等待直到接收到来自客户端玩家的服务请求从而启动服务器。双方建立连接后玩家可以开始游戏,当有一方玩家失败时,游戏结束玩家可以重新建立连接或者选择退出游戏并关闭服务器。图3-6 双人对战版客户端状态图客户端:如果玩家作为客户端加入游戏,首先应连接游戏,向服务器起的监听端口发出服务请求。如果连接失败还可以重新连接。一旦连接成功即可开始游戏,当有一方玩家失败时,游戏结束,此时玩家可以选择重新连接或退出游戏。四、游戏的活动图活动图是UML用于对系统的动态行为建模的一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流4。活动图在本质上是一种流程图。俄罗斯方块游戏总的活动图如图3-7所示。玩家进入游戏主界面后,可以选择游戏模式:单机版或双人对战版。选择相应的模式即可进入游戏。单机版:如果玩家选择了单机版,即可对游戏进行相应的设置,包括游戏难度级别设置、方块颜色设置、背景颜色设置、背景音乐设置、窗口风格设置等。然后可以开始游戏。玩家也可先开始游戏,再进行相应的设置。一旦游戏开始,玩家即可对游戏的状态进行控制,包括暂停游戏、继续游戏和退出游戏的操作。双人对战版:如果玩家选择了双人对战版,即可建立连接进入服务器状态或连接游戏进入客户端状态,当双方玩家成功建立连接后,即可开始游戏。进入双人对战状态。当一方玩家失败时,游戏结束,玩家可退出游戏。图3-7 俄罗斯方块游戏的活动图五 、游戏的时序图时序图描述了对象之间传统消息的时间顺序,它用来表示用例中的行为顺序。当执行一个用例行为时,时序图中的每条消息对应了一个类操作或状态中引起转换的触发事件4。游戏中单机版游戏的时序图如图3-8所示,从图中可以看到,单机版游戏的时序图涉及了8个对象:player(玩家)、game(游戏主类)、music(音乐文件)、controlPanel(控制面板)、canvas(画布)、block(方块类)、enterframe(输入姓名对话框)、heroframe(排行榜)。游戏的动作从玩家进入游戏开始,背景音乐自动播放,然后玩家可以设置游戏难度级别和方块及背景颜色,设置成功后玩家可以通过点击“开始”按钮进行游戏。游戏过程中,不断检查是否有满行方块并检查游戏是否结束,如果有满行就移除,当方块填满整个画布时,游戏结束。此时弹出输入姓名对话框,玩家输入姓名后点击“确定”按钮,将姓名插入到排行榜,排行榜就会自动显示出来。图3-8 单机版游戏的时序图双人对战版游戏服务器端玩家的时序图和客户端玩家的时序图分别如图3-9(a)和(b)所示。该时序图涉及了8个对象:player(玩家)、game(游戏主类)、music(音乐文件)、menu(游戏菜单类) 、controlPanel(控制面板)、canvas(画布)、block(方块类)、data(数据传输类)。服务器端:玩家进入游戏后,背景音乐自动播放,玩家可以通过控制面板控制背景音乐,然后通过菜单项建立连接,同时还可以设置操作键。当有客户端成功连接上时,玩家可以点击控制面板上的“开始”按钮进行对战,此时玩家可以控制方块的状态,通过画布绘制方块来显示游戏进程,不断检查是否有满行方块并检查游戏是否结束,如果有满行就移除,当有一方玩家游戏失败时,发出游戏结束消息给游戏主类,此时游戏结束。图3-9(a) 服务器端玩家的时序图客户端:玩家进入游戏后,背景音乐自动播放,玩家可以通过控制面板控制背景音乐。同时设置主机和端口号向服务器端发出连接游戏请求。当成功连接服务器时,玩家可以点击控制面板上的“开始”按钮进行对战,此时玩家可以控制方块的状态,通过画布绘制方块来显示游戏进程,不断检查是否有满行方块并检查游戏是否结束,如果有满行就移除,当有一方玩家游戏失败时,发出游戏结束消息给游戏主类,此时游戏结束。图3-9 (b) 客户端玩家的时序图第四章 总体设计第一节 总体设计概述经过了需求分析阶段的工作,系统必须“做什么”已经清楚了,现在是决定“怎么做”的时候了。总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题2。通过这个阶段的工作将划分出组成系统的物理元素。总体设计部分的重要任务就是确定软件的总体结构,也就是要确定系统中每个程序是有哪些模块组成的,以及这些模块之间的关系,同时也包括数据库的设计。第二节 总体设计思想俄罗斯方块游戏设计的主要从以下12个方面进行构思:(1)游戏主界面的设计。(2)俄罗斯方格的表示。(3)俄罗斯方块的表示。(4)俄罗斯方块的旋转。(5)俄罗斯方块的运动情况(包括向左、向右、向下和丢下)。(6)俄罗斯方块的自动消行功能。(7)游戏级别的自由选择。(8)游戏得分的计算。(9)游戏菜单选项的设计及功能实现。(10)游戏背景音乐的播放功能。(11)俄罗斯方块单机版的具体实现。(12)俄罗斯方块双人对战版的具体实现。首先,是定义与游戏相关的数据的存储方法,分为两个主要的部分:一个是当前的方块,需要保存位置、当前的旋转状态;另一个是屏幕区域的状态,这可以用一个二维数组来表示。其次,分析得到按键的含义,做出响应,响应模块:“左移”、“右移”、“下移”、“丢下”和“旋转”几个模块,负责改变当前方块的状态数据;画方块模块:位置移动后,把方块画到新的位置之上;检查模块:在每次改变状态之前,对方块企图占用的区域进行检查。如果无处可放,则此次移动失败。如果方块到区域底端了,则应该固定在当前位置,这可以通过调用前面的画方块模块来实现,同时再产生一个新的方法。这样还需要写一个产生新方块的模块。每次当方块到底的时候,都需要检查一下是否有新的层排满了,如果有,则应该消层,如果这个位置已被占用,则游戏结束,这需要通过调用前面的检查模块来实现。最后检查系统时间,规定每过一个指定的时间间隔就调用一次方块下落模块。俄罗斯方块是一个非常复杂但比较有趣并且耐玩的游戏,游戏中共有7种方块,每种方块由4个方格组成,如图4-1所示。 图4-1 游戏中的7种方块第三节 系统的类图类图描述系统中的类的静态结构,它不仅定义系统中的类,描述类之间的联系,还包括类的内部结构(类的属性和操作)5。通过分析用例和问题域,就可以等到相关的类,然后再把逻辑上相关的类封装成包。一 、俄罗斯方格类的类图图4-2所示为俄罗斯方格类的类图图4-2 俄罗斯方格类的类图RussiaBox:方格类,是组成俄罗斯方块的基本元素,用自己的颜色来表示块的外观。二、 单机版俄罗斯方块游戏的类图图4-3所示为单机版俄罗斯方块游戏的类图。其中包括: SingleBlock:单机版游戏的方块类,控制块的移动、下落、旋转变形等。 SingleControlPanel:单机版游戏的控制面板类,上边安放预显即将出现的方块类型的窗口、难度级别、得分、游戏状态控制按钮、背景音乐控制按钮。 SingleGameCanvas:单机版游戏的画布类,画布类通过检查方格颜色来体现方块的移动情况。 Music:单机版游戏的音乐类,实现背景音乐播放功能、更换背景音乐功能、暂停播放功能、继续播放功能和各种音效播放功能。 SingleBlocksGame:单机版游戏的主类,负责游戏的全局控制。内含:一个画布类的实例引用,一个保存当前活动块实例的引用,一个保存当前控制面板实例的引用。图 4-3 单机版俄罗斯方块游戏类图 EnterName:单机版游戏的输入姓名对话框,按“确定”按钮将玩家姓名和成绩插入到数据库(heroframe)的hero表中,并显示排行榜,按“取消”按钮退出此对话框。 HeroFrame:排行榜类,显示玩家的名次、姓名和分数。按成绩由高到低显示前50名玩家的成绩三 、双人对战版俄罗斯方块游戏的类图图4-4所示为双人对战版俄罗斯方块游戏的类图。其中包括: DoubleBlock:双人对战版游戏的方块类,控制块的移动、下落、变形等。DoubleGameMenu:双人对战版游戏的菜单类,实现游戏菜单和菜单项。图4-4双人对战版俄罗斯方块游戏的类图DoubleControlPanel:双人对战版游戏的控制面板类,上边安放预显即将出现的方块类型的窗口、难度级别、得分、控制按钮以及对方玩家的游戏状态窗口。主要用来控制游戏进程。 DoubleGameCanvas:双人对战版游戏的画布类,负责每一个方块的绘制。 Data:传输对象类,为对象流建立的数据传递对象。 DoubleMusic:双人对战版游戏的音乐类,实现背景音乐播放功能、暂停播放功能、继续播放功能和各种音效播放功能。 DoubleBlocksGame:双人对战版游戏的主类,负责游戏的全局控制,继承于菜单类。第四节 游戏的组件图组件图描述了软件的各种组件和它们之间的依赖关系。组件图中通常包括3种元素:组件、接口和依赖关系。每个组件实现一些接口,并使用另一些接口。图4-5所示的是游戏的组件图。图4-5 游戏的组件图第五节 游戏的配置图图4-6 游戏配置图配置图描述了运行软件的系统中硬件和软件的物理结构,即系统执行处理过程中系统资源元素的配置情况以及软件到这些资源的映射。图4-6所示的是游戏的配置图。第六节 面向连接的Socket的通信机制Socket是两个应用程序间用来进行双向数据传输的网络接入点,它由两部分组成:地址和端口号。地址是指应用程序所在网络主机的地址,而端口号是应用程序进行数据传输的端口地址。由于Socket采用客户机/服务器模式,因此在Java中有两种Socket:服务器Socket和客户Socket。两个Socket之间需要建立专线连接,如图4-7所示。图中格子代表逻辑端口,小椭圆代表Socket连接正在使用的两个逻辑端口。IP:00 ClientIP:01Server图4-7 Socket连接的示意图利用面向连接的Socket通信机制可以使两台计算机连接到一起,并相互通信。一旦两台计算机完成了图4-7所示的连接即可进行对话。客户机和服务器之间的区别只有在客户机视图同服务器连接的时候才表现出来,一旦连接成功就变成了一种双向通信,它们的地位就对等了。所以服务器的主要任务是监听要求建立连接的请求,而客户机的任务是试着与一台服务器建立连接,一旦连接完成,则无论对于服务器和客户机而言,连接都成了一个I/O数据流对象。此时可以如同读写一个普通的文件那样来对待连接。因此一旦建好连接,只需使用自己熟悉的I/O命令读取文件即可,这正是Java用于网络编程的方便之处。第七节 数据库设计一、本游戏采用的数据库MySQL数据库是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。MySQL 完全适用于网络,用其建造的数据库可在因特网上的任何地方访问,因此,可以和网络上任何地方的任何人共享数据库。与其他数据库系统进行比较时,所要考虑的最重要的因素是性能、支持、特性、认证条件和约束条件、价格等。相比之下,MySQL具有功能强、使用简单、管理方便、运行速度快、可靠性高、安全保密性强等优点。MySQL 还有一个最大的特点,那就是在Windows 系统上,其客户机程序和客户机程序库是免费的。在本游戏中,由于只有单机版的排行榜功能涉及到数据库的插入和查询,操作比较简单,不涉及复杂的操作。因此本游戏采用MySQL数据库。二、本游戏涉及的数据表本游戏中只涉及到一个排行榜(hero)表格,用来存储玩家的名次、姓名和得分。当游戏结束后,玩家可通过对话框输入自己的姓名,如果玩家不输入姓名直接点击“确定”按钮,系统将自动记录玩家的得分。并把结果输入的hero表中。表4.1为排行榜数据表(hero)。表4.1 排行榜表(hero)字段名类型长度意义可否为空关键字idint 8 序号 NY name char35玩家姓名 YN score int 18分数 NN第八节 游戏的总体流程图流程图是流经一个系统的信息流、观点流或部件流的图形代表。使用图形表示算法的思路是一种极好的方法,因为千言万语不如一张图。流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。图4-8所示为游戏的总体流程图。主要用来说明游戏的执行过程。说明:玩家进入俄罗斯方块游戏主界面后先判断是否进行单机版游戏,如果是即可开始游戏,直到游戏结束;如果不是在判断玩家是否选择双人对战版游戏,如果是即可开始游戏,直到游戏结束;如果不是,即可结束游戏。图 4-8 游戏总体流程图 第五章 详细设计与实现第一节 详细设计概述详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的“蓝图”,以后程序员将根据这个蓝图写出实际的代码。因此,详细设计的结果基本上决定了最终的程序代码的质量。第二节 游戏主界面设计与实现游戏主界面是设计的关键也是游戏主要组成部分。为了增强游戏界面的美化效果,使界面简洁直观。在主界面上添加了gif格式的图片作为背景,并添加了四个按钮和一个进度条。游戏的主界面如图5-1所示。玩家可以通过单击按钮来选择游戏模式:单机版或双人对战版。图5-1 游戏主界面 (一)、单击“单机版”按钮,进入单机游戏。同时主界面上的进度条开始刷新,当前进到100%时,主界面消失。(二)、单击“双人对战版”按钮,进入双人对战游戏。同时主界面上的进度条开始刷新,当前进到100%时,主界面消失。(三)、单击“帮助”按钮,进入游戏帮助界面,如图5-2。由于游戏操作简单,所以仅用图片帮助形式展现了帮助信息。单击“确定”按钮退出该界面。图5-2 俄罗斯方块帮助信息图5-3 退出游戏对话框

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论