基于J2ME的俄罗斯方块手机游戏设计与实现(论文16000字)

3995
    


来源:
Licence:
联系:
分类:
平台:
环境:
大小:
更新:
标签:
联系方式 :
免费下载 ×

下载APP,支持永久资源免费下载

限免产品服务请联系qq:1585269081

下载APP
免费下载 ×

下载APP,支持永久资源免费下载

下载APP 免费下载
下载 ×

下载APP,资源永久免费


如果出现不能下载的情况,请联系站长,联系方式在下方。

免费下载 ×

下载论文助手APP,资源永久免费

免费获取

如果你已经登录仍然出现不能下载的情况,请【点击刷新】本页面或者联系站长


.Unp239 { display:none; } 基于J2ME的俄罗斯方块手机游戏设计与实现( 论文 16000字) 【摘要】 现今社会,电子信息高速发展,电子游戏已经深入人们的日常生活之中,成为老少皆宜的娱乐方式

本文选择众多游戏中较为经典的俄罗斯方块游戏,在Microsoft Windows Win7系统下,以Java为开发语言,利用Java Wireless Toolkit(WTK)开发包工具,在eclipse开发平台上进行游戏的设计与实践

论文阐述了手机游戏现状与模拟开发环境,对游戏进行了需求分析与可行性研究、游戏总体设计、游戏详细设计与实现、游戏测试及代码优化等方面的内容

在游戏详细设计与实现方面,将整个游戏分成菜单选择,游戏运行,分数记录等几个模块,各个模块相互联系,相互支撑

最终在手机模拟平台下,实现了游戏的各项功能,并且通过游戏测试以及代码优化,确保了游戏的正确、有效运行

俄罗斯方块游戏十分容易上手,但是想要对游戏操作与技巧熟悉并且较好地掌握,也需要经过一番研究

作为一款家喻户晓的大众游戏,其普及程度远远超过史上任何一款游戏

〖资料来源:56DOC.COM 毕业设计(论文)网〗 随着网络的普及与发展,俄罗斯方块游戏的表现形式也变得越来越丰富多彩,它在原始游戏的基础上不断推陈出新衍生出各种类似的游戏,深受广大玩家喜爱

到目前为止,已经衍生出许多不同版本的俄罗斯方块游戏,它也由最原始的单机游戏衍生出了网络游戏与多人对战游戏等

如今,手机使用非常广泛,几乎人手一部甚至多部手机,手机作为单一的通讯工具显然已经不能满足人们的日常需要,因此,手机游戏应运而生

手机游戏不同于电脑游戏,由于手机屏幕以及内存的限制,其游戏设置相对于网络游戏要简单许多

由于俄罗斯方块游戏操作简单并且极易上手,将其移植到手机上,可以更好地体现游戏的可玩性

手机体积较小,玩家可以随时随地地打开并开始游戏,不需受到时间或者地点的限制

本文研究的是“基于J2ME的俄罗斯方块手机游戏设计与实现”

1  概述 1.1  手机游戏现状 近年来,随着因特网在国内迅速发展,网络游戏取得了令人瞩目的成绩

同样,随着3G网络及智能手机的普及,手机游戏市场潜力变得十分巨大,各游戏开发商、运营商、服务商都纷纷开始了手机游戏的研发,甚至手机终端厂商也加入了这一行列,并以此作为抢占市场的重要途径

目前,在移动娱乐内容服务方面,手机游戏的发展仅次于手机音乐和图片下载,发展潜力巨大,例如贪吃蛇,推箱子等经典游戏

作为视频游戏领域发展速度最快部分的手机游戏,被业界人士广泛看好,市场前景十分广阔

诺基亚、索爱等各大手机厂商也开始不断提高手机在游戏方面的性能,同时,采用开放式手机操作系统平台,方便用户享受不同的手机游戏业务

1.2  开发技术简介 1.2.1  Java简介 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称

其主要有以下特点: (1)简单性 由于java语言类似于C语言,所以对于已经学过C语言的编程人员可以较容易的掌握

而java语言本身语法简单,编写容易,很容易上手

(2)平台无关性 Java可以正常地运行在任何不同平台的机器上,执行环境与其所使用的平台无关

同时,java的类库封装了不同平台上的实现,为其提供统一的接口,这使得同样的类库可以在不同的平台上使用

(3)分布式 Java在网络方面具有十分强大的功能,可以说java是面向网络的语言

各种网络协议通过其提供的类库可以方便地被处理,如RMI、CORBA、Web服务等现在流行的网络开发

(5)安全性 在安全性方面,java表现得非常出色,从一开始,java就被设计为有防范各种病毒、袭击的能力

1.2.2  J2ME简介 1.2.1.1  J2ME由来和发展 Java具有“一次编写,到处运行”的特点,即平台无关性特点

但是,同一套标准可能无法满足各种不同的需求,因此,Java平台针对不同领域的需求被分成三个版本

分别为:Standard Edition(J2SE,标准版)、Enterprise Edition(J2EE,企业版)、Micro Edition(J2ME,袖珍版或者移动版)

