当前位置: 首页 > 范文大全 > 公文范文 >

基于java的手机游戏设计的研究

时间:2022-03-24 09:17:53  浏览次数:

摘要:随着手机、ipad、笔记本电脑等移动设备的普及,Java功能在移动设备上的普遍应用更为明显,基于Java功能的手机增值服务日益体现出其影响力,J2ME(Java 2 Micro Edition)技术应运而生,它主要定位在消费性电子产品上,完美地解决了设备的智能化、多样化,极大地丰富了人们的生活,为人们提供了快捷的咨询和服务。

本文介绍了一个基于J2ME的手机游戏的设计过程。本文采用开源的Eclipse为基本的开发环境,以J2ME开发套件为基本开发工具,设计了名为疯狂赛车的java小游戏。本文从游戏的需求分析开始,详细描述了设计概要,并且对于游戏的具体实现过程作了详细的阐述,最后也对游戏的调试做了简单的介绍。本文为一个完整的基于J2ME的手机游戏设计过程,有助于推广到基于java的其他手机增值业务的开发和设计。

关键词:Java;J2ME;MIDP2.0;手机游戏

中图分类号:TP311.52 文献标识码:A 文章编号:1672-9129(2017)11-0025-02

Abstract: with the mobile phone, tablet, the popularity of mobile devices such as notebook computer, Java features on mobile devices widely used is more apparent, mobile value-added services based on Java function increasingly reflects its influence, J2ME (Java 2 Micro Edition) technology arises at the historic moment, its main role in consumer electronics, perfectly solve the intelligent equipment, diversified, have greatly eiched the life of people, provides people with quick consulting and services.

This article introduces the design process of a mobile game based on J2ME. This article USES the open source Eclipse as a basic development environment, and USES the J2ME development suite as the basic development tool to design a Java mini game called crazy racing. In this paper, from the beginning of the game needs analysis, detailed design profiles, and for the game in detail on the concrete implementation process, finally also debugging made simple introduction to the game. This paper is a complete j2me-based mobile game design process, which can be extended to the development and design of other mobile value-added services based on Java.

Key words: Java J2ME MIDP2.0 mobile game.

1 引言

隨着手机的日渐普及,基于手机的应用越来越多:QQ、MP3、视频、摄像、导航定位、新闻快讯、电子钱包等等。这些应用都是为了满足人们的需要而开发的,都取得了不同程度的发展。而其中的一个应用——手机游戏已经成为整个视频游戏领域发展速度最快的部分。手机游戏给人以极大的想象空间,激励着众多知名企业和创业团队加入到手机游戏的产业之中,其拥有的巨大的商业潜力,在不久的将来必将成为游戏行业的下一个金矿。尽管每个手机游戏都不贵,但是巨大的使用量将使得这个市场商机无限。随着3G时代的到来,手机游戏必然有着不可限量的发展前景。

2 开发环境及其优势

众所周知,现在的手机具备了越来越多的新的功能,比如蓝牙、视频、GPS等,当然游戏功能也越来越强大,而开发这些手机应用软件主要依赖于这些平台:J2ME、Brew、Symbian。J2ME平台的优点是开发速度快、周期短、支持的手机多、开发资源丰富、移动已商用。而缺点是代码可以反编译。各厂商SDK不兼容,同一厂商的不同型号手机不兼容,限制比较多,不完全支持Socket,执行效率低。BREW的优点:API功能较强,速度较快,联通已商用。缺点是目前只支持C,支持手机不多。Symbian的优点是独立操作系统,功能强大,支持几乎所有新功能,是未来手机的趋势。缺点是开发难度很大,成本相对较高,各种资源较少。

综上比较以上几种开发平台的优缺点,可以发现J2ME具有移植性强、开发速度快、跨平台、开发资源丰富的优势,选用J2ME平台来进行手机游戏的开发是很理想的选择。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。由此看来使用J2ME平台来开发游戏项目是最理想不过的。本文采用开源的Eclipse为基本的开发环境,以J2ME开发套件为基本开发工具,完成游戏的设计。

3 游戏环境实现

3.1游戏开发环境搭建

(1)安装JDK:由于Eclipse自身并没有附带Java运行环境JDK,所以安装前要先安装JDK。本文采用的是jdk1.6.0_10。

(2)Eclipse的安装:本文采用的Eclipse版本为Eclipse3.2。Eclipse安装很简单,只需要将下载的Eclipse压缩包解压到任何一个选定的目录即可。本文将其解压到C:\Program Files\eclipse。本文采用的是中文开发环境,因此需将Eclipse的语言包NLpack-eclipse-SDK-3.0解压到与Eclipse相同的目录下,即C:\Program Files\eclipse即可。

