#Edition是近年来随着各种不同设备.docx
- 文档编号:7390438
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:12
- 大小:22.10KB
#Edition是近年来随着各种不同设备.docx
《#Edition是近年来随着各种不同设备.docx》由会员分享,可在线阅读,更多相关《#Edition是近年来随着各种不同设备.docx(12页珍藏版)》请在冰豆网上搜索。
#Edition是近年来随着各种不同设备
J2ME(Java 2 Micro Edition>是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。
它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“Write Once, run anywhere”的Java特性而提高开发的效率。
随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
本论文着眼于J2ME技术的应用,开发一款简单的手机游戏程序--Beckham Goal。
论文在分析了实现小游戏的相关基础技术及理论后,对该游戏进行了功能需求分析、模块划分及总体设计,解决了游戏中涉及的碰撞检查以及其他若干关键技术,最后在J2ME平台下实现了该小游戏,并通过验证达到预期的效果。
关键词:
J2ME;手机游戏; K-Java;碰撞检查
1 引言
1.1 手机游戏概述
手机游戏几乎是当今市面上所有手机所必有的。
在几年前的机型中,游戏都是手机中自带的,称为嵌入式游戏,由手机生产厂商设计并直接嵌入在手机里面。
这样的游戏用户不能自行开发、添加及删除,其游戏种类取决于不同的机型,是一种单机游戏。
随后的几年兴起了一种基于短信的游戏,由用户发送特定字符串给短信游戏提供商,来控制游戏的动作或剧情的发展。
随着wap的兴起,出现了一种基于浏览器的游戏,和短信游戏差不多,由用户手机通过wap登录游戏提供商所提供的网址,然后填写或选择相应表单来操作游戏。
上面两类游戏都是基于文本的,操作比较繁琐,游戏性不强。
短信游戏每做一次操作<也就是发送一条短信)需要花费一毛钱;wap游戏无论是通过CSD上网还是通过GPRS上网都需要出上网费用。
两种游戏的花费都比较高。
现在新出的手机很大一部分都支持Java程序下载,而且这是一种趋势。
由Java开发的游戏可以对图像进行操作,是动态的。
而且可以接入网络,既可以开发单机游戏也可以开发网络游戏。
随着彩屏手机的普及,游戏可以不再是黑白的,可随心所欲的为游戏中的不同物体赋予不同的颜色。
过去的手机是一个封闭的操作系统,除非用厂商自己的软件和工具,否则无法对手机的菜单进行改动,更无法在手机上附加其他应用。
而K-Java技术的应用将摆脱这些传统的束缚,K-Java编写的应用程序可以兼容不同的网络协定,简单说就是,只要网络内容服务提供商提供K-Java服务,用户的K-Java手机就可以拥有无限扩充应用的能力。
K-Java服务是一种新的移动数据业务的增值服务,它为用户提供了一个开放的平台,能更好地为用户提供全新图形化、动态化的移动增值服务。
用户使用支持K-Java功能的手机终端,接入网络内容服务提供商的K-Java服务平台,可以通过手机随意下载Java应用软件,能方便地享受类似于Internet上的各种服务,如下载游戏、动漫、小说等,也可进行各种在线应用,如联网游戏、收发邮件、证券炒股、信息查询等。
1.2 Java手机游戏的发展现状
在欧美市场,因为较早采用GPRS技术,所以欧洲和美国运营商的K-Java也开展得较早,不过早期的应用并没能在个人消费市场激起太大的波澜。
而日韩的无线数据业务从发展之初就将目标锁定在了游戏、娱乐等个人消费方面。
K-Java技术能够利用手机有限的硬件条件使得PC上大量的互动性娱乐、游戏应用在手机上,正是凭借着这一技术特点,K-Java迅速成为了手机游戏的主流编程语言。
在欧美市场,2002年此项业务的直接收入已经超过了2.45亿美元。
在中国,2003年2月15日,中国移动开始了大范围的K-Java应用测试。
4月8日,无线K-Java服务被移动正式定名为“百宝箱”,并全面开始免费试用。
而在发展较快的广东地区,更是从5月17日开始了大规模的K-Java业务推广,投入资金多达千万元。
7月1日,中国移动宣布了“百宝箱”正式商用的消息,K-Java在中国市场的掘金旅程也将由此开启。
摘 要
本系统是一个基于Java ME平台的无线网络移动端的俄罗斯方块游戏,利用Java ME Wireless Toolkit(WTK>开发包工具在无线网络移动端上实现经典的俄罗斯方块游戏。
论文开始部分对无线网络移动系统开发中常使用几种开发语言和环境作了比较,说明了选择Java ME Wireless Toolkit作为开发环境的的原因并对它作了相关的介绍。
并展示了在WTK中打开一个项目、把源文件打包成JAR包、产生混淆包的方法和过程。
在系统设计时,遵循了无线网络移动端程序的startApp、pauseApp、destroyApp的开发生命周期。
在设计与实现方面,分成难度选择、游戏规则、方块处理这几个模块进行实现。
在开发与实现的同时也讲解了俄罗斯方块这款古老而经典游戏的游戏背景、规则以及相关特性。
最终展示了无线网络移动端的游戏开发的基本开发过程和设计思路。
关键词:
无线网络移动端;Java ME;俄罗斯方块;游戏开发
1. 引言
1.1 系统综述
综合运用以前所学专业知识,在Java ME开发平台上实现无线网络移动端的俄罗斯方块游戏。
其研究主要包括以下内容:
第一,克服有限的可视屏幕尺寸,使游戏正常显示;第二,解决有限的可用内存调用问题,实现游戏流畅运行;第三,俄罗斯方块游戏规则算法在Java ME平台的实现,保证游戏可玩性;第四,游戏开始、结束等逻辑在游戏进行中的判断。
本系统在Windows XP的操作系统下,Java Micro Edition Wireless Toolkit 2.1为开发工具,用中文版UltraEdit做为代码编辑器而实现的。
1.2 Java ME游戏开发背景
游戏开发是艺术与编程技术相结合的完美表现。
利用Java的“Write once,run anywhere”特性,可以真正达到程序只写一次,在任何平台都可以执行。
同时Java语言对面向对象的良好支持,使开发具有高效性。
所以Java ME(Java Micro Edition>是广大无线网络移动端游戏开发厂商和游戏开发爱好者的首选平台。
1.3 无线网络移动端游戏发展现状
纵观IT产业的历史,计算机游戏已经成为技术创新背后的动力之一。
计算机游戏者渴望更加强大的硬件计算能力,渴望不受不同的软件的限制——无论是将图形强制在人工智能(AI>上还是网络安全性。
而无线网络移动端游戏已成为IT产业中增长最快的部分之一。
无线网络移动端是一个崭新的游戏开发平台。
在众多种类的游戏当中,只有几种游戏类型是适合开发成无线网络移动端游戏的。
低激烈程度的游戏;简单街机游戏;运动类“情景”游戏;简单的运动类游戏;解谜或简单的匹配游戏;主题测试游戏。
在上面的游戏种类中,我选择了经典的方块匹配游戏:
俄罗斯方块。
俄罗斯方块有着举世闻名的游戏性且非常直观。
某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似俄罗斯方块触动了玩家某些内在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。
在操控性方面,只需方向键就可完成对游戏的全盘控制,这也适合无线网络移动端游戏的基本特性。
俄罗斯方块要比过去二十年间出现的任何东西都要浪费人们的时间。
它被GameSpot评选为历史上最伟大游戏之一。
它的起源实际上要追溯到八十年代中期,尽管它的人气一直到几年后才开始显露出来。
游戏的概念十分简单,如今已经成为一种公认的规则:
屏幕顶部以随机顺序落下形状各异的碎块,玩家要试图用它们拼成没有空隙的行列。
玩家是没法打赢它的,因为坚持得时间越长,游戏速度也就变得越来越快,而游戏的吸引力就在于使玩家顶住碎块的进攻,支撑的时间比上一次更长。
俄罗斯方块举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。
某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似俄罗斯方块触动了玩家某些内在的感官,使得哪怕是最杂乱无章的玩家也要把事情整理妥当。
importjava.awt.*。
importjava.awt.event.*。
//俄罗斯方块类
publicclassERS_BlockextendsFrame{
publicstaticbooleanisPlay=false。
publicstaticintlevel=1,score=0。
publicstaticTextFieldscoreField,levelField。
publicstaticMyTimertimer。
GameCanvasgameScr。
publicstaticvoidmain(String[]argus>{
ERS_Blockers=newERS_Block("俄罗斯方块游戏V1.0Author:
Vincent">。
WindowListenerwin_listener=newWinListener(>。
ers.addWindowListener(win_listener>。
}
//俄罗斯方块类的构造方法
ERS_Block(Stringtitle>{
super(title>。
setSize(600,480>。
setLayout(newGridLayout(1,2>>。
gameScr=newGameCanvas(>。
gameScr.addKeyListener(gameScr>。
timer=newMyTimer(gameScr>。
timer.setDaemon(true>。
timer.start(>。
timer.suspend(>。
add(gameScr>。
PanelrightScr=newPanel(>。
rightScr.setLayout(newGridLayout(2,1,0,30>>。
rightScr.setSize(120,500>。
add(rightScr>。
//右边信息窗体的布局
MyPanelinfoScr=newMyPanel(>。
infoScr.setLayout(newGridLayout(4,1,0,5>>。
infoScr.setSize(120,300>。
rightScr.add(infoScr>。
//定义标签和初始值
Labelscorep=newLabel("分数:
",Label.LEFT>。
Labellevelp=newLabel("级数:
",Label.LEFT>。
scoreField=newTextField(8>。
levelField=newTextField(8>。
scoreField.setEditable(false>。
levelField.setEditable(false>。
infoScr.add(scorep>。
infoScr.add(scoreField>。
infoScr.add(levelp>。
infoScr.add(levelField>。
scorep.setSize(newDimension(20,60>>。
scoreField.setSize(newDimension(20,60>>。
levelp.setSize(newDimension(20,60>>。
levelField.setSize(newDimension(20,60>>。
scoreField.setText("0">。
levelField.setText("1">。
//右边控制按钮窗体的布局
MyPanelcontrolScr=newMyPanel(>。
controlScr.setLayout(newGridLayout(5,1,0,5>>。
rightScr.add(controlScr>。
//定义按钮play
Buttonplay_b=newButton("开始游戏">。
play_b.setSize(newDimension(50,200>>。
play_b.addActionListener(newCommand(Command.button_play,gameScr>>。
//定义按钮LevelUP
Buttonlevel_up_b=newButton("提高级数">。
level_up_b.setSize(newDimension(50,200>>。
level_up_b.addActionListener(newCommand(Command.button_levelup,gameScr>>。
//定义按钮LevelDown
Buttonlevel_down_b=newButton("降低级数">。
level_down_b.setSize(newDimension(50,200>>。
level_down_b.addActionListener(newCommand(Command.button_leveldown,gameScr>>。
//定义按钮LevelPause
Buttonpause_b=newButton("游戏暂停">。
pause_b.setSize(newDimension(50,200>>。
pause_b.addActionListener(newCommand(Command.button_pause,gameScr>>。
//定义按钮Quit
Buttonquit_b=newButton("退出游戏">。
quit_b.setSize(newDimension(50,200>>。
quit_b.addActionListener(newCommand(Command.button_quit,gameScr>>。
controlScr.add(play_b>。
controlScr.add(level_up_b>。
controlScr.add(level_down_b>。
controlScr.add(pause_b>。
controlScr.add(quit_b>。
setVisible(true>。
gameScr.requestFocus(>。
}
}
//重写MyPanel类,使Panel的四周留空间
classMyPanelextendsPanel{
publicInsetsgetInsets(>{
returnnewInsets(30,50,30,50>。
}
}
//游戏画布类
classGameCanvasextendsCanvasimplementsKeyListener{
finalintunitSize=30。
//小方块边长
introwNum。
//正方格的行数
intcolumnNum。
//正方格的列数
intmaxAllowRowNum。
//允许有多少行未削
intblockInitRow。
//新出现块的起始行坐标
intblockInitCol。
//新出现块的起始列坐标
int[][]scrArr。
//屏幕数组
Blockb。
//对方快的引用
//画布类的构造方法
GameCanvas(>{
rowNum=15。
columnNum=10。
maxAllowRowNum=rowNum-2。
b=newBlock(this>。
blockInitRow=rowNum-1。
blockInitCol=columnNum/2-2。
scrArr=newint[32][32]。
}
//初始化屏幕,并将屏幕数组清零的方法
voidinitScr(>{
for(inti=0。
i i++> for(intj=0。 j j++> scrArr[j]=0。 b.reset(>。 repaint(>。 } //重新刷新画布方法 publicvoidpaint(Graphicsg>{ for(inti=0。 i i++> for(intj=0。 j j++> drawUnit(i,j,scrArr[j]>。 } //画方块的方法 publicvoiddrawUnit(introw,intcol,inttype>{ scrArr[row][col]=type。 Graphicsg=getGraphics(>。 tch(type>{//表示画方快的方法 case0: g.setColor(Color.black>。 break。 //以背景为颜色画 case1: g.setColor(Color.blue>。 break。 //画正在下落的方块 case2: g.setColor(Color.magenta>。 break。 //画已经落下的方法 } g.fill3DRect(col*unitSize,getSize(>.height-(row+1>*unitSize,unitSize,unitSize,true>。 g.dispose(>。 } publicBlockgetBlock(>{ returnb。 //返回block实例的引用 } //返回屏幕数组中(row,col>位置的属性值 publicintgetScrArrXY(introw,intcol>{ if(row<0||row>=rowNum||col<0||col>=columnNum> return(-1>。 else return(scrArr[row][col]>。 } //返回新块的初始行坐标方法 publicintgetInitRow(>{ return(blockInitRow>。 //返回新块的初始行坐标 } //返回新块的初始列坐标方法 publicintgetInitCol(>{ return(blockInitCol>。 //返回新块的初始列坐标 } //满行删除方法 voiddeleteFullLine(>{ intfull_line_num=0。 intk=0。 for(inti=0。 i i++>{ booleanisfull=true。 L1: for(intj=0。 j j++> if(scrArr[j]==0>{ k++。 isfull=false。 breakL1。 } if(isfull>full_line_num++。 if(k! =0&&k-1! =i&&! isfull> for(intj=0。 j j++>{ if(scrArr[j]==0> drawUnit(k-1,j,0>。 else drawUnit(k-1,j,2>。 scrArr[k-1][j]=scrArr[j]。 } } for(inti=k-1。 i i++>{ for(intj=0。 j j++>{ drawUnit(i,j,0>。 scrArr[j]=0。 } } ERS_Block.score+=full_line_num。 ERS_Block.scoreField.setText(""+ERS_Block.score>。 } //判断游戏是否结束方法 booleanisGameEnd(>{ for(intcol=0。 col col++>{ if(scrArr[maxAllowRowNum][col]! =0> returntrue。 } returnfalse。 } publicvoidkeyTyped(KeyEvente>{ } publicvoidkeyReleased(KeyEvente>{ } //处理键盘输入的方法 publicvoidkeyPressed(KeyEvente>{ if(! ERS_Block.isPlay> return。 tch(e.getKeyCode(>>{ caseKeyEvent.VK_DOWN: b.fallDown(>。 break。 caseKeyEvent.VK_LEFT: b.leftMove(>。 break。 caseKeyEvent.VK_RIGHT: b.rightMove(>。 break。 caseKeyEvent.VK_SPACE: b.leftTurn(>。 break。 } } } //处理控制类 classCommandimplementsActionListener{ staticfinalintbutton_play=1。 //给按钮分配编号 staticfinalintbutton_levelup=2。 staticfinalintbutton_leveldown=3。 staticfinalintbutton_quit=4。 staticfinalintbutton_pause=5。 staticbooleanpause_resume=true。 intcurButton。 //当前按钮 GameCanvasscr。 //控制按钮类的构造方法 Command(intbutton,GameCanvasscr>{ curButton=button。 this.scr=scr。 } //按钮执行方法 publicvoidactionPerformed(ActionEvente>{ tch(curButton>{ casebutton_play: if(! ERS_Block.isPlay>{ scr.initScr(>。 ERS_Block.isPlay=true。 ERS_Block.score=0。 ERS_Block.scoreField.setText("0">。 ERS_Block.timer.resume(>。 } scr.requestFocus(>。 break。 casebutton_levelup: if(ERS_Block.level<10>{ ER
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Edition 近年来 随着 各种 不同 设备