J2ME (Java 2 Micro Edition) 是Sun的Java 2平台微型版,它被定义为“一种以广泛的消费性产品为目标的且高度优化的Java运行环境”

近年来,电子移动通信设备不断发展,J2ME在设备的智能化以及多元化方面,取得了革命性的成果

在通信、娱乐等应用产生的手机增值服务方面,Java应用程序的影响力逐渐增大,在人们的日常工作与生活中也起着不可忽视的作用

1.2.2.2  MIDlet与MIDlet生命周期 MIDlet(Mobile Information Devices applet)是在支持MIDP的设备上运行的MIDP应用,它仅利用规范所定义的各种应用程序编程接口API(Application Programmer's Interface)

该应用必须继承MIDlet类,以便让应用管理软件来控制

MIDlet从应用描述器中获取各种属性,以及对各种状态变化进行通知和请求

当一个MIDlet启动时,应用管理软件首先创建一个MIDlet实例并使其处于pause状态,调用startApp()方法可以使MIDlet进入active状态,也就是运行状态

当进程处于active状态时,调用destroyApp(boolean unconditional)或者pauseApp()方法可以让MIDlet进入destroyed或者pause状态

特别地,当调用destroyApp()方法时,系统通知MIDlet进入destroyed状态

处于destroyed状态的MIDlet必须释放所有资源,并且保存数据

1.3  开发工具简介 本游戏的开发环境,由JDK、Wireless Tool Kit(WTK)以及Eclipse等开发工具整合搭建而成

其中,JDK提供了虚拟机的运行环境,WTK提供了仿真器功能,Eclipse及其插件提供了开发测试程序代码的IDE集成开发环境

以下是各个开发工具的简介: 1.3.1  JDK JDK(Java Development Kit)是Sun Microsystems针对Java开发的产品

自Java推出以来,JDK已经成为使用最广泛的Java SDK

JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库

它的通用性很高,在大部分设备上都可以正常运行其开发的应用程序,兼容性比某些厂商开发的产品高出许多

1.3.3  Eclipse Eclipse是一个源代码开放的、基于Java的可扩展开发平台

Eclipse本身并不能够开发什么程序,它只是一个框架和一组响应的服务

Eclipse中有许多插件,其几乎由插件组成

使用Eclipse开发环境时,各个领域的开发人员通过开发插件来构建与Eclipse环境无缝集成的工具

EclipseME作为Eclipse的一个插件,在开发者开发J2ME应用程序中起到了十分重要的帮助作用

(2)步骤2:安装sun_java_wireless_toolkit-2_5_2-ml-windows.exe

(3)步骤3:把eclipse-SDK-3.5.1-win32.zip解压到c:\eclipse

(4)步骤4:解压eclipseme.feature_1.7.9_site.zip

:将解压出来的features和plugins文件夹的内容分别复制到c:\eclipse\features和c:\eclipse\plugins目录下

(5)步骤5:运行eclipse.exe

单击菜单栏中Window,选择preferences

在弹出的窗口左侧单击J2ME下Device Management,单击Import...

在弹出的窗口中输入WTK的安装路径,依次单击Refresh,Finish

选择DefaultColorPhone仿真器

配置成功

2  需求分析与可行性研究 2.1  游戏特点 俄罗斯方块的游戏规则是通过移动、旋转等操作,适当摆放随机产生的各种形状的方块,使之能够排列成完整的一行或多行,并且消除得分

由于俄罗斯方块属于单屏游戏,所以,玩家可以在同一时间看到游戏的全部过程,对游戏一目了然

同时,只要玩家不停止或者游戏不输,玩家便可无限制进行下去,永无止尽是这个游戏的一大特点

俄罗斯方块游戏的最大特点便是消行得分以及增加难度,只有把积累的行消去,才能保证游戏的持久性;同样,得分以及增加难度可以激发玩家对游戏的挑战性,使得游戏能够更加吸引玩家的注意力

对于手机俄罗斯方块游戏的开发,同样具有巨大的前景

玩家玩游戏的目的就是放松身心,界面美观可以给玩家视觉上的享受,让玩家心情愉悦

(2)游戏操作需求:一个具有简单操作的游戏,比较容易让玩家快速上手

玩家在游戏过程中不用费心记住操作规则,玩起来得心应手,因此不会顾此失彼,最终失败

(3)游戏难度需求:一个具有挑战性的游戏,比较容易获得玩家的长期关注

游戏一直保持一个难度,缺乏挑战性,时间一长,玩家自然容易失去兴趣

改变游戏难度,获得玩家支持

2.3  可行性研究 2.3.1  可行性研究前提 (1)基本需求:此次游戏开发的总体任务是实现游戏界面的美观性、操作的可执行性、游戏的及时性,以及适当的拓展功能

(2)主要开发目标:采用结构化设计方法,在手机游戏模拟环境的基础上,开发出一个界面美观、运行正常、操作简便的游戏

在手机游戏的开发过程中,全面锻炼自身的综合能力

(3)采用的方法和步骤:通过研究分析手机游戏的特点,针对手机俄罗斯方块游戏的具体功能设计主体结构

利用现阶段我所达到的能力,以简洁明了的方法,实现一个有一定可玩性的手机游戏

2.3.2  可行性分析 (1)经济可行性

基于J2ME的手机俄罗斯方块游戏开发需求比较低,而且软硬件开发环境相对成熟完善

游戏开发完成并且正确运行后,给玩家带来娱乐性的同时,在技术的推广方面也迈出了关键的一步

在游戏的设计与开发过程中,我对JAVA语言以及J2ME有一个更加全面的认识,这对于我以后的学习和工作有着重要的意义

(2)技术可行性

本游戏使用JAVA语言开发,具有许多优点

JAVA语言是面向对象的语言,其语言比较健壮、安全

所以,使用JAVA语言编写手机俄罗斯方块游戏在技术方面是完全可行并且合理的

(3)操作可行性

此次编程在JAVA强大健全的功能库的基础上,增加了游戏程序的人性化设计,使得操作更加简单,界面更加完善

在游戏中可以设置不同的按键来表示不同的功能,简洁明了,这使得用户能够容易的理解游戏操作并快速上手

3  游戏总体设计 3.1  功能流程设计 一方面,与以往的俄罗斯方块游戏一样,本文主要研究的是单机模式的俄罗斯方块游戏

程序运行时首先选择游戏开始,开始之后在随机出现的方块定时下落的同时,在游戏主屏幕旁边提前显示即将出现的方块,通过手机键盘实现方块的左右移动、向下加速及旋转变形等操作

当方块堆满屏幕一行时,自动进行消行操作,同时玩家获得相应消行分数

当分数增加到一定程度时,增加游戏的等级以及消行所得的分数,并加快方块的自由下落速度

〖资料来源:56DOC.COM 毕业设计(论文)网〗 另一方面,此次设计并非仅仅简单地重复经典,在主体游戏基本功能实现的基础之上,增加了游戏开始之前难度选择功能,以及游戏结束之后的姓名输入与计分功能,这使得原本单一的俄罗斯方块游戏变得更加完善,增加了游戏的娱乐性、挑战性

通过对游戏关键点的初步分析,可以将游戏分为以下几个主要功能模块: (1)游戏开始前,玩家可以根据自己的需求选择不同选项

例如:为了增加游戏的挑战性,可以在游戏开始之前就增加难度;新的玩家可以通过帮助按钮获取游戏的相关操作信息;选择查看排行榜信息了解当前的排名情况等

(2)游戏过程中,可以通过方向键(上、下、左、右键)或者数字键(2、8、4、6键)对方快进行向上(变形)、向下(加速)、向左、向右移动的控制

方块堆满一行自动消去,同时获得消行分数,难度越大,消行获得的分数越高

(3)游戏结束后,输入玩家姓名,并在高分榜中显示玩家所得分数与游戏等级,最多显示前五名的信息

游戏的总体流程图如3-1所示: 图3-1 总体流程图 3.2  功能模块设计 3.2.1  初始化模块设计 (1)启动程序,跳出游戏背景图片,通过游戏背景图片的显示,告诉玩家游戏即将开始,请做好准备

3.2.2  选择模块设计 若是在背景图片显示过后就直接跳入游戏开始界面,会显得游戏十分单一,缺乏选择性

所以,需要一个功能选择界面使得游戏设计更加合理,即在游戏开始前,玩家可以根据需求选择不同按钮

例如:为了增加游戏的挑战性,可以在游戏开始之前就改变难度;新的玩家可以通过帮助按钮获取游戏的相关操作信息等

根据以上要求,选择模块的设计如下: (1)“游戏开始”功能:首先,也是最重要的,就是需要设计一个“游戏开始”按钮,玩家只有通过此按钮,才能进入游戏

(2)“难度选择”功能:玩家的选择不同,对游戏的要求也就不同

有的玩家喜欢循序渐进,从简单的等级开始,这时,只需直接进入游戏即可

但是,有的玩家喜欢挑战自我,不希望游戏过于简单,那么,玩家通过按下“难度选择”按钮调整游戏起始难度,就可以在游戏一开始就感受游戏带来的刺激挑战

(3)“游戏帮助”功能:虽然俄罗斯方块游戏是一款十分经典的游戏,并且流行了很久,但是,仍然有部分玩家对于手机俄罗斯方块游戏的操作过程并不是很清楚

同时,不同的手机游戏在设计方面存在或多或少的差异,并非所有的按键功能都是相同的

因此,“游戏帮助”按钮成了不可缺少的一部分

点击“游戏帮助”按钮,可以显示游戏按键的介绍信息,便于玩家了解游戏操作

若是每次都要等到游戏结束才能看到以往的成绩会显得很不方便

所以在菜单选择界面就设计了“高分榜”按钮,用于显示玩家的高分记录

高分榜中设置显示五条最高纪录,包括玩家的姓名,游戏等级以及游戏分数等

设计一个“清空”的功能清除以往的记录,“返回”键可以返回到菜单选择界面

(5)“退出”功能:如果玩家不想玩游戏了,可以按下“退出”键退出游戏,或者按下手机键盘的挂机键,实现退出游戏的功能

3.2.3  游戏模块设计 整个游戏的核心就是游戏的执行部分,游戏设计合理才能吸引玩家的注意,为此,在游戏主界面部分作如下设计: 3.2.3.1  界面显示设计 游戏的界面显示由Canvas实现

Canvas是画布,属于Displayable的子类,可以充满整个界面

在对Canvas进行扩展的基础上,调用Graphics类对游戏地图和方块进行绘制

它作为paint()方法中的一个参数被传递给paint()方法,用来执行图形输出等功能

3.2.3.2  得分与等级设计 一个游戏的耐玩程度不仅取决于界面的美观、操作的简单,得分与等级的设计合理性同样影响玩家的兴趣

本次游戏将难度分为9级,方块下落时间的间隔由等级的大小决定,游戏等级越高,方块下落速度越快,同一等级的方块下落速度相同

分数的计算方法为:消行分数 = 当前等级×消行的行数×10

由此可见,所得分数不仅仅与消去的行数有关,与游戏当前的等级大小同样有关,难度越大,分数自然也就越高

在升级方面,可以设置为游戏等级越高,升级所需消去行数则越多

因此,需要有边界检测功能实时检查方块移动情况,一旦出现错误,就及时改正

一方面,边界检测功能要检测方块向左、向右、以及向下移动过程中是否会出现错误;另一方面,还要检测方块在边界上进行旋转变形操作的情况,即检测在边界上的方块旋转以后,是否会出现方块某些部分超出游戏屏幕规定范围的错误

3.2.3.4  按键操作设计 手机游戏与PC机游戏有着很大的区别,手机的键盘比PC机的键盘小很多,按键也少很多,所以,设计起来也较为方便明了

手机上每一个按键都对应一个ASCII码数值,但是上下左右键除外,他们的使用比较特殊,具有特定的数值

在手机游戏过程中,通过设置不同按键,从而实现不同功能,例如:数字键“2”、“8”、“4”、“6”(或者上下左右键)分别表示将方块旋转变形、向左移动、向右移动、已经向下加速运动

数字键“1”则可以用来控制游戏地图区域网格的显示情况

数字键“0”用于变换当前下落的方块等

所以在此基础上,可以添加一个玩家姓名输入的功能

玩家输入自己的姓名,确认之后连同等级分数被一起显示在高分榜中

因为手机游戏可能不止一人玩,其他人游戏结束输入姓名后,查看高分榜,玩家信息更加直观鲜明

游戏玩家看到信息,或许会为了挑战自己或者他人而对游戏产生更大的兴趣,凸显游戏的耐玩性、挑战性

3.2.4  得分显示模块设计 如图3-2,显示的是得分部分设计流程图:游戏结束,系统获取分数,并且与高分榜中的记录逐条进行比较

当新的游戏分数大于或者等于高分榜中的原始记录时,就进行插入操作,否则就不执行

在计分界面添加两个按钮,分别是“清空”和“返回”,“清空”用于清除当前高分榜中的所有记录,使之处于原始状态;“返回”则用于返回菜单选择界面,便于玩家继续新游戏或者退出等

图3-2 得分显示流程图 4  游戏详细设计与实现 4.1  功能模块流程图 如下图4-1所示为功能模块流程图,程序运行,启动MIDlet,自动倒计时背景图后,进入菜单选择界面

在选择界面中,玩家可以根据个人爱好或者需求选择不同操作,若是选择“游戏开始”,则进入游戏运行界面

在游戏过程中,系统随机产生方块并且按照一定的速度下落,玩家可以按键进行左右移动,或者向下加速移动当前方块,在需要的时候也可以将方块变形处理

游戏结束后会自动进入姓名输入部分,玩家输入自己的姓名,选择“确定”

系统获取玩家的得分与等级,将其连同玩家所输姓名一起显示在高分榜中,该高分榜是以手机自带的记录集为基础设置的

以上操作全部完成后,玩家可以选择清空记录集后返回或者直接返回游戏选择界面

这五个*.java文件分别表示:公共参数类,程序启动类,功能选择类,游戏进行类,分数显示类

公共类Context联系其他四个大类,公共参数相互传递

在TetrisMIDlet.java中,主要分为startApp()、pauseApp()、destroyApp()三个函数,系统执行,调用startApp(),自动进入StartChoice()界面

在StartChoice.java中,可以调用不同函数实现不同功能,最终进入Mainplay()界面

MainPlay.java中使用了许多函数,各个函数之间相互联系与调用,整体实现游戏的进行过程,例如:游戏开始从Mainplay()进入,调用initGame(),实现不同功能等

最后,在Score.java中,可以实现记录游戏的等级与分数、并且显示玩家相关信息的功能

4.3  Context公共类的设计与实现 在俄罗斯方块游戏程序设计中,各个类之间相互联系,进行参数之间的传递

若是在每一个类中都单独写出所用参数,则显得代码名称不够统一,并且编写过程也略微繁琐

所以,提取公共参数变成了程序代码优化过程中不可缺少的一部分

在本次编程中,主要有四个公共参数,分别是display,gamelevel,score,以及winnername,这四个参数分别表示各个接口的显示与传递,游戏结束时等级的记录,游戏成绩的记录,和游戏玩家姓名的输入

通过对公共参数的提取,使得原本相对独立的代码变得更加紧凑,条理分明

编写J2ME程序也就是实现MIDlet类中的startApp ( ),pauseApp ( ),destroyApp ( )函数

MIDlet中有三个构造函数,分别是public void startApp ( ) { };public void pauseApp ( ) { };public void destroyApp ( boolean unconditional ) { }

其中startApp ( ),pauseApp ( ),destroyApp ( )三个接口函数必须从MIDlet类中继承,需要实现具体功能可以在这几个函数中添加相应代码

其中startApp ( )负责程序的初始化,pauseApp ( )在程序处于暂停状态时自动执行,destroyApp ( )在程序需要退出时执行

图4-3 背景加载图 如图4-3,启动程序MIDlet,进入加载背景图操作,显示背景图片需要用到import javax.microedition.lcdui.Display;这个类的作用就是接口显示管理器,调用这个类的方法,才能在接口显示需要的背景图片

4.5  StartChoice菜单选择类的设计与实现 4.5.1  菜单选项显示 图4-4 菜单显示界面 如上图4-4所示,要显示图中的菜单内容,需要用到List类相关内容

该功能建立在以StartChoice类命名的.java文件中

StartChoice应用List类拓展功能,以CommandListener为接口,调用相关类实现所需功能

在StartChoice中,定义相关函数并将其实例化,定义相关变量并赋初值,调用List相关方法显示菜单选项

在程序实现中用到方法append(String stringPart, Image imagePart),该方法表示在列表的末尾添加表项,其中,stringPart是表项的文本,imagePart是和表项相关联的图像

由于在程序中用到List方法显示列表信息,所以当List的类型为List.IMPLICIT时,游标移动到某项,然后按下选择键,系统能够自动由List.SELECT_COMMAND 发出命令

通过不同命令,执行不同操作

4.6  MainPlay游戏类的设计与实现 图4-5 游戏执行流程图 控制接口的外观和行为,需要使用大量的初级用户接口类,如上图4-5所示为游戏开始过程中的具体执行情况,在选择界面中选中“游戏开始”后,便会跳入游戏执行界面

创建低级界面的Canvas类与创建高级界面的Screen类交互,在需要时掺入高级类的插件

同时,Canvas提供了键盘事件,并且定义了允许将键盘按键映射为游戏控制键的函数

手机游戏编程中,游戏的相应状态通过对手机键盘的设置来控制

所以,Canvas在游戏设计部分十分重要

以下几个方面即是基于Canvas类的设计与实现

在方块显示设置中,利用4位十六进制数表示一个4×4个方格组成的方块

以田字形为例,利用4位十六进制数表示为0x0660,第一个数0表示方块的第一行没有填充,第二个数6化为二进制数为0110,表示方块的第二行填充了第二和第三个方块,以此类推

即田字形的方块的四种显示形式为:{ 0x0660, 0x0660, 0x0660, 0x0660 }

它们之间的对应关系是:0对应的方格由背景颜色显示,1对应的方格由前景颜色显示

4.6.2  方块的随机产生 在游戏设计过程中,定义一个随机变量,然后调用随机函数int sho = Math.abs( rand.nextInt() )

所取得的随机数在1到7之间,用这7个数字分别表示7种常见的方块,并从7种方块中随机抽取图形

每一种方块都是由两个一维数组(X,Y)表示的,其中X用来保存方块所在行,Y用来保存方块所在列,这种表示有利于方块在屏幕上准确的定位

4.6.3  方块的移动与变形 每个方块都由一组坐标表示,在定义时,将方块的左上角坐标作为方块的基点,方块运动,基点也跟着运动

其中,基点的存储空间在加载每个方块数组的最后定义,这样使得方块在游戏地图中的每一个地方都可以变形

方块在移动过程中需要加载坐标信息,首先判断当前方块的下一行是否已有方块,如果有则说明方块已到达游戏地图的底端,游戏将结束;没有则先把方块当前坐标保存起来

因为方块向下运动时,会记录下新一行的方块坐标,但旧一行的没有消掉,所以要先将方块的坐标保存起来,去除旧方块再显示新方块

如图4-7所示为游戏运行界面

方块的状态box_state 赋初值为0,当按下向上键或者数字键“2”时,方块变为下一个状态,即方块顺时针旋转了90°,由于同一个方块一共有四种状态,所以用4取模,就可以进行循环操作

4.6.4  方块自动下降 Thread.sleep(delay-upTime)是游戏休眠,括号中的数字表示方块在此行停留的时间

如果游戏没有任何操作,就会返回Run()进行循环运行

如果游戏没有开始,则会锁定自动下降功能

如果游戏开始,则立刻启动此功能

由于方块自动下降的过程中不可避免地会遇到障碍物或者到达屏幕底端,所以对于这两种情况的判断不可缺少

只要有其中一种情况出现,就可以调用到达事件

方块的坐标决定方块的下落情况,方块在向下运动的过程中,原先的坐标会被先保存起来,等到新方块的坐标记录下来以后,将方块原先的位置用背景色覆盖,再根据具体情况画出新方块的形状

因为计算机处理下落方块的速度十分快,所以看上去就与方块向下移动了一行一样

方块下落的部分流程情况如下图4-8

方块逐个堆积,利用循环语句从屏幕最下行依次向上对有方块的每一行进行判断

首先判断是不是空行,如果该行是空行,则表明自它以上的所有行都将为空行,因此也不必继续向上查找了

如果当前行不是空行,判断该行是否为满行,如果满行,判断是否有连续几个满行出现

最后,还需要判断是否有行满的情况出现,即游戏屏幕是否已经被方块完全填充,如果没有,则继续向上检查

判断满行后,则进行消行处理及方块下移,一直向上查找满行情况直到本行为空行为止

图4-10 方块消行下移流程图 图4-10表示方块消行下移流程图

消行及方块下移:当有满行出现时,需要进行消行操作,即将该行赋值为0,消行后,所有方块下移

当本行满时,将当前一行坐标信息置为0,然后将满行以上的方块坐标全部增加1,再复制到当前的空行,即显示为所有方块下降一行

若出现连续消行,方法与消去一行时相同,如此循环,方块下移也就完成

4.6.6  游戏背景绘制 游戏主界面的地图以及方块的绘制等都是通过Graphics类实现的,Graphics类提供了简单的2D绘图功能

它以三原色分别各占一个字节表示其颜色

Graphics能够绘制图形(如点线面等)、文本和图像,还可以用来显示或进行屏幕外内存缓冲

而在J2ME开发时,Graphics类的一个对象作为MIDlet的paint ( ) 方法的一个参数被传递给paint ( )方法,然后用来执行图形输出到MIDlet屏幕或者一个屏幕外缓冲区

同时,Graphics对象是自动传递给paint ( )的

图4-11显示了Graphics绘制的地图与方块情况

该方法中具有3个参数,分别表示3种基本颜色(红,绿,蓝)

其中setColor ( 255 , 255 , 255 )表示白色,setColor ( 0 , 0 , 0 )表示黑色

(2)绘制矩形 矩形绘制使用Graphics类的drawRect ( )方法,定义如下:viod drawRect ( int x , int y , int width , int height ),该函数一(x , y)为左上角坐标,width为宽度,height为高度画一个矩形

在俄罗斯方块绘制过程中,将方块绘制成圆角矩形,viod drawRoundRect ( int x , int y , int width , int height , int arcWidth , int arcHeight ),其中arcWidth为圆角水平半径,arcHeight为圆角垂直半径

(3)填充矩形 除了设置游戏方块颜色以及屏幕背景颜色,同样需要填充颜色

填充矩形使用Graphics类的fillRect ( )方法,其定义如下:fillRect ( int x , int y , int width , int height ) 函数的作用是:填充一个矩形区域,x、y为起始坐标(即左上角坐标),后面两个参数width、height,分别是矩形区域的宽和高

通过对坐标范围的设置,可以填充不同的矩形

此方法可以用于游戏背景网格的绘制

(5)绘制文本 在俄罗斯方块游戏中要使用文本显示积分、等级等内容,所以文本绘制也是必不可少的

绘制文本使用定义在Graphics类中的drawString ( String str , int x , int y , int anchor ),其中,String对象作为一个参数,x和y分别表示字符串绘制的坐标

参数Anchor则表示文本的显示位置,主要分为水平位置和垂直位置两种

4.6.7  边界检测 方块在下落过程中,并不是一落到底的,有时会遇到障碍,这就需要游戏有下边界检测的功能

同时,方块在下落过程中,为了实现消行或者完成填充的功能,需要左移或者右移,并伴随着方块的旋转变形,这时,由于游戏屏幕有一定的范围,所以需要左右边界检测,以保证方块能够正常的移动和旋转

例如图4-12所示为边界检测的流程图

例如:对于左边界检测,获取当前下落方块的横坐标x,在按下向左运动的键后,若坐标x<0,则表示已经超出左边界,需要增加1恢复坐标

在按下变形旋转键时,同样需要判断旋转过程中方块坐标是否超出边界,如超出,则同样需要恢复坐标,同时,当前旋转状态不可执行

计分有助于玩家了解当前的游戏情况,使得玩家对游戏更加有兴趣

同样,为了增加游戏的难度以及挑战性,还需要设置游戏等级

不同等级表示方块下落的不同速度,等级越高,下落速度越快,同时,每消去一行,获得的分数也会相应增加

等级设置以每个方块下落的时间间隔为准,可设置为{1000,900,800,……}毫秒

在游戏过程中,每消去一行,玩家增加相应分数

对于升级的设置则是,将游戏第0级的下降延时时间减去当前等级的下降延时时间取得的数值作为升级的标准

玩家所得分数与游戏等级无关,而与玩家所消行数的多少有关,不同等级所需要消去的行数有所不同,等级越高,升级所需要消去的行数则越多

4.6.9  键盘响应 图4-13所示为手机游戏的键盘,KeyListener接口用于接受键盘事件(击键)的监听接口

其接口包含以下三个方法:按下某个键时调用的keyPressed()方法,释放某个键时调用的keyReleased()方法,以及键入某个键时调用的keyTyped方法

该游戏程序中,调用keyPressed()方法处理按键事件,即按下某按键时调用此方法,同时,利用getKeyCode方法获取键值

在处理键盘响应事件时,调用switch()语句进行选择判断

4.6.10  游戏者输入姓名的实现 图4-14 姓名输入文本框 如图4-14,为了增加游戏的挑战性,在游戏结束之后,会自动跳入输入姓名的接口,玩家通过输入自己的姓名,在高分榜上留下自己的战绩,从而使得玩家有更大的动力去取得第一名

输入姓名用到了TextField类,javax.microedition. lcdui.TextField是文本框控件,它是Item的子类,不能充满整个界面,只能添加到另一个Displayable的子类上,这个子类就是javax.microedition.lcdui.Form

在Form文件中,通过函数append(),可以将Item的子类添加到Form上

在添加到Form上后,能够实现文本框的效果

在定义文本框的同时,定义两个按钮,分别是“确定”和“返回”,“确定”按钮用于输入姓名之后对所输字符串的响应操作,而“返回”按钮则用于返回菜单接口

如果游戏结束,则调用显示文本框函数,并同时绑定两个按钮

按钮响应调用commandAction函数,当按下确定键时,显示文本框,进入输入状态,玩家输入姓名以后,将参数传递给Score类,用于高分榜排名时的显示,如果不输入任何信息,则默认输入玩家姓名为user

返回按钮用于返回菜单接口

为了满足存储要求,MIDP中推出了一个记录管理系统(Record Management System,RMS)

它与数据库管理系统类似,文档打开后,可以看到该包中唯一的一个类:javax.microedition.rms.RecordStore,这个类也就是进行RMS操作的基础

只要赋值的名称不同,每一个MIDlet suite包中都允许创建多个MIDlet记录集

若一个MIDlet包被移除,所有与该包有关的记录集也都会同时被移除

同一个包内的MIDlet可以直接互相访问它们的记录集,不同包内也可产生共享,但这需要由包的授权属性决定

访问模式由RecordStore被建立时同时创建,允许私有使用或访问

如图4-15所示,玩家的信息建立在RecordStore中

图4-15 玩家信息显示界面 4.7.1  创建记录集 在游戏等级显示之前,需要创建一个记录集来保存数据,这里用到了RecordStore类

首先,RecordStore类没有可用的构造函数,但该类不是抽象类,所以该类的对象可以由一个静态函数来创建

这里使用openRecordStore()方法来创建一个新的记录集

创建完成之后,打开记录集,相应操作完成之后,需要关闭记录集,只有打开和关闭的次数相等时,有关显示操作才能被正确执行

程序设计中,创建的新的记录集中记录条数为空,所以在获取等级与分数之前需要添加记录,添加记录函数为:rs.addRecord(record, 0, record.length);该函数的第一个参数是将变量写入一个字节数组,但不能传入一个对象,因此,需要将一个对象变成字节数组

将对象变成字节数组相当于将对象中的每个成员变量写入流,然后将流变成字节数组

因此,可以利用InputStream的派生类DataInputStream、DataOutputStream以及ByteArrayInputStream、ByteArrayOutputStream将不同种类的数据类型打包,以字节流的形式发送和接收

因为Record存放内容的基本单位是字节,所以必须先将所需内容转换为字节才能写入record数据

由于读record时数据类型也是字节,所以需要将字节数据转换为原先写入时的数据类型

在数据读出和写入流中时,用到了read和write方法

在该类中有大量的read和write方法可以支持将各种类型读出和写入流中,最后调用toByteArray()方法将流中的内容转换为字节数组返回

具体操作过程为:新的得分与记录集中原始成绩相比,确认是否需要将当前成绩插入记录集,若不需要,则不作处理;若成绩排在前五名,则在成绩插入后释放所有资源,最后关闭记录集

显示分数与成绩之后,再调用Font类进行自体优化等操作

4.7.4  清空与返回操作 此次设计中,高分榜上最多可以显示五条记录信息,当五条信息全部添加完后,新的记录信息会根据具体情况替换原始信息

玩家有时需要重置记录信息,这时便需要一个清空的操作满足玩家的需求,按钮响应调用commandAction()函数实现

当按下“清空”按钮时,会调用initScore()函数,进行所有信息的清空与刷新操作

由于成绩已经显示在高分榜中,因此玩家想要返回重新开始游戏,只需按下返回键,就可实现该功能

返回键可以让玩家返回菜单页面,重新选择开始游戏或者查询分数等操作

5  游戏测试及代码优化 5.1  游戏测试 游戏程序编写完成之后,需要进行测试以保证程序的正确性

测试内容如下表5-1: 测试编号    测试内容    测试过程    测试结果 1    菜单选择测试    游戏开始前,选择不同功能,判断是否可以获得相关响应

    选择不同功能,获得所需响应,功能实现正常

    方块能够正常移动

3    方块旋转测试    游戏过程中,点击方向键(上)或者数字键(2),判断方块是否可以正确变形

    方块在无障碍物阻挡,以及没到达边界时,可以正常旋转

4    方块叠加测试    游戏过程中,方块下落至底部或者遇到障碍物时,判断方块是否可以正确叠加

    方块可以正确叠加

5    方块消行测试    在游戏过程中,出现满行后,判断游戏是否可以进行消行操作

    所以满行都被消除,其余方块依次下移

6    加分与升级测试    游戏过程中,当遇到满行时,会进行消行操作,判断是否会根据所消行数进行加分,并且到达一定程度进行升级操作

    每消去一行会获得相应分数,当所消行数到达一定程度,游戏升级,同时消行分数也会有增加

    查看高分榜,玩家姓名被正确输入并显示出来

8    清空记录测试    查看游戏记录集,选择“清空”操作,判断高分榜中的信息是否可以被清空

    按下“清空”选择按钮后,高分榜中记录恢复初始状态,清空操作正常

表 5-1 游戏测试 5.2  代码优化 在众多手机游戏开发技术中,J2ME由于开发速度快、周期短、支持手机多、开发资源丰富等优点,成为当今最受欢迎的手机游戏开发平台,但是,移动设备在各个方面的资源毕竟是有限的

通常,手机游戏中要求刷新频率至少为10fps(帧每秒)

游戏要求玩家要有快速的反应能力,所以游戏通常具有较高的刷新率和快速的相应按键,因此实时游戏代码的运行速度必须快

所以,根据手机游戏中J2ME设备的不足之处(如:较小的显示屏幕;有限的内存;缓慢的CPU等),进行如下优化: (1)最大程度使用J2ME自带的APIs

(2)提取公共参数,建立公共类,统一参数名,让程序阅读起来更加清晰明了

(4)简化继承的层次可以将程序结构变得更加简洁,特别是只进行了一次的继承关系,可以减少相应的内存占用

(5)对于数组的初始化,可优化的办法是把数据编码到一个String里面,运行时再解码到数组

(6)对于图片的加载问题,不同型号手机屏幕大小有所不同

为了使得图片能够适应任何屏幕大小,在移植到手机时可以先用getWidth( )和getHeight( )方法取得当前手机屏幕的宽度和高度,通过放大或者缩小图片来满足显示需求

灵活地使用J2ME图形处理技术,可以优化手机游戏图形显示,减少游戏对手机资源的占用等;既改善了手机游戏的图像显示效果,又增加了手机游戏的可移植性

6  游戏发布 此次程序经过编译、预审核、打包等操作之后才能成为一款具有实际操作意义的手机游戏

首先,将所编的*.java文件,编译成为二进制的*.class文件

其次,完成编译后对*.class文件进行预审核,具体操作为:可以先在PC机上使用preverify.exe进行一部分预选审核工作,再在手机上进行审核工作

最后,进行打包操作

MIDP可执行文件后缀名为jar

利用jar file.class就能将通过预审核的*.class文件,打包成MIDP认可的可执行文件

后缀名为jad的文件是jar文件的描述文件

有了jar及jad文件,就可以将程序放到手机上运行了

由于不同手机所支持的设备不同,可以使用以下方法将jar文件以及jad描述文件移植到手机上:(1)使用数据线,将PC与手机相连,下载文件;(2)使用红外线;(3)使用蓝牙;(4)使用OTA空中下载(利用短信/WAP)等

〖资料来源:56DOC.COM 毕业设计(论文)网〗 以上操作完成后,俄罗斯方块游戏便可以在手机上面运行了

结    论 全文首先从手机游戏的研究背景及现状说起,提出本文的研究内容;然后对本文的开发技术、开发工具及开发环境分别进行了总结;接着根据手机俄罗斯方块游戏的实际需求进行了总体设计及详细设计;最后,在实现游戏功能的基础上进行了游戏测试及代码优化

本次设计实现了JAVA俄罗斯方块手机游戏的基本要素,具有操作简单、运行流畅的特点,较之以往的游戏版本,增加了游戏开始之前难度选择,查看游戏帮助,游戏结束后的计分等功能

本次毕业设计,我从最初的毫无头绪,到后来系统各项功能的实现并可以正常的运行,我觉得十分有成就感

这使得我能够较好地应用学校所学的知识,同时,我还学到了很多书本上无法学到的知识,提高了个人学习和独立工作的能力,这对我以后可能从事的相关工作有很大的帮助

当然,这次设计只是软件开发的开始,由于我对J2ME知识掌握的局限性,使得此次设计的游戏并不是十分完美,还是具有很大的改进空间


免费下载 ×

下载APP,支持永久资源免费下载

下载APP 免费下载
温馨提示
请用电脑打开本网页,即可以免费获取你想要的了。
扫描加我微信 ×

演示

×
登录 ×


下载 ×
论文助手网
论文助手,最开放的学术期刊平台
				暂无来源信息			 
回复
来来来,吐槽点啥吧

作者联系方式

×

向作者索要->