(3)安装并配置EclipseME插件:EclipseME作为Eclipse一个插件,致力于幫助开发者开发J2ME应用程序。但是EclipseME并没有为开发者提供移动设备模拟器。所以后面还要进行加载WTK模拟器。

(4)加载WTK(j2me_wireless_toolkit-2_1_01-windows.exe):WTK是Sun J2ME Wireless Toolkit的简称。它是sun公司所提供的一个无线开发工具包,该工具包包含生成工具、实用程序及设备仿真器。它向用户提供一个集成环境,把程序的编译、连接和运行等操作全部集中在一个环境上运行,使用十分方便。它通用性高,开发出的应用程序可保证能运行在大部分设备上。由于EclipseME并没有为开发者提供移动设备模拟器。所以,为了能为开发者提供一种无缝的统一集成开发环境,还需要将手机厂商的模拟器配置到Eclipse开发环境中。

3.2环境检测

(1)建立工程及文件

在Eclipse平台上顺序选择“文件”、“新建”、“J2ME”、“J2ME Midlet Suite”,然后命名该工程名为:helloworld。与此同时在上述工程下建立一个MIDlet文件:helloworld。操作:在Eclipse平台上右键单击工程名,然后在弹出的快捷菜单中顺序选择“新建”、“J2ME”、“J2ME Midlet”,接着命名该文件名为:helloworld,将上述代码复制到helloworld文件下并保存。

(2)调试运行

在Eclipse平台上,右键单击工程名,然后再弹出的快捷菜单中顺序选择“运行方式”、“运行”、“Wireless Toolkit Emulator”。右击“Wireless Toolkit Emulator”选项,在弹出的快捷菜单中选择“new”,弹出上面那个对话框。指定helloworld为可执行MIDlet程序的入口文件,然后单击“应用”,最后单击“运行”运行。Eclipse自动启动WTK的模拟器,显示“欢迎J2ME&EclipseME!”。

每个MIDlet程序都必须有一个主类,该类必须继承自MIDlet。它控制着整个程序的运行,并且可以通过相应函数从程序描述文件中获取相关的信息。该类中拥有可以管理程序的创建、开始、暂停、结束的函数。

4 需求分析

4.1本游戏实现的功能及要解决的技术问题

本游戏主要实现的功能是小车躲避障碍物(炸弹),具体是通过方向键控制小车的方向(上、下、左、右)从而躲避自上而下降落的炸弹,在游戏开始的同时,开始计分,到最终程序检测到有碰撞事件发生时(也即游戏结束时)停止计分,退出游戏同时显示得分。要实现以上功能必须解决以下这些问题:

4.1.1关于碰撞检测的算法

发现在碰撞发生时其实并不是两个物体的相切时,而是还隔有一小段距离就发生碰撞事件,原因是采用了矩形和矩形进行碰撞:一般规则的物体碰撞都可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。但是矩形碰撞只是一种比较粗糙的碰撞检测方法,因为很多实际的物体可能不是一个规则的矩形。解决方法是:

(1)尽量使用物体是矩形的图片;

(2)采用圆形和圆形的碰撞,因为在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径之和。

4.1.2边界检测

通过程序控制赛车和炸弹在屏幕上的出现位置,避免越界。这个问题只需通过比较坐标与屏幕的大小即可实现。如程序:炸弹的边界检测:

if (x < bombWidth) x = bombWidth;

if (x > gameCtrl.width - bombWidth) x = gameCtrl.width - bombWidth;

if (gameCtrl.bombPosY[i] > gameCtrl.height + bombHeight / 2)

gameCtrl.bombCanUse[i] = false; // 炸弹出界检测:

4.1.3动态背景画面的实现

用数组循环在屏幕上出现的虚线。程序在后面的“游戏背景的制作”中会有详细讲解。

4.1.4计分功能

该功能是通过一个计数器来实现。在每次碰撞检测过后判断是否gameCtrl.score++。

4.2游戏开发流程设计

本程序采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后允许用户选择执行选项菜单,在开始游戏后将先从外部文件载入赛车和炸弹的图文件,对背景的所有物体进行绘图。在主程序运行的线程中,实时反映整个游戏的进行状态。用户控制的赛车运行在主线程中,随屏幕刷新的频率而移动。

本游戏共建立三个.java文件,分别是:RacingMIDlet.java、GameCtrl.java和NextFrame.java。程序一开始执行是先从主类RacingMIDlet.java来开始。这个类从MIDlet类继承过来,在程序的开始函数startApp()中调用下面函数来暂时显示一个屏幕对象。

Alert splashScreen = new Alert(null,"欢迎来玩疯狂赛车,方向键控制方向",logo,AlertType.INFO);

当Alert对象超时,系统会显示另一个Displayable对象。

Displayable current = display.getCurrent();

display.setCurrent(current);

