




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
黑龙江广播电视大学毕业设计(论文)题 目学生所在单位姓 名 常永涛 教育层次学 号 专 业指导教师 分 校目录摘要2一设计规格3二架构介绍4三开发工具4四JAVA ME游戏5五Java ME数字签名7六J2me嵌入式开发8摘要Java ME 以往称作J2ME(Java Platform,Micro Edition),是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。它和Java SE、Java EE一起构成Java技术的三大版本,并且同样是通过JCP(Java Community Process)制订的。Java ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。 根据Sun的定义:Java ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。JAVA ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。 关键词:Configuration;Profile;jad;jave me 游戏Java ME一设计规格J2ME 在设计其规格的时候,遵循着对于各种不同的装置而造出一个单一的开发系统是没有意义的事这个基本原则。于是 JAVA ME 先将所有的嵌入式装置大体上区分为两种 :一种是运算功能有限、电力供应也有限的嵌入式装置(比方说PDA 、手机);另外一种则是运算能力相对较佳、并且在电力供应上相对比较充足的嵌入式装置 (比方说冷气机、电冰箱、电视机顶盒 (set-top box)。因为这两种型态的嵌入式装置,所以Java 引入了一个叫做Configuration 的概念,然后把上述运算功能有限、电力有限的嵌入式装置定义在Connected Limited Device Configuration(CLDC)规格之中;而另外一种装置则规范为 Connected Device Configuration(CDC)规格。也就是说, JAVA ME 先把所有的嵌入式装置利用Configuration 的概念区隔成两种抽象的型态。 其实在这里大家可以把Configuration 当作是JAVA ME 对于两种类型嵌入式装置的规格,而这些规格之中定义了这些装置至少要符合的运算能力、供电能力、记忆体大小等规范,同时也定了一组在这些装置上执行的 Java 程序所能使用的类别函式库、这些规范之中所定义的类别函式库为 Java 标准核心类别函式库的子集合以及与该型态装置特性相符的扩充类别函式库。比方就CLDC 的规范来说,可以支援的核心类别函式库为java.lang.* 、java io.*、java.util.*,而支援的扩充类别函式库为javamicroeditionio.*。区分出两种主要的Configuration 之後,JAVA ME 接著在定义出Profile的概念。Profile 是架构在Configuration 之上的规格。之所以有Profile的概念,是为了要更明确地区分出各种嵌入式装置上Java 程序该如何开发以及它们应该具有哪些功能。因此Profile 之中定义了与特定嵌入式装置非常相关的扩充类别函式库,而 Java 程序在各种嵌入式装置上的使用者介面该如何呈现就是定义在Profile 里头。Profile 之中所定义的扩充类别函式库是根据底层Configuration 内所定义的核心类别函式库所建立。二架构介绍与J2SE和J2EE相比,JAVA ME总体的的运行环境和目标更加多样化,但其中每一种产品的用途却更为单一,而且资源限制也更加严格。为了在达到标准化和兼容性的同时尽量满足不同方面的需求,JAVA ME的架构分为Configuration、Profile和Optional Packages(可选包)。它们的组合取舍形成了具体的运行环境。 Configuration主要是对设备纵向的分类,分类依据包括存储和处理能力,其中定义了虚拟机特性和基本的类库。已经标准化的Configuration有- Connected Limited Device Configuration(CLDC)和Connected Device Configuration(CDC)。 Profile建立在Configuration基础之上,一起构成了完整的运行环境。它对设备横向分类,针对特定领域细分市场,内容主要包括特定用途的类库和API。CLDC上已经标准化的Profile有Mobile Information Device Profile ( MIDP)和Information Module Profile(IMP),而CDC上标准化的Profile有Foundation Profile(FP)、Personal Basis Profile(PBP)和Personal Profile(PP)。 可选包独立于前面两者提供附加的、模块化的和更为多样化的功能。目前标准化的可选包包括数据库访问、多媒体、蓝牙等等三开发工具开发Java ME程序一般不需要特别的开发工具, 开发者只需要装Java SDK 及下载免费的 Sun Java Wireless Toolkit 2.xx系列开发包,就可以开始编写Java ME程式,编译及测试, 此外目前主要的IDE(Eclipse 及 NetBeans)都支持 Java ME 的开发,个别的手机开发商如 Nokia 、Sony Ericsson、摩托罗拉、Android系统 都有自己的SDK, 供开发者再开发出兼容于他们的平台的程序。四JAVA ME游戏(一)研究背景 游戏作为人们日常生活的一个重要的娱乐项目,也带动了巨大的游戏相关产业市场的发展。游戏平台从游戏机、电视游戏,到pc游戏,到手机游戏,中间经历了很多的技术的变革。随着新技术的发展和人们生活水平的提高,手机开始逐渐普及,手机以其小巧便捷,方便的特性成为人们的必备通讯工具。而基于手机平台的手机游戏也就拥有了巨大的市场空间,随着3g的开通和应用,手机游戏必将迎来新的一轮游戏热潮! (二)手机游戏概述 手机游戏可以根据游戏本身的不同,而分成文字类游戏和图形类游戏两种1.文字类游戏: 文字类游戏是以文字交换为游戏形式的游戏。这种游戏一般都是通过玩家按照游戏本身发给您的手机的提示,来回复相应信息进行的游戏。举一个简单的例子,目前很知名的短信游戏“虚拟宠物”就是典型的文字类游戏。在游戏中,游戏服务商会给您一些短信提示,比如服务商可能会给你发送如下短信“您的宠物饥饿度:70,饥渴度:20,疲劳度:20,喂食请回复内容为数字1的信息,喂水请回复内容为数字2的信息,休息请回复数字3”等等,那么,您回复数字“1”之后,游戏会给您回一个信息“您的宠物已经喂食完毕,您的宠物的饥饿度变为20”,如此类推,您便可以通过手机短信的方法来进行游戏了。 文字类游戏主要分文两种 (1).短信游戏 (2). wap浏览器游戏 (1)短信类游戏: 就好像“虚拟宠物”那样。短信游戏是通过玩家和游戏服务商通过短信中的文字的内容来交流,达到进行游戏的目的的一种文字游戏。 由于短信游戏的整个游戏过程都是通过文字来表达,造成短信游戏的娱乐性较差。但是短信游戏却是兼容性最好的手机游戏之一。只要您的手机可以发短信,您就可以畅快的享受短信游戏给您带来的快乐了。 (2)wap浏览器游戏: wap是一种手机拨号上网的网络服务。而wap浏览器游戏就好像我们用电脑上网,并通过浏览器浏览网页来进行的简单游戏一样,也属于一种文字游戏。其进行方法和短信游戏类似,玩家可以根据wap浏览器浏览到的页面上的提示,通过选择各种不同的选项的方法来进行游戏。wap游戏也有短信游戏不够直观的缺点。 综观文字类游戏,其都有着一个共同的特点,即游戏是通过文字描述来进行的。游戏过程中,需要玩家进行过多的想象,使得游戏相对比较单调。虽然目前已经有了彩信等特殊服务可以让这类游戏更加人性化,但是其本质依然无法改变。而且,对于文字类游戏来说,其不低的价格门槛依旧是制约其发展的一大瓶颈。 2.图形类游戏: 图形类游戏更接近我们常说的“电视游戏”,玩家通过动画的形式来发展情节进行游戏。由于游戏采用了更为直观且更为精美的画面直接表现,因此图形类游戏的游戏性和代入感往往较文字类游戏高。因此广受玩家们的欢迎。 图形类游戏主要分为: (1).嵌入式游戏: 嵌入式游戏是一种将游戏程序预先固化在手机的芯片中的游戏。由于这种游戏的所有数据都是预先固化在手机芯片中的,因此这种游戏无法进行任何修改。也就是说,您不能更换其它的游戏,只能玩您的手机中已经存在的游戏,且您也不能将它们删除。 诺基亚早期手机中的“贪吃蛇12”就是嵌入式游戏的典型例子。 (2).可变安装式游戏: 用户可以通过GPRS,3G网络或者电脑等方式,下载Java ME手机游戏安装到自己的手机里,这是现在比较流行的趋势,使自己的手机拥有更多的游戏应用,百玩不厌。 java 游戏 java是一种程序语言,具体是什么程序语言我们完全没有必要知道。作为游戏一族,我们只需要知道两件事: 第一,您的手机是否支持java,要了解这一点您可以查阅您的手机的说明书,或者直接询问经销商。 第二,您挑选的java游戏是否支持您的手机,要了解这一点,您可以参阅“为什么手机游戏也会有兼容性问题”以及“如何从游戏下载符合您的手机型号的手机游戏”部分。 在这里,有一个误区需要解释,那就是有时候我们说起java游戏,往往第一个想到的可能就是高端的手机配置,事实上这是一个意识形态上大大的误区。 (3).brew游戏 我们也不用知道brew是什么东西,要使用brew,您只需要了解您的手机是否支持它就可以了。目前,只有cdma的手机才支持brew,但是同时,cdma也支持java,于是为了减小成本,一般的开发商还是愿意选择基于java的游戏进行开发。因此,brew支持的游戏还不是很多。 (4).uni-java游戏 uni-java是中国联通刚刚为其手机准备的一个新的通用开发平台,目前还处于开发阶段,还没有基于uni-java的手机推出。但是在不久的将来,uni-java必将是联通的一把利器。五Java ME数字签名随着国家3g牌照发放的临近,手机游戏市场再度成为业界关注的焦点。上周,业界相关人士表示,中国手机游戏市场经过几年的市场培育,市场开发已渐成熟,3g时代的到来将使我国手机游戏市场规模将大幅度增长,一场手机游戏盛宴有望上演。3g时代的到来,网络带宽的速度将大幅提升,那么手机游戏带给用户的将又是一种全新的体验,大家体验越来越好的时候,这个经济一定会越来越热。因此可以预见3g时代到来的时候,手机游戏一定会成为主流之一。从手机游戏的几年发展不难看出,从简单内置的手机游戏到下载类游戏,再到联网游戏、多人联网游戏,最后发展到跨平台联网游戏,手机游戏产业正不断升级,随着3g时代的到来,对于手机游戏来说,意味着更强的终端表现力、更快的传输速度,全新的体验将使它吸引更多的用户加入进来。 得到一个证书后就可以对Java ME的jad文件进行签名。这里有一些与签名相关的需要注意的一些问题。 1. 想要安装签过名的软件,就必须通过jad来安装。 我们知道Java ME程序生成后会有jad和jar两个文件,一般情况下我们只需要安装jar文件就可以了。例如我会将jar文件通过蓝牙传到手机上,再进行安装。但如果想通过手动安装签过名的文件,就要通过jad来安装,而且要确保jad和jar文件是在相同目录下。我的做法是通过数据线将两个文件拷入手机的内存或存储卡上,然后通过jad来安装,这样安装好的软件就是签过名的软件了。不会再有总是很烦人的询问用户是否允许操作的提示信息。 但就我看过的手机看来,应该是不同的手机有不同的表现。例如索爱的手机关于提示仍然是需要用户自己设置的。诺基亚也是。只是诺基亚的在使用非签名软件时用户无法设置为“总是允许”或“只提示一次”。而签了名的就可以设置了。 2. 编程人员需要注意,像很多功能在未签名前是可以使用的,例如gps,网络连接,文件读写等。 3. 签过名的软件有什么好处。 签名就是告诉我们这个软件是可信的,对用户最直接的感受就是联网或访问手机文件的时候,收发短信,彩信,蓝牙等,但签名后这些功能就部可用了。 这就是jad中MIDlet-Permissions属性的问题。当未签名时对这个属性的要求并不严格,但签名后就一定要注意。必须把所要使用到的权限加入进去,否则这个功能就不能使用了。六J2me嵌入式开发 代码:import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;/*MIDLet抽象类: *是MIDlet API 中最核心的包,只包含了一个类(MIDlet)*提供了使MIDP应用程序在移动设备上运行所需的基本功能*是j2me程序的主类了,用来对canvas的调度*/*CommandListener接口:实现使MIDlet能响应按钮命令事件 */控制屏幕的显示:setCurrent();/GameCanvas画布/getGraphics( ),方法作用:得到画布中脱机屏幕上用于作图的 Graphics 对象/ flushGraphics( ),方法作用:要求刷新屏幕,这时脱机屏幕上的图像会被绘制到真实屏幕上。/实现的是CommandListener接口的方法,实现按钮事件/销毁MIDletpublic class ChickenMID extends MIDlet implements CommandListener/*MIDLet抽象类: *是MIDlet API 中最核心的包,只包含了一个类(MIDlet)*提供了使MIDP应用程序在移动设备上运行所需的基本功能*是j2me程序的主类了,用来对canvas的调度*/Command exitCommand;/注销MIDprotected void destroyApp(boolean arg0) throws MIDletStateChangeException /暂停MIDprotected void pauseApp() /启动MIDprotected void startApp() throws MIDletStateChangeException Display display = Display.getDisplay(this);/屏幕显示setCurrent();把对象显示在屏幕HCanvas canvas = new HCanvas(display);/画布exitCommand = new Command(exit,Command.EXIT,0);/按钮canvas.addCommand(exitCommand);/把按钮加到画布里canvas.setCommandListener(this);/给按钮加事件display.setCurrent(canvas);/把画布显示在桌面上canvas.gameStart();public void commandAction(Command c, Displayable arg1) if(c = exitCommand)/关闭MIDtry this.destroyApp(true); catch (Exception e) e.printStackTrace();this.notifyDestroyed();import java.io.IOException;import javax.microedition.lcdui.AlertType;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.game.Sprite;/* * Canvas 是midp1.0的东西,GameCanvas是midp2.0才有的, * 两个都是画布类,作用基本上就是可以在手机屏幕上显示东西, * GameCanvas加入了双缓冲等一些特性便于程序员简化游戏的编程。 * Graphics是图像类,作用是让你绘制图像,但是绘制的图像是不能直接显示的, * 必须通过Canvas或gameCanvas才能画到屏幕上 */public class HCanvas extends GameCanvas implements RunnableImage background;/背景图片Image chicken;/小鸡图片Graphics g;/作图用的Sprite chickenSprite; /小鸡动画Sprite carSprite = new Sprite4;/汽车动画int carYSpeed = new int4;/汽车的y轴移动速度int livenum;/生命数Image chickenHead;int frameTime = 33;int score;int inputnum = 0;boolean gameover;Display display; public HCanvas(Display d) super(true); this.display = d; public void gameStart() g = this.getGraphics(); try this.livenum = 3; this.gameover = false; score = 0; background = Image.createImage(/Highway.png);/背景图片chicken = Image.createImage(/Chicken.png);/小鸡图片chickenSprite = new Sprite(chicken,22,22);/小鸡精灵chickenSprite.setPosition(2, 77);chickenHead = Image.createImage(/ChickenHead.png);/小鸡图片carSprite0 = new Sprite(Image.createImage(/Car1.png);/汽车carSprite0.setPosition(27, 0);carYSpeed0 = 3;carSprite1 = new Sprite(Image.createImage(/Car2.png);carSprite1.setPosition(62, 0);carYSpeed1 = 2;carSprite2 = new Sprite(Image.createImage(/Car3.png);carSprite2.setPosition(93, 120);carYSpeed2 = -3;carSprite3 = new Sprite(Image.createImage(/Car4.png);carSprite3.setPosition(128, 127);carYSpeed3 = -5; catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();Thread t = new Thread(this);t.start(); public void run() while(true)update();draw(g);try Thread.sleep(frameTime); catch (Exception e) public void update()if(this.gameover)int key = this.getKeyStates();if(key & FIRE_PRESSED) != 0)this.gameover = false;this.livenum = 3;this.score = 0;return;/小鸡移动this.inputnum+;if(this.inputnum2)int key = this.getKeyStates();if(key & UP_PRESSED) != 0)this.chickenSprite.move(0, -6);this.chickenSprite.nextFrame();if(key & DOWN_PRESSED) != 0)this.chickenSprite.move(0, 6);this.chickenSprite.nextFrame();if(key & LEFT_PRESSED ) != 0)this.chickenSprite.move(-6, 0);this.chickenSprite.nextFrame();if(key & RIGHT_PRESSED) != 0)this.chickenSprite.move(6, 0);this.chickenSprite.nextFrame();this.inputnum = 0;/成功过道if(chickenSprite.getX()154)AlertType.ERROR.playSound(display);chickenSprite.setPosition(2, 77);this.score = this.score + 10000;/小鸡边界chickenBorder(chickenSprite);/汽车移动for(int i=0;i4;i+)carSpritei.move(0,carYSpeedi);carBorder(carSpritei);/小鸡碰撞汽车if(chickenSprite.collidesWith(carSpritei, true)AlertType.WARNING.playSound(display);this.livenum -;if(this.livenum this.getHeight()car.setPosition(car.getX(), 0-car.getHeight();if(car.getY()0 - car.getHeight()car.setPosition(car.getX(), this.getHeight();/处理小鸡边界问题public void chickenBorder(Sprite chickenSprite)if(chickenSprite.getX()this.getWidth()-chickenSprite.getWidth()chickenSprite.setPosition(this.getWidth()-chickenSprite.getWidth(), chickenSprite.getY();if(chickenSprite.getY()this.getHeight()-chickenSprite.getHeight()chickenSprite.setPosition(chickenSprite.getX(),this.getHeight()-chickenSprite.getHeight();public void draw(Graphics g)g.drawImage(background, 0,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品购销管理管理制度
- 药品风险放行管理制度
- 药店复方制剂管理制度
- 药店药品售后管理制度
- 萤石监控中心管理制度
- 设备仪器适用管理制度
- 设备固定资产管理制度
- 设备技改创新管理制度
- 设备检修操作管理制度
- 设备租赁单位管理制度
- 2025-2030年中国经颅磁刺激仪行业市场现状供需分析及投资评估规划分析研究报告
- 2025年江苏高考历史真题(解析版)
- 广西来宾市2023-2024学年高二下学期7月期末考试物理试题(含答案)
- 2026届高考议论文写作专题:议论文基础写作结构
- 会员月底抽奖活动方案
- 医院培训课件:《高血压病防治策略》
- 设备备品备件管理制度
- 电气装置安装工程接地装置施工及验收规范
- 攀枝花市仁和区社会招考社区工作者考试真题2024
- 浙江省镇海中学2024-2025学年高二数学第二学期期末复习检测模拟试题含解析
- 2025年上海杨浦区七下英语期末达标检测试题含答案
评论
0/150
提交评论