手机游戏应用程式设计.docx
- 文档编号:23979886
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:56
- 大小:33.86KB
手机游戏应用程式设计.docx
《手机游戏应用程式设计.docx》由会员分享,可在线阅读,更多相关《手机游戏应用程式设计.docx(56页珍藏版)》请在冰豆网上搜索。
手机游戏应用程式设计
致远管理学院
电机工程学系
专题制作成果书
手机游戏应用程式设计
与制作之研究
组员:
陈佳韦9411104018李国帆9411104038杨易秦9411104057
指导老师:
卓信诚
中华民国九十七年四月
目录
一,摘要
二,研究背景与动机
三,研究目的
四,执行平台
五,系统环境需求
六,方法与步骤
七,范例
八,游戏制作
九,结论
十,参考文献
一,摘要:
随著时代的进步,手机的功能除了基本的接听功能,拍照,录音甚至3G功能以外,可以说是一应俱全,手机的多媒体功能越来越强大,而现代人把手机用做娱乐用途的比例也越来越高,开发出一套可以支援手机在拍照,录音等强大功能的游戏软体,让玩家可以利用这些功能去进行游戏,充分展现有别於传统手机游戏的不一样的乐趣.
市面上销售的手机,具有愈来愈多元的功能.最原始为达沟通目的已不再满足消费者的需求,厂商纷纷绞尽脑汁,研发出更多更新的机能,创造出附加价值,以求抓住消费者目光.然而消费者的追求便利,新奇的心理总是难以填满的,在各个厂商的手机功能都大同小异下,想在玲琅满目的手机堆里脱颖而出,创造出无限商机,更是要有独到的过人之处.於是脑筋动的快的业者,便想衔接既有的电玩市场,让游戏爱好者,闲暇之余也能在手机上玩到游戏,於是一场手机游戏的生存大赛,便如火如荼地展开了.
二,研究背景与动机
现今的科技非常发达,然而在众多种类的手机产品里,都有其他独特不同的功能,以现在多媒体手机的探讨来说,手机已不再是能通话的此种功能而已,他所要面临的是一种潮流的趋势,不仅要能够通话,还要能有照相,影音,游戏等功能,来达到数位影像休闲多媒体的功能.
手机业者之间非常的竞争,让手机商品在短短的几年中蓬勃发展,随著系统的演变,手机的种类跟规格也越来越讲究,从早期黑金刚到灰阶手机,再到现今轻薄短小的彩色合旋手机,实在的展现出系统跟手机是相辅相成的也印证了人们的使用需求跟科技的发展是息息相关的.
就手机游戏而言,市面上的任何一款手机大多都支援了Java手机游戏的系统,让手机游戏不再局限於内建的功能,而是朝向了能下载更多手机游戏为前提,让使用者能有更多的选择.然而使用者大多只会玩手机里的游戏,却不知道一个Java手机是如何做成的,就因这些原因,引起了我们的兴趣,所以我们就想开发出新的游戏,不仅可以自己来玩,也可以从开发游戏的过程中,了解一些Java游戏的开发过程.
其实游戏型分很多种,分别有动作(Action)游戏,冒险(Adventure)游戏,射击(Shooters)游戏,格斗(Fighting)游戏,智(Puzzle)游戏,模拟(Simulation)游戏等…每种游戏有其特色好我们之所以会选择动作型的游戏是因为超级玛也是这型游戏的代表之一,而它是我们从小就接触的游戏,虽然随著龄的增长也没有减少它在我们记忆中所带的快回忆.
三,研究目的
虽然先前并未看到有关於根本主题相关的研究,但是想发展出属於自己的游戏;希望能在本研究中探讨Java游戏的开发跟手机游戏的演变.以下为期望达到的目的:
1.由於手机游戏的市场逐渐普遍,一个游戏的好坏往往得由消费者的
喜好来决定.若能符合大众的喜好,开发出受欢迎的游戏,便自然有市场的需求.而为了写出一个好游戏,必须让消费者市场来评鉴,若不能开发出一个受人喜爱,没有任何经济娱乐,价值的游戏.本组将以某款手机作为模拟平台,开发出与此手机相容的游戏,让此款手机的爱好者,能有更多不同游戏的选择.
2.以使用者的方式来思考其使用者所希望玩到的游戏,再以Java的程式呈现出游戏开发的最后结果.收集游戏的资料,以客观的方式,知道使用者想玩的游戏,而不是一再的开发出相同款式的游戏,让玩此游戏的能有更多的新鲜感.
3.让使用者不仅能玩游戏之外,也希望能让想开发游戏的人,能够有一点基本的开发知识,和一些开发时应注意的事项.
4.研究各种不同的游戏,再加以综合其优点,开发出合适的游戏供人娱乐.市面上的Java手机游戏有其优缺点,而每一款游戏都有本身的特性,每个使用者所喜欢的游戏特性也各不相同,因此观点也不同,所以对游戏的优缺点方面的看法也不同,本组只能尽量让使用者玩起来更加的得心应手,而不会卡在一些小小的瑕疵上.
5.由於这次有机会能在手机上撰写游戏程式,除了了解游戏的制作外,还得懂得如何开发出手机应用程式.如此把手机的所有功能都彻底摸清后,在设计游戏程式上,才会更显得心应手,左右逢源,把手机的最大机能发挥的淋漓尽致.
四,执行平台
各个厂商虽有各自不同规格的手机,但考虑最大的经济效益,让所有的手机持用者都能玩到游戏,便得借助Java的Writeonce,runeverywhere的特色来制作手机游戏,以下便是预期可执行此开发游戏的手机平台,及更新资料网址:
NOKIA
Casio
Hitachi
Motorola
Siemens
SonyEricsson
系统环境需求
如前所述,了解手机的硬体规格是撰写手机程式中相当重要的前项作业.笔者所撰写的游戏,理想上是在大部份的手机上都能运作的,因此也要了解所需的手机基本规格是什麼以下是Sun公司所公布的MIDlet的规格,它也是手机最机本的规格了.
显示器
显示器便是游戏的画面所在,基本的要求如下.
Screen-size:
96*54以上
Displaydepth:
1-bit
Pixelshape1:
1
输入
单手输入键盘
双手输入键盘
触控萤幕
记忆体
MIDP元件用的128KB以上之非挥发性记忆体
给应用程式制作出来的永续资料用的8KB以上之非挥发性记忆体Java执行阶段的32KB以上之挥发性记忆体
六,方法与步骤
手机需要有网路的功能,才能从伺服器端下戴游戏来玩.如图所示,行动Java手机得透过Internet,从游戏伺服器下载,方可进行游戏.而手机的网路机能有双向通讯,可以断续通讯,频宽的限制等区分.
来电
来电通话结束暂停键,或来电重新开始
没电开始游戏
有电离开
电源耗尽,全灭重来
电源耗尽离开
为手机的状态表示图,有待机,通话中,关机,及游戏等状态.一开始手机的状态通常为待机中,也就电源充足,并且是打开正在运作,等候来电或作其它目的使用的常态.当想玩游戏时,便执行游戏程式,此时便会从待机状态跑到游戏状态中.当游戏进行时,若遇到来电,则将暂停游戏,并回主选单中,接收通话.等通话结束,还须回到程式选单中点选原游戏程式,继续中断的游戏.当游戏进行时,若手机没有电源了,则直接离开游戏,此时手机便到关机的作态中.此外在游戏状态中,亦有离开的功能选项,若进行离开这项指令的话,便离开游戏状态,回到待机状态中.
小组使用JAVA程式语言来制作单机游戏,除了游戏本身的演算法是主要难题外,介面的设计摆置也是需要用心解决的问题,希望我们有足够的毅力与实力来接受这个挑战.
1.研究方法:
由於小组各组员对JAVA语言的功力并不是十分强厚,所以首当其冲的目标就是不断的研读书籍与参考相关文献来累积自己coding的实力.
2.进行步骤:
首先分成两部份,一部份负责设计游戏的介面,包括按钮摆设,状态栏与提示文字的摆设都是重点;另一则是要针对游戏的运作下去规划其演算法,还要设定游戏每个细节,负责此部分的组员还要搜集游戏内需要用到的商品资讯,并整理汇集成相同格式的档案.
七,范例
在此以J2ME的官方网站sun所发布出的软体做个简单的介绍.在这之前要先做个环境的准备,首先在SDK的最新版本,并安装再修改上面的径资方法如下:
(1)点选开始→设定→控制台→系统→进阶→环境变
(2)找到系统变PATH,按「编辑」钮,在最后面加上C:
\ProgramFiles\Java\jdk1.5.0_08\bin;,然后按确定.(3)按「新增」,变名称输入JAVA_HOME,变值输入C:
\ProgramFiles\Java\jdk1.5.0_08,然后按确定.(4)按「新增」,变名称输入CLASSPATH,变值输入C:
\ProgramFiles\Java\jdk1.5.0_08\LIB,然后按确定.
接下下载一个名称j2mewirelesstoolkit的软体,网址:
下载完成时再安装这个软体,安装完成时可以在开始所有程式J2MEwirelesstoolkit2.2中看到软体,之中最常会被用到的工具KToolbar,这是建新专案,跟模拟手机动作的一个工具程式.把它开启会变成
(kToolbar的执行画面)
看到上图,就知道可以用,「新建专案」开启新的专案,用「开启专案」可以将之前开发过的专案再叫出再编辑,上面还有「设置」可以设定专案的属性「生成」这个语词就是编译程式的意思,「执」就是执程式,「「清除控制台」就是在视窗下方的空白处在执程式时会出现许多讯息,可用这个选项清除这些文字讯息.
在安装完这个软体之后会在C磁碟机的根目下产生(WT22)的资夹,当然会依您所安装的版本会有WTK后面版本代码而有所同,本段要介绍这些资夹内的功用
appdb
RMS资库与Keystore
apps
专案与范程式(我们所产生的新专案在裏面)
bin
J2ME开发工具的执档
docs
各种有帮助的明文件
lib
J2ME的函式库,Jar包和控制档
sessions
效能监控资
wtklib
J2MEWTK的主程式与模拟器的外观资
简单使用范(显示HELLOWORLD程式)
第一:
使用新建专案
再设定程式的属性
本程式会用到一些特别的语法所以使用预设就可以,但在此明,本研究会使用到CLDC1.1所以往后使用设定属性时请务必要选择上去然会无法编译,请记.
(专案完成设定的讯息画面)
是讯息视窗会明新专案所存放的资夹及位置所在所以我们在SRC资夹放一个helloworld.java的档案,这可以用记事本产生,在此使用记事本制作.
(记事本写程式面)
并将档案存放在c:
\wtk22\apps\helloworld\src\下面,程式码如下:
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclasshelloworldextendsMIDlet{
Displaydisplay;Formform;
publichelloworld(){display=Display.getDisplay(this);form=newForm("一个简单的实作");
form.append("helloworld这是我第一个J2me的程式");
}
publicvoidstartApp(){display.setCurrent(form);}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanunconditional){}
请再到Ktoolbar选单—>生成—>执就可看到下面第一个画面再按SELECTl就可得到(显示的是「一个简单的实作」).
八,游戏制作
贪食蛇的程式码
第一步骤画面布置
packageexample.tilepuzzle;
importexample.About;
importjava.util.Random;
importjavax.microedition.lcdui.*;
importjavax.microedition.midlet.MIDlet;
publicclassBoardextendsCanvasimplementsCommandListener{
MIDletmidlet;
Displaydpy;
Optionsoptions;
//thisstringmustbeexactly15characterslong
Stringletters="RATEYOURMINDPAL";
Fontfont;
Pieceblankp;
Piece[]all;
Piece[][]grid;
Randomrand;
//gridorigininpixels
intgridx;
intgridy;
//gridwidthandheight,incells
intgridw;
intgridh;
//cellgeometryinpixels
intcellw;
intcellh;
intcellyoff;
intcellxoff;
//commands
staticfinalintCMD_ABOUT=0;
staticfinalintCMD_EXIT=1;
staticfinalintCMD_OPTIONS=2;
staticfinalintCMD_RESET=3;
staticfinalintCMD_START=4;
staticfinalintCMD_UNLOCK=5;
staticfinalintCMD_ZLAST=6;//mustbezelast,ofcourse
Commandcmd[];
//statevariables
staticfinalintINITIALIZED=0;
staticfinalintPLAYING=1;
staticfinalintWON=2;
intgameState;
booleancheated;
voidD(Strings){System.out.println(s);}
classPiece{
Stringlabel;
booleaninv;
intserial;//serialnumberforordering
intix,iy;//initiallocationingridcoordinates
intx,y;//currentlocationingridcoordinates
Piece(Stringstr,intser,intnx,intny,booleanv){
label=str;
serial=ser;
x=ix=nx;
y=iy=ny;
inv=v;
}
voidsetLocation(intnx,intny){
x=nx;
y=ny;
}
booleanisHome(){
return(x==ix)&&(y==iy);
}
voidgoHome(){
setGrid(this,ix,iy);
}
//assumesbackgroundiswhite
voidpaint(Graphicsg){
intpx=x*cellw;
intpy=y*cellh;
if(label!
=null){
if(inv){
//blackoutlined,whitesquarewithblackwriting
g.setColor(0);
g.setFont(font);
g.drawRect(px,py,cellw-2,cellh-2);
g.drawString(label,
px+cellxoff,py+cellyoff,
Graphics.TOP|Graphics.LEFT);
}else{
//blacksquarewithwhitewriting
g.setColor(0);
g.fillRect(px,py,cellw-1,cellh-1);
g.setColor(0xFFFFFF);
g.setFont(font);
g.drawString(label,
px+cellxoff,py+cellyoff,
Graphics.TOP|Graphics.LEFT);
}
}
}
}
classBoardCommandextendsCommand{
inttag;
BoardCommand(Stringlabel,inttype,intpri,inttag_){
super(label,type,pri);
tag=tag_;
}
}
voidsetGrid(Piecep,intx,inty){
grid[x][y]=p;
p.setLocation(x,y);
}
//swapthepieceatsx,sywiththeblankpiece
//assumesthatthisisalegalmove
voidmoveBlank(intswapx,intswapy){
setGrid(grid[swapx][swapy],blankp.x,blankp.y);
setGrid(blankp,swapx,swapy);
}
//swapsthepiecesat(x1,y1)and(x2,y2)
//noparitycheckingisdone!
voidswap(intx1,inty1,intx2,inty2)
{
Piecet=grid[x1][y1];
setGrid(grid[x2][y2],x1,y1);
setGrid(t,x2,y2);
}
booleanisSolved(){
for(inti=0;i for(intj=0;j if(! grid[j][i].isHome()){ returnfalse; } } } returntrue; } //returnarandomintegerintherange[0..n) intrandRange(intn){ intr=rand.nextInt()%n; if(r<0) r+=n; returnr; } //randomizebymakingrandommoves voidrandomize_by_moving(){ intdx,dy,v; for(inti=0;i<100;i++){ dx=dy=0; v=(rand.nextInt()&2)-1;//1or-1 if((rand.nextInt()&1)==0) dx=v; else dy=v; if(blankp.x+dx<0) dx=1; if(blankp.x+dx==gridw) dx=-1; if(blankp.y+dy<0) dy=1; if(blankp.y+dy==gridh) dy=-1; moveBlank(blankp.x+dx,blankp.y+dy); } //nowmovetheblanktiletothelowerrightcorner while(blankp.x! =gridw-1) moveBlank(blankp.x+1,blankp.y); while(blankp.y! =gridh-1) moveBlank(blankp.x,blankp.y+1); } //shufflethetilesrandomlyandplacetheblankatthebottomright voidshuffle(){ intlimit=gridw*gridh-1; Pieceta[]=newPiece[limit]; Piecetemp; System.arraycopy(all,0,ta,0,limit); for(inti=0;i intj=randRange(limit); temp=ta[j]; ta[j]=ta[i]; ta[i]=temp; } for(inti=0;i setGrid(ta[i],i/gridw,i%gridw); } setGrid(blankp,gridw-1,gridh-1); } voidrandomize(booleanhard){ shuffle(); intra,rb; intx,y; if(hard){ ra=7; rb=0; }else{ ra=0; rb=7; } x=rand.nextInt()&1; y=rand.nextInt()&1; if(x==1&&y==1){ x=2; y=0; } swap(x,y,all[ra].x,all[ra].y); swap((rand.nextInt()&1)+1,3,all[rb].x,all[rb].y); if((displacement()&1)==1) swap(1,3,2,3); } //Computeandreturnthedisplacement,thatis,thenumberof //pairsoftilesthatareoutoforder.Theblanktile*must* //beinthelowerrightcorner. intdisplacement(){ booleantemp[]=newboolean[gridw*gridh-1];//allfalse intn=0; for(inti=0;i for(intj=0;j Piecep=grid[j][i]; if(p==blankp) continue; temp[p.serial]=true; for(intk=0;k if(! temp[k]) n++; } } } returnn; } voidresetGrid(){ Piecetemp[]=newPiece[gridw*gridh]; intk=0; for(inti=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机 游戏 应用 程式 设计