这两个语句把程序的执行转向GameCtrl.java文件来。而这个类继承CommandListener,这个CommandListener类用来截获按钮点击事件,也就是监听按钮的点击,然后调用相应的方法:

(1)当点击“退出”时,游戏退出。

(2)当点击“开始”时,程序转到GameCtrl类中的paint(Graphics g)函数中去,这个函数是用来绘制游戏界面的,里面包括游戏背景的绘图,炸弹和赛车的绘图。然后转到initialize()函数来初始化一些变量。接着转到keyPressed(int keyCode)来侦听并响应按键操作。然后NextFrame类中的run()开始进行边界检测及碰撞检测,当检测到碰撞事件时游戏结束,定时器停止工作,返回gameCtrl.score值,显示分数。

5 游戏设计与实现

5.1程序设计

(1)游戏进入前的选择

本设计程序进入时,首先载入画面的不是游戏运行状态,而是提供选项,当选择开始时正式运行。这部分由RacingMIDlet.java文件实现。在类RacingMIDlet中的startApp()函数中,随即调用了Displable的setCurrent()函数将当前屏幕设置为Displayable current = display.getCurrent()。另外需要建立一个Alert对象,其用于显示提示、警告,还有版权信息等告之用户信息的临时闪现的屏幕,它可作为setCurrent的参数,提前显示在最终需要显示的屏幕前。GameCtrl继承了接口commandListener,这样就可以使用高级界面的Command按钮。继承了CommandListener的类必须拥有commandAction(),以决定对按键采取什么样的行为。即按钮事件触发后需执行的函数。在设置好Commandlistener后,需要调用setCommandListener()以将按钮事件激活。键盘事件中,可用getCommandType()返回的Command类型来确定选择的是什么按钮。keyPressed(int keyCode)用来处理游戏按键操作。repaint()重新绘图。

(2)游戏的登陆界面制作

这个写在GameCtrl.java文件中,通过使用高级界面的Command按钮来实现游戏的“开始”、“退出”命令。继承了CommandListener的类必须拥有commandAction(),以决定对按键采取什么样的行为。即按钮事件触发后需执行的函数。在设置好Commandlistener后,需要调用setCommandListener()以将按钮事件激活。

再用commandAction(Command arg0,Displayable arg1)函数来控制游戏的开始与结束。登陆界面图画则通过paint(Graphics g)实现。

(3)游戏背景的制作

本游戏要在手机屏幕上显示一段公路,具体说就是在屏幕上画两条线,这要用到绘图类Graphics。首先设置背景颜色setColor(255, 255, 255)为白色并填充屏幕fillRect()。然后用setColor(0,0,25)确定绘图所用颜色为蓝色,并用g.drawLine()实现绘制线条的功能。为了能表现出赛车奔驰的场面,故而采用虚线绘制(LineMode=true)。

(4)赛车的控制

操作非常简单,仅仅是通过手机方向键控制赛车的上、下、左、右移动。

首先侦听按键操作,语句如下:keyPressed(int keyCode);

获得按键操作后,然后将按键操作复制给专门的游戏按键。

int gameAction = getGameAction(keyCode);

接着进行按键响应,执行按键操作,从而控制赛车的移动。

switch (gameAction)

{ case RIGHT;carPos += 5; case LEFT:carPos -= 5;

case DOWN:carPoc += 5;case UP:carPoc -= 5;}

(5)炸弹的运行及控制

首先判断炸弹是否在屏幕上出现,采用如下判断语句。if (gameCtrl.bombCanUse[i] == false),若炸弹没显示时设置初始位置,显示后水平位置固定。

if(x > bombWidth) x = bombWidth;

if(x > gameCtrl.width - bombWidth) x > gameCtrl.width – bombWidt;

然后將炸弹设置在虚拟屏幕,gameCtrl.bombPosY[i] = -y;

接着开始炸弹的下移。gameCtrl.bombPosY[i] += 6;

与此同时要检测炸弹是否出界,若没出界则继续执行下降操作,否则返回到初始时刻重新设置初始位置。

6 总结

本文采用开源的Eclipse为基本的开发环境,使用J2ME为开发套件,依次安装了JDK1.6.0_10、Eclipse3.2、EclipseME1.7.9、WTK2.1_01这四个软件及插件搭建起手机游戏开发平台——J2ME,从而进行手机游戏——疯狂赛车的设计与实现过程。本文分别介绍了该游戏设计的背景及相关技术,开发工具及平台的搭建,手机游戏的需求分析、概要设计和详细设计。

参考文献

[1]陈旭东.《J2ME应用教程》[M].北京:清华大学&北京交通大学出版社,2006

[2]汪永松.《J2ME手机高级编程》[M].北京:机械工业出版社,2009

推荐访问: 手机游戏 研究 设计 java