1、 毕业论文 题 目 基于 JAVA 的俄罗斯方块游戏开发 学生姓名 * 学 号 * 院 系 信息工程系 专 业 通信工程 指导教师 * 二一 年 四 月 二 日 基于 JAVA 的俄罗斯方块游戏开发 * *大学 信息工程 系 摘要: 本系统是一个基于 Java ME 平台的无线网络移动端的俄罗斯方块游戏,利用 Java ME Wireless Toolkit(WTK)开发包工具在无线网络移动端上实现经典的俄罗斯方块游戏。论文开始部分对无线网络移动系统开发中常使用几种开发语言和环境作了比较,说明了选择 Java ME Wireless Toolkit 作为开发环境的的原因并对它作了相关的介绍。并
2、展示了在 WTK中打开一个项目 、把源文件打包成 JAR 包、产生混淆包的方法和过程。在系统设计时,遵循了无线网络移动端程序的startApp、 pauseApp、 destroyApp 的开发生命周期。在设计与实现方面,分成难度选择、游戏规则、方块处理这几个模块进行实现。在开发与实现的同时也讲解了俄罗斯方块这款古老而经典游戏的游戏背景、规则以及相关特性。最终展示了无线网络移动端的游戏开发的基本开发过程和设计思路。 关键词 : 无线网络移动端 ; Java ME; 俄罗斯方块 ; 游戏开发目录 1.俄罗斯方块游戏介绍 . 1 1.1 俄罗斯方块游戏的背景 . 1 1.2 俄罗斯方块游戏的规则
3、. 1 2.Java 的介绍 . 2 2.1 Java 历史介绍 . 2 2.2 Java 名字起源 . 3 2.3 Java 语言特点 . 3 2.4 Java 主要特性 . 4 2.5 Java 相关技术 . 5 3.俄罗斯方块的 Java 设计方法 . 6 3.1 Java 的编程环境 . 6 3.2 Java ME Wireless Toolkit(WTK)简介 . 7 3.3 WTK 安装过程 . 7 3.4 俄罗斯方块游戏的设计 . 8 4.俄罗斯方块游戏设计总结与心得 .22 1 1.俄罗斯方块游戏 介绍 1.1 俄罗斯方块游戏的背景 俄罗斯方块是一款风靡全球的电视游戏机和掌上游
4、戏机游戏 ,它由俄罗斯人阿列克谢 帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 俄罗斯方块 曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。 俄罗斯 方块 上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上 任何一款游戏都无法相比的。但是,谁知道这么优秀的娱乐工具,出自哪位神人之手呢? 顾
5、名思义,俄罗斯方块自然是 俄罗斯人 发明的。这位伟人叫做 阿列克谢 帕基特诺夫 。 俄罗斯方块原名是俄语 (英语是 Tetris),这个名字来源于希腊语 tetra,意思是 “ 四 ” ,而游戏的作者最喜欢网球( tennis)。于是,他把两个词 tetra 和 tennis 合而为一,命名为 Tetris,这也就是俄罗斯方块名字的由来啦。 1.2 俄罗斯方块游戏的规则 (1)一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为 10,列高为 20,以每个小正方形为单位; (2)一组由 4 个小型正方形组成的规则图形,英文称为 Tetromino,中文通称为方块, 共有 7 种,分别以 S
6、、 Z、 L、 J、 I、 O、 T 这 7 个字母的形状来命名; (3)通过设计者预先设置的随机发生器不断 地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响 ; (4)如 果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是 20 或者玩家所能见到的高度),则游戏结束。 2 具体到每一款不同的游戏,其中的细节规则都可能有千差万别,但是以上的基本规则是相同的。 2.Jav
7、a 的介绍 2.1 Java 历 史介绍 Java,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台的总称。用 Java 实现的 HotJava 浏览器(支持 Java applet)显示了 Java 的魅力:跨平台、动态的 Web、 Internet计算。从此, Java 被广泛接受并推动了 Web 的迅速发展,常用的浏览器现在均支持 Java applet。 Java 平台由 Java 虚拟机 ( Java Virtual Machine)和 Java 应用编程接口( Application Programming Int
8、erface、简称 API)构成。 Java 应用 编程 接口为 Java 应用提供了一个独立于 操作系统 的标准接口,可分为基本部分和扩展部分。在 硬件或操作系统平台上安装一个 Java 平台之后, Java 应用程序就可运行。现在 Java 平台已经嵌入了几乎所有的操作系统。这样 Java 程序可以只编译一次,就可以在各种系统中运行。 Java 应用编程接口已经从 1.1x 版发展到 1.2 版。目前常用的 Java 平台基于 Java1.4,最近版本为 Java1.7。 Java 分为三个体系 JavaSE(Java2 Platform Standard Edition, java 平台
9、标准版 ),JavaEE(Java 2 Platform,Enterprise Edition, java 平台企业版 ), JavaME(Java 2 Platform Micro Edition, java 平台微型版 )。 2009 年 04 月 20 日, oracle(甲骨文 )宣布收购 sun。 1991 年, Sun 公司的 James Gosling。 Bill Joe 等人,为电视、控制烤面包机等家用电器的交互操作开发了一个 Oak(一种橡树的名字)软件,他是 Java 的前身。当时, Oak 并没有引起人们的注意,直到 1994 年,随着互联网和 3W的飞速发展,他们用 J
10、ava 编制了 HotJava 浏览器,得到了 Sun 公司首席执行官 Scott McNealy 的支持,得以研发和发展。为了促销和法律的原因,1995 年 Oak 更名为 Java。 Java 的得名还有段小插曲呢,一天, Java 小组成员正在喝咖啡时,议论给新语言起个什么名字的问题,有人提议用 Java( Java 是印度尼西亚盛产咖啡的一个岛屿),这个提议得到了其他成员的赞同,于是就采用 Java 来命名此新语言。很快 Java 被工业界认可,许多大公司如 IBM Microsoft.DEC 等购买了 Java 的使用权,并被美国杂志 PC Magazine 评为 1995年十大优秀
11、科技产品。从此,开始了 Java 应用的新 篇章。 Java 的诞生是对传统计算机模式的挑战,对计算机软件开发和软件产业都产生了深远的影响: ( 1)软件 4A目标要求软件能达到任何人在任何地方在任何时间对任何电子设备都能应用。这样能满足软件平台上互相操作,具有可伸缩性和重用性并可即插即用等分布式计算模式的需求。 ( 2)基于构建开发方法的崛起,引出了 CORBA 国际标准软件体系结构和多层应用体系框架。在此基础上形成了 Java.2 平台和 .NET 平台两大派系,推动了整个 IT业的发展。 3 ( 3)对软件产业和工业企业都产生了深远的影响,软件从以开发为中心转到了以服务为中心。中间提供商
12、,构件提供商,服务器软件以及咨询服务商出现。企业必须重塑自我, B2B 的电子商务将带动整个新经济市场,使企业获得新的价值,新的增长,新的商机,新的管理。 ( 4)对软件开发带来了新的革命,重视使用第三方构件集成,利用平台的基础设施服务,实现开发各个阶段的重要技术,重视开发团队的组织和文化理念,协作,创作,责任,诚信是人才的基本素质。 总之,目前 已 经 看到了 Java 对信息时代的重要性,未来还会不断发展, Java 在应用方面将会有更广阔的前景 。 2.2 Java 名字起源 Java 自 1995 诞生,至今已经 15年历史。 Java 的名字的来源: Java 是印度尼西亚爪哇岛的英
13、文名称,因盛产咖啡而闻名。 Java 语言中的许多库类名称,多与咖啡有关,如 JavaBeans(咖啡豆 )、 NetBeans(网络豆 )以及 ObjectBeans (对象豆 )等等。 SUN 和 JAVA 的标识也正是一杯正冒着热气的咖啡。 据 James Gosling 回忆,最初这个为 TV机顶盒所设 计的语言在 Sun内部一直称为 Green 项目。我们的新语言需要一个名字。 Gosling 注意到自己办公室外一棵茂密的橡树 Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为 Oak。但 Oak 是另外一个注册公司的名字。这个名字不可能再用了。 在命名征集会上,大家提出了很
14、多名字。最后按大家的评选次序,将十几个名字排列成表,上报给商标律师。排在第一位的是 Silk(丝绸 )。尽管大家都喜欢这个名字,但遭到 James Gosling的坚决反对。排在第二和第三的都没有通过律师这一关。只有排在第四位的名字、得到了所有人的认可和律师的通过,这个名字就是 Java。 10 多年来, Java 就像爪哇咖啡一样誉满全球,成为实至名归的企业级应用平台的霸主。而Java 语言也如同咖啡一般醇香动人。 2.3 Java 语言特点 Java 是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、 多线程 的动态语言。 当 1995 年 SUN
15、推出 Java 语言之后,全世界的目光都被这 个神奇的语言所吸引。那么 Java到底有何神奇之处呢 ? Java 语言其实最早诞生于 1991 年,起初被称为 OAK 语言,是 SUN 公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前, OAK可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了 OAK 的命运。 在 Java 出现以前, Internet 上的信息内容都是一些乏味死板的 HTML 文档。这对于那些迷恋于 WEB 浏览的人们来说简直不可容忍。他们迫切希望能在 WEB 中看到一些交互式的内容,开发人4 员也极希
16、望 能够在 WEB 上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力。 SUN 的工程师敏锐地察觉到了这一点,从 1994 年起,他们开始将 OAK 技术应用于 WEB 上,并且开发出了 HotJava的第一个版本。当 SUN 公司 1995 年正式以 Java 这个名字推出的时候,几乎所有的 WEB 开发人员都心生感叹:噢,这正是我想要的!于是 Java 成了一颗耀眼的明星,丑小鸭一下子变成了白天鹅。 2.4 Java 主要特性 ( 1) Java 语言是简单的 。 Java 语言的语法与 C 语言和 C+语言
17、很接近,使得大多数程序员很容易学习和使用 Java。另一方面, Java 丢弃了 C+ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地, Java 语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。 ( 2) Java 语言是一个面向对象的 。 Java 语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制( 关键字 为implements)。 Java 语言全面支持动态绑定,而 C+ 语言只对虚函数使用动态绑定。总之, Java语言是一个纯的面向对象程序设计
18、语言。 ( 3) Java 语言是分布式的 。 Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口( ),它提供了用于网络应用编程的类库,包括 URL、URLConnection、 Socket、 ServerSocket 等。 Java 的 RMI(远程方法激活 )机制也是开发分布式应用的重要手段。 ( 4) Java 语言是健壮的。 Java 的强类型机制、异常处理、废料的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。 Java 的安全检查机制使得 Java 更具健壮性。 ( 5) Java 语言
19、是安全的。 Java 通常被用在网络环境中,为此, Java 提供了一个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多安全特性以外, Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。 ( 6) Java 语言是体系结构中立的。 Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的 字节码 格式(后缀 为 class 的文件) , 然后可以在实现这个 Java 平台的任何系统中运
20、行。这种途径适合于异构的网络环境和软件的分发。 ( 7) Java 语言是可移植的。 这种可移植性来源于体系结构中立性,另外, Java 还严格规定了各个基本数据类型的长度。 Java 系统本身也具有很强的可移植性, Java 编译器是用 Java 实现的, Java的运行环境是用 ANSI C 实现的。 ( 8) Java 语言是解释型的。 如前所述, Java 程序在 Java 平台上被编译为字节码格式, 然后可以在实现这个 Java 平台的任何系统中运行。在运行时, Java 平台中的 Java 解释器 对这些字5 节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。 (
21、9) Java 是高性能的。 与那些解释型的高级脚本语言相比, Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C+。 ( 10) Java 语言是多线程的。 在 Java 语言中,线程是一种特殊的对象,它必须由 Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了
22、Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。 ( 11) Java 语言是动态的。 Java 语言的设计目标之一是适应于动态变化的环境。 Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外, Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。 Java 语言的优良特性使得 Java 应用具有无比的健壮性和可靠性,这也减少了应用
23、系统的维护费用。 Java 对对象技术的全面支持和 Java 平台内嵌的 API 能缩短应用系统的开发时间并降低成本。 Java 的编译一次,到处可运行的特性使得它能够提供一个随处可用的开 放结构和在多平台之间传递信息的低成本方式。特别是 Java 企业应用编程接口( Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。 2.5 Java 相关技术 ( 1) JDBC( Java Database Connectivity)提供连接各种关系数据库的统一接口 ,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接 口组成。 JDB
24、C 为工具 /数据库开发人员提供了一个标准的 API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时, JDBC 也是个商标名。 ( 2) EJB(Enterprise JavaBeans)使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。 ( 3) Java RMI(Java Remote Method Invocation)用来开发分布式 Java 应用程序。一个 Java对象的方法能被远程 Java 虚拟机调用。这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用程序都是用 Java 写的。
25、 ( 4) Java IDL(Java Interface Definition Language) 提供与 CORBA(Common Object Request Broker Architecture)的无缝的互操作性。这使得 Java 能集成异构的商务信息资源。 ( 5) JNDI(Java Naming and Directory Interface)提供从 Java 平台到的统一的无缝的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。 ( 6) JMAPI( Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。 6 ( 7
26、) JMS(Java Message Service)提供企业消息服务,如可靠的消息队列、发布和订阅通信、以及有关推拉( Push/Pull)技术的各个方面。 ( 8) JTS(Java transaction Service)提供存取事务处理资源的开放标准,这些事务处理资源包括事务处理应用程序、事务处理管理及监控。 ( 9) JMF(Java Media Framework API), 她可以帮助开发者把音频、视频和其他一些基于时间的媒体放到 Java 应用程序或 applet 小程序中去,为多媒体开发者提供了捕捉、回放、编解码等工具,是一个弹性的、跨平台的多媒体解决方案。 ( 10) An
27、notation(Java Annotation),在已经发布的 JDK1.5(tiger)中增加新的特色叫 Annotation。 Annotation 提供一种机制,将程序的元素如 :类,方法,属性,参数,本地变量,包和元数据联系起来。这样编译器可以将元数据存储在 Class 文件中。这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。 在 Java 技术中,值得关注的还有 JavaBeans,它是一个开放的标准的组件体系结构,它独立于平台,但使用 Java 语言。一个 JavaBean是一个满足 JavaBeans 规范的 Java 类,通常定义了一个现实世
28、界的事物或概念。一个 JavaBean 的主要特征包括属性、方法和事件。通常,在一个支持 JavaBeans 规范的开发环境(如 Sun Java Studio 和 IBM VisualAge for Java)中,可以可视地操作 JavaBean,也可以使用 JavaBean 构造出新的 JavaBean。 JavaBean 的优势还在于 Java带来的可移植性。现在, EJB (Enterprise JavaBeans) 将 JavaBean 概念扩展到 Java 服务 端组件体系结构,这个模型支持多层的分布式对象应用。除了 JavaBeans,典型的组件体系结构还有DCOM 和 CORB
29、A,关于这些组件体系结构的深入讨论超出了本书的范围。 ( 11) javaFX Sun 刚刚发布了 JavaFX 技术的正式版 ,它使您能利用 JavaFX 编程语言开发富互联网应用程序 (RIA)。 JavaFX Script 编程语言(以下称为 JavaFX)是 Sun 微系统公司开 发的一种 declarative, staticallytyped(声明性的、静态类型 )脚本语言。 JavaFX 技术有着良好的前景,包括可以直接调用 Java API 的能力。因为 JavaFXScript 是静态类型,它同样具有结构化代码、重用性和封装性,如包、类、继承和单独编译和发布单元,这些特性使得
30、使用 Java 技术创建和管理大型程序变为可能。 3.俄罗斯方块的 Java设计方法 3.1 Java 的编程环境 首先要下载 J2SE,安装后就要设置环境变量: ( 1) classpath 类路径的设置: 在桌面选择 “ 我的电脑 ” 单击鼠标右键,选择 “ 属性 ” 在菜单中选择 “ 高级 ” 选项卡,点击 “ 环境变量 ” 选择 “ 系统变量 ” 点 “ 新建 ” 出现两个输入框,一个为变量名,一个为变量值。在变量名输入“classpath” 。变量值输入 lib 文件夹下的所有 jar 包的路径。(注意:输入前加一个 “.” 表示当前路径,然后用 “;” 隔开,每一个路径都要隔开。)
31、 7 ( 2) path 系统路径 同样在环境变量下,选 择 “ 系统变量 ” 点 “ 编辑 ” 出现两个输入框,一个为变量名,一个为变量值。变量名为 path,变量值是把 bin 路径加到变量值输入框内就可以了。 设置完了,我们来测试一下。 在开始菜单中选择 “ 运行 ” ,输入 cmd,打开命令窗口,又称为控制台窗口( dos 窗口) , 输入“java -version” 如果设置正确会显示你当前的下载版本信息。再输入 javac来执行,正确就会显示 java编译器命令的参数。 3.2 Java ME Wireless Toolkit(WTK)简介 ( 1)什么是 J2ME Wirele
32、ss Toolkit WTK 的全称是 Sun J2ME Wireless Toolkit Sun 的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化 j2me 的开发过程。使用其中的工具可以开发与 Java Technology for the Wireless Industry (JTWI, JSR 185) 规范兼容的设备上运行的 j2me 应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作时为止可以获取有四个版本,分别是 1.0.4, 2.0, 2.1和 2.2。每个版本都包括英语,日语 ,简体中文,繁体中文 4 个语种包。 1.0.4 版只能够开发
33、MIDP1.0 应用程序。 2.0 版只能够开发 MIDP2.0 应用程序。 2.1 版则可以同时开发 MIDP1.0、 JTWI(CLDC 1.0, MIDP2.0, WMA1.1)可改用 CLDC1.1 或加入MMAPI1.1),自定义 (自己随机组合 Configuration, Profile 以及 Optional Package)三种环境下的应用程序。 2.2 版中, WTK 全面的支持 JTWI 规范。具体的说,即 MIDP 2.0, CLDC 1.1, WMA 2.0, MMAPI 1.1, Web Services (JSR 172), File and PIM APIs (
34、JSR 75), Bluetooth and OBEX APIs (JSR 82), and 3D Graphics (JSR 184);同时也可以使用该版本开发面向 CLDC1.0 和 MIDP1.0 的应用程序。 系统要求上, WTK2.2 至少需要 50MB 可用硬盘, 128MB 系统 RAM 和 800MHZ Pentium III CPU。 可以在 sun 的官方网站免费下载。 WTK2.2 下载链接: http:/ WTK 是 Sun 提供的一个开发工具包。目前各大手机厂商往往把 WTK 经过自身的简化与改装,推出适合自身产品,如 SonyEricsson, Nokia Deve
35、loper s suit 等,都属于此种类型;而通过 JBuilder, Eclipse 等 IDE, J2ME 开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。 3.3 WTK 安装过程 WTK的安装程序与普通程序一样简单,只有一点需要注意,由于 WTK自身并没有附带 Java的运行环境 JDK,所以,在 WTK 安装之前你需要安装 自己的 JDK(我们这里选用的是 JDK1.4.2)。 WTK 会首先自动检测当前系统已有的 Java 虚拟机 ; 然后显示出当前虚拟机所在路径 , 在确定无误后,就可以继续了,最后安装成功后,将得到一个包括多种实用工具的开发包。 WTK 是用来开发 MIDP 的,为了让 MIDlet 可以顺利编译