java me 策划书Word格式.docx
- 文档编号:18857552
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:29
- 大小:567.66KB
java me 策划书Word格式.docx
《java me 策划书Word格式.docx》由会员分享,可在线阅读,更多相关《java me 策划书Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
2.4业务流程图
3.系统功能模块
3.1模块之间的关系
3.2模块枝干图
简要说明:
图形驱动即完成初始化图形系统功能;
开始画面模块的主要作用是根据设置绘制出玩游戏区域四周的墙壁;
玩游戏的过程是游戏此游戏程序的核心,又可细分为好多小的功能模块;
其中,显示食物模块仅完成显示食物功能;
蛇前移模块即通过递归算法实现蛇的向某方向移动;
判蛇死模块的功能是通过判断蛇是否碰到自己或墙壁来判断蛇有没有死亡。
吃到食物后小模块只有蛇吃到食物后才起作用。
即当蛇吃到食物后,蛇自身延长一节并绘出蛇,同时加10分。
通过键盘操控来玩游戏主要由判反向移动模块完成,即当蛇不是反向移动时,按照键盘上方向键指示移动。
游戏结束模块功能简单,仅完成输出得分与提示语功能。
最后图形结束模块完成关闭图形功能。
4.任务分工
成员
分工
组长评分
刘利霞
后期调试、代码整合
肖莎
数据操作模块
田君
模型设计
刘子豪
软件整体框架设计以及模块划分
骆兵
视图层设计
5.设计详细说明
5.1开发环境及工具
硬件平台:
Intel80X86
操作系统:
WindowsXP专业版32位SP3
集成开发环境:
EclipseME
仿真工具:
SUN公司WTK2.5.2的ColorPhone
数据库:
javax.microedition.rms类库
5.2概要设计
5.2.1软件主要功能设计
程序结构
根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、停止游戏,设置游戏级别(速度),设置图片等。
具体的程序结构如下面的图所示。
程序流程
根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。
贪吃蛇的内容主要包括:
游戏开始,随机出现食物。
5.2.2程序系统的组织结构
每个模块和子程序的名称、标识符:
Ground类:
privateintTYPE;
publicint[][]rocks=newint[Global.WIDTH][Global.HEIGHT];
publicvoidsetGround(inttype){}
根据不同的Type值将rocks的不同下标的元素设为1,其他元素为0。
publicbooleanisSnakeEatRock(Snakesnake){}
判断蛇头的所在的位置在数组rocks中的值是否为1,如果是1,则表示蛇吃到了石头,返回TRUE,否则返回FALSE。
publicPointgetPoint(){}
产生一组随机数(x,y),是食物的坐标
publicvoiddrawMe(Graphicsg){}
将数组rocks中值为1的元素填充为石头颜色。
SnakeMidlet类:
publicstaticintx,y;
privateintoldDirection,newDirection;
用于判断newDirection和oldDirection是否为相反方向,用于选取有效方向。
privatePointoldTail;
用于判断蛇头是否和蛇身的某个节点的坐标重合,即蛇是否吃到自己。
publicLinkedList<
Point>
body=newLinkedList<
();
publicvoiddie(){}
设置变量life=FALSE;
使控制进程的条件为假,进程结束。
publicvoidmove(){}
实现蛇身沿着蛇头的轨迹移动
publicvoidchangeDirection(intdirection){}
根据方向键,改变蛇头的x、y的值,即改变方向
publicvoiddrawMe(Graphicsg){}//把属于蛇的格子画出来
privateclassSnakeDriverimplementsRunnable{}//蛇不停走动
Food类:
根据产生的一组随机坐标,在其坐标处画出食物
Controller类:
功能:
处理按键事件及鼠标点击事件,处理逻辑。
根据不同的情况向Snake,Food,Ground发出不同的命令。
实现接口snakeMoved,蛇每移动一步,就要判断一次,蛇是否吃到石头、是否吃到自己,是的话就snake.die()并停止计时;
不是则不进行任何操作。
如果吃到食物,就要加分、重画食物、蛇身加长。
实现(N)NewGame功能、(E)Exit功能、(R)Resume功能、(L)LowLevel功能、(H)HighLevel功能、(P)Pause功能。
GamePanel类:
画出Snake,Food,Ground,并实现重新显示
5.3程序设计
5.3.1程序描述
目的和意义:
该部分以窗体上的按钮或键盘上的快捷键为用户提供友好的控制手段。
为工作量繁大的用户提供一个简单而有趣的小游戏。
特点说明:
程序交互性好,操作性强。
易操作。
简单而有趣。
功能全面,如:
开始新游戏、暂停、继续、成绩、查看游戏说明、退出游戏。
对于每次不可选的按钮设置为灰显,避免了用户的错误操作。
5.3.2性能
5.3.3输入项
用户的按钮操作,如点击NewGame、Pause、Resume、LowLevel、HighLevel、HighScore、Description、Exit。
或者选择键盘上的方向键和游戏设置的快捷键。
快捷键有:
N(NewGame)、P(Pause)、R(Resume)、L(LowLevel)、H(HighLevel)、S(HighScore)、D(Description)、E(Exit)。
5.3.4输出顶
时间、分数,以及将石头、食物、等级、分数、时间、蛇每个节点的坐标信息。
5.3.5功能
5.3.6算法
蛇、石头、食物的表示方法:
把显示区看做一个大大的表格,里面的格子就是组成蛇的基本单位,一个格子就表示一块石头或代表一个事物。
几个连在一起的格子可以代表一条蛇。
使用坐标来区分这些格子。
蛇的移动方式:
蛇每移动一步,可以看做蛇头增加一个节点,蛇尾删去一个节点。
保存蛇的数据结构:
因为要区分蛇头和蛇尾,这就要求这个数据结构是有序的,还要经常的访问最后一个和第一个节点,所以LinkList最适合。
蛇的移动方向:
根据原来蛇头的坐标和方向计算新蛇头的坐标,
格子的坐标和像素坐标:
由于画蛇、食物、石头我们只是填充一个矩形,或者在相应位置显示一张图片,所以我们要知道每个格子的坐标。
5.3.7流程逻辑
5.3.8接口
SnakeListener:
VoidSankeMoved(Snake);
5.3.9存储分配
该游戏软件运行时,Snake、Food、Ground三个对象一致同时存在,直到戏结束。
其中蛇移动方法长期占用资源,改变方向、吃到食物及石头都是瞬发动作,只是瞬间占用系统资源。
5.3.10注释设计
Snake类中:
Privateboollife=TRUE;
进程的控制条件
5.3.11限制条件
a.每个选项NewGame、Pause、Resume、LowLevel、HighLevel、Exit不能连续点击;
b.每次要点击Exit退出游戏才能保存游戏;
c.所运行机器必须装有JVM。
5.3.12测试计划
对这几个主要功能NewGame、Pause、Resume、LowLevel、HighLevel、Exit逐个进行测试;
由于程序较小,测试时间预计为1小时;
预期的结果:
a.在开始游戏后,按键盘上的方向键蛇会相应的改变方向。
b.吃掉食物后蛇身的长度增加一节,分数增加。
c.蛇碰到石头或碰到自己后游戏结束。
d.选择Pause后,停止计时,蛇停止移动。
e.选择Resume后,蛇在Pause时的地方继续移动,时间继续计时。
如果程序在Pause后,选择了Exit,再次运行程序时,选择Resume,也可以继续上次的游戏。
f.选择LowLevel、HighLevel鹰相应改变石头的布局及蛇移动的时间间隔。
5.4程序测试
菜单界面:
游戏界面:
游戏界面2:
6、关键源代码
(1)SnakeMIDlet
packagehelped;
importjavax.microedition.lcdui.Display;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
publicclassSnakeMIDletextendsMIDlet{
staticSnakeMIDletinstan;
publicDisplaydisplay;
publicGameCtrlgame;
playCanvas2c2=newplayCanvas2();
StartCasstc=newStartCas();
aboutCanvasac=newaboutCanvas();
TCanvastc=newTCanvas();
cuttingcg=newcutting();
ScoringCanvassc=newScoringCanvas();
staticmusicm=null;
menuCanvasmc=newmenuCanvas();
publicSnakeMIDlet(){
//获得Display
display=Display.getDisplay(this);
instan=this;
m=newmusic();
}
protectedvoidstartApp()throwsMIDletStateChangeException{
display.setCurrent(tc);
protectedvoidpauseApp(){
}
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{
}
(2)playCanvas2
importjava.io.IOException;
importjava.util.Random;
importjava.util.Timer;
importjava.util.TimerTask;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Font;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
classplayCanvas2extendsCanvasimplementsRunnable{
Timertimer=newTimer();
intstore=300;
intmax_length=100;
intcurrent_length=1;
Imagefood=null;
Imagesnake[]=newImage[max_length];
intsnake_px[]=newint[max_length];
intsnake_py[]=newint[max_length];
intcurrent_w=this.getWidth();
intcurrent_h=this.getHeight();
intscore=(current_length-1)*100;
intcurrent_dir=4;
finalintup_dir=1,down_dir=2,left_dir=3,right_dir=4;
publicplayCanvas2(){
this.setFullScreenMode(true);
current_w=this.getWidth();
current_h=this.getHeight();
timer.schedule(newRemindTask(),300,5000);
try{
snake[0]=Image.createImage("
/head_img_right.png"
);
snake_px[0]=10;
snake_py[0]=10;
for(inti=1;
i<
max_length;
i++){
snake[i]=Image.createImage("
/body_img.png"
snake_px[i]=10;
snake_py[i]=10;
}
food=Image.createImage("
/food.png"
}catch(IOExceptione){e.printStackTrace();
for(inti=0;
current_length;
snake_px[i]=10-i;
protectedvoidpaint(Graphicsg){
g.setColor(0,55,120);
g.fillRect(0,0,current_w,current_h);
g.drawImage(snake[i],snake_px[i]*10,snake_py[i]*10,20);
g.drawImage(food,food_px*10,food_py*10,20);
g.setColor(0);
Fontfont=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE);
g.setFont(font);
g.drawString("
菜单"
210,300,20);
g.drawString(("
得分:
"
+score),100,300,20);
publicvoidkeyPressed(intkey){
switch(key){
case-1:
if(current_dir!
=down_dir)
current_dir=up_dir;
break;
case-2:
=up_dir)
current_dir=down_dir;
case-3:
=right_dir){
current_dir=left_dir;
case-4:
=left_dir)
current_dir=right_dir;
case-7:
is_go=false;
SnakeMIDlet.instan.display.setCurrent(SnakeMIDlet.instan.mc);
SnakeMIDlet.instan.mc.m=110;
this.repaint();
intfood_px;
intfood_py;
Randomrdm=newRandom();
publicvoidcreate_food(){
food_px=rdm.nextInt(24);
food_py=rdm.nextInt(27);
publicvoidfollow_head(){
for(inti=current_length-1;
i>
0;
i--){
snake_px[i]=snake_px[i-1];
snake_py[i]=snake_py[i-1];
publicvoidup_AI(){
if(snake_py[0]<
food_py){
if(snake_px[0]<
food_px){
if(snake_px[0]>
if(snake_px[0]==food_px){
if(snake_px[0]>
21){
current_dir=left_dir;
}
if(snake_px[0]<
3){
current_dir=right_dir;
else{
}
if(snake_py[0]==food_py){
if(snake_px[0]<
if(snake_py[0]>
publicvoiddown_AI(){
}
}
}
if(snake_px[0]>
publicvoidright_AI(){
if(snake_px[0]<
if(snake_py[0]<
if(snake_py[0]>
}
if(snake_px[0]==food_px){
if(snake_px[0]>
curren
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java me 策划书 策划