学士学位论文基于j2me的推箱子游戏任务书.docx

上传人:b****6 文档编号:8584233 上传时间:2023-01-31 格式:DOCX 页数:39 大小:311.45KB
下载 相关 举报
学士学位论文基于j2me的推箱子游戏任务书.docx_第1页
第1页 / 共39页
学士学位论文基于j2me的推箱子游戏任务书.docx_第2页
第2页 / 共39页
学士学位论文基于j2me的推箱子游戏任务书.docx_第3页
第3页 / 共39页
学士学位论文基于j2me的推箱子游戏任务书.docx_第4页
第4页 / 共39页
学士学位论文基于j2me的推箱子游戏任务书.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

学士学位论文基于j2me的推箱子游戏任务书.docx

《学士学位论文基于j2me的推箱子游戏任务书.docx》由会员分享,可在线阅读,更多相关《学士学位论文基于j2me的推箱子游戏任务书.docx(39页珍藏版)》请在冰豆网上搜索。

学士学位论文基于j2me的推箱子游戏任务书.docx

学士学位论文基于j2me的推箱子游戏任务书

石家庄科技信息职业学院

 

毕业设计(论文)任务书

专业:

软件开发(游戏方向)

学生姓名:

周志波

学号:

090124010

设计(论文)题目:

基于J2ME的推箱子游戏

起讫日期:

指导教师:

刘永伟

 

任务书下达日期:

年月日

基于J2ME的推箱子游戏

摘要:

手机是人们日常生活中所用的非常频繁的通信工具。

随着JAVA技术的不断更新提高,J2ME技术的出现,使得手机游戏越来越成为我们关注的焦点。

J2ME技术目前最流行的就是在制作手机游戏方面,JAVA手机的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。

J2ME平台被是最杰出的手机游戏手机游戏平台,它一些非常重要的特征对开发者都有很大益处。

因为J2ME应用在不同设备上都是便携式的,他们常常可以在网络上下载和执行。

本设计通过MapList和SpriteThread等类进行推箱子游戏设计,最后编程实现了全过程。

关键词:

J2MEMapListSpriteThread推箱子

 

目录

一、设计过程……………………………………………………………………3

(1)游戏策划…………………………………………………………………3

(2)游戏的准备工作…………………………………………………………3

(3)设计背景………………………………………………………………..6

(4)游戏框架设计……………………………………………………………7

(5)设计细节…………………………………………………………………7

二、欢迎界面设计……………………………………………………………8

(1)PushBoxActivity类框架的搭建…………………………………………8

(2)欢迎界面WelcomeView类的实现………………………………………13

(3)刷帧线程WelcomeViewDrawThread类的实现…………………………16

(4)动画线程WelcomeViewGoThread类的实现……………………………17

三、游戏界面设计……………………………………………………………19

四、游戏界面框架设计………………………………………………………23

(1)GameView框架的实现………………………………………………….24

(2)地图类MapList的实现…………………………………………………29

(3)角色类MySprite的实现………………………………………………..31

(4)onDraw方法的实现……………………………………………………36

五、设计总结…………………………………………………………………38

参考文献…………………………………………………………………………38

正文

一.设计过程

(1)游戏策划

游戏策划主要包括游戏的情节、目标受众、运行的目标平台、采用的呈现技术、操作方式等几个方面。

游戏情节:

本游戏为轻量级的益智游戏,因此不存在很复杂的情节。

这方面朱焘做的就是为设计游戏各管仓库的形状、大小、可通过区域,以及各关中箱子的初始位置和目的地。

目标受众:

本游戏受众方面比较广,应该是老少皆宜的。

运行的目标平台:

本游戏的目标平台为Android2.1。

才有的呈现技术:

本游戏采用2D的呈现技术。

操作方法:

本游戏拟采用手机键盘进行操作,对于没有键盘的型号也可以考虑采用虚拟键盘。

(2)游戏的准备工作

根据游戏的策划来制作和搜集游戏要用到的图片、声音等。

本游戏有道的图片如下

图片清单

图片

大小(KB)

像素(wrh)

用途

3.5

50*63

角色向下走图片

2.8

50*63

角色向左走图片

6.6

48*48

游戏图标

5.92

50*63

正常的箱子

3.35

50*63

角色向上走图片

3.35

50*63

角色向右走图片

9.5

200*80

菜单退出按钮

2.5

85*45

游戏界面的退出

14.3

300*250

恭喜过关图片

9.6

200*80

游戏说明菜单

41.2

300*475

图片的铁门图片

4.4

200*80

声音开按钮

5.1

200*80

菜单开始游戏

33.5

160*450

左半部分墙

45

640*480

游戏背景图片

2.8

50*63

角色向下推箱子

3.5

50*30

角色向左推箱子

3.5

50*63

角色向上推箱子

3.3

50*63

角色向右推箱子

7.8

50*63

绿色的箱子

53.7

160*450

右侧的木门

53.7

160*450

左侧的木门

82.9

278*420

菜单界面按钮背景

18.4

640*480

菜单界面的背景

22.3

480*200

欢迎界面背景

4.4

200*80

声音关按钮

4.7

50*63

游戏中的墙

27.5

160*450

右半部分墙

声音清单

声音文件名

大小(kb)

格式

用途

Sound1

22

Mp3

游戏背景音乐

Sound2

7

Mp3

推箱子的声音

Sound3

215

Mp3

欢迎界面背景音乐

Winsound

8

Mp3

游戏胜利的声音

(3)设计背景

游戏中,首先必须要有个主应用程序类,其次,为了把程序的画面呈现出来,就是要有画布;为了比较容易管理地图、增加或修改地图比较方便,应该把地图和画布分开;然后最主要的是要有个来推箱子的人;当然箱子也是需要管理的。

这其中需要先了解游戏中应用到的类。

欢迎界面类WelcomeView:

主要负责欢迎界面的绘制工作。

欢迎界面的绘制线程类WelcomeViewDrawThread:

负责的工作是定时重绘欢迎界面。

欢迎界面的动画实现类WelcomeViewGoThread:

是通过改变WelcomeView中所用到的图片坐标实现的。

菜单界面类MenuView:

只负责绘制工作

菜单界面的绘制线程类MenuViewDrawThread:

负责的工作是定时重绘菜单界面。

菜单界面的动画实现类MenuViewGoThread:

用来生成菜单界面中背景的滚动效果。

游戏主界面类GameView:

负责绘制游戏过程中所有的信息,如地图、玩家角色、所推的箱子、恭喜过关图片等。

游戏主界面的绘制线程类GameViewDrawThread:

通过对调节线程中的睡眠时间便可调整游戏的FPS的高低,改善用户的体验。

地图信息类MapList:

包含着地图的相关信息,这里的一个地图是用三维函数族中的二维矩阵表示的,关于该类的使用方法将在后面进行介绍。

角色封装类MySprite:

包含了所有与角色有关的信息。

角色移动线程类SpriteMoveThread:

负责角色的无级移动,运用时只需给出起始点和目标点的坐标,同时该类还承担起屏幕的滚动工作。

角色换帧线程类SpriteThread:

负责根据角色的信息时时改变角色的图片。

箱子移动类BoxThread:

负责子昂子的无级移动。

(4)游戏框架设计

游戏基本框架类图:

图一游戏基本框架类图

(5)设计细节

要做的游戏是让一个小人推箱子,操作方法就是通过四个方向键对小人进行上,下,左,右移动。

当箱子移动到指定位置时,游戏就会产生过关事件。

下面是游戏流程图:

 

图二程序流程图

二.欢迎界面设计

(1)PushBoxActivity类框架的搭建

代码如下:

packagewyf.ytl;

importandroid.app.Activity;

importandroid.media.MediaPlayer;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.view.KeyEvent;

importandroid.view.Window;

importandroid.view.WindowManager;

publicclassPushBoxActivityextendsActivity{

WelcomeViewwelcomeView=null;//欢迎界面

WelcomeViewGoThreadwelcomeViewGoThread=null;//欢迎界面中的移动线程

MenuViewmenuView=null;

MenuViewGoThreadmenuViewGoThread=null;//菜单界面中的移动线程

GameViewgameView=null;

booleanisSound=true;//是否播放声音

MediaPlayerpushBoxSound;//推箱子声音

MediaPlayerbackSound;//背景音乐

MediaPlayerwinSound;//胜利的音乐

MediaPlayerstartSound;//开始和菜单时的音乐

intmap1[][];

intmap2[][];//当前游戏的地图

intselectMap=0;//选中的地图

MySpritemySprite;//精灵

KeyThreadkt;//键盘监听线程

intaction=0;//键盘的状态,二进制表示从左往右表示上下左右

HandlermyHandler=newHandler(){//用来更新UI线程中的控件

publicvoidhandleMessage(Messagemsg){

if(msg.what==1){//收到WelcomeViewGoThread/Welcome发来的消息

welcomeViewGoThread.setFlag(false);

if(welcomeView!

=null){

welcomeView=null;

}

initAndToMenuView();

}

elseif(msg.what==2){//收到MenuView发来的消息

if(menuView!

=null){

menuView=null;

}

initAndToGameView();

}

elseif(msg.what==3){

if(gameView!

=null){

gameView=null;

}

initAndToMenuView();

}

elseif(msg.what==4){//收到GameView来的消息,进入下一关

if(selectMap+1

selectMap=selectMap+1;

initAndToGameView();

}

else{

selectMap=0;

initAndToGameView();

}

}

}

};

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

//全屏

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

pushBoxSound=MediaPlayer.create(this,R.raw.sound2);//推箱子的声音

winSound=MediaPlayer.create(this,R.raw.winsound);//胜利的声音

backSound=MediaPlayer.create(this,R.raw.sound1);//背景音乐

backSound.setLooping(true);//设置循环

startSound=MediaPlayer.create(this,R.raw.sound3);

startSound.setLooping(true);

initAndToWelcomeView();

}

publicvoidinitAndToWelcomeView(){

welcomeView=newWelcomeView(this);

if(isSound){

startSound.start();

}

this.setContentView(welcomeView);

welcomeViewGoThread=newWelcomeViewGoThread(this);

welcomeViewGoThread.start();

}

publicvoidinitAndToMenuView(){

menuView=newMenuView(this);

this.setContentView(menuView);

menuViewGoThread=newMenuViewGoThread(this);

menuViewGoThread.start();

}

publicvoidinitAndToGameView(){

map1=newint[MapList.map1[selectMap].length][MapList.map1[selectMap][0].length];

for(inti=0;i

for(intj=0;j

map1[i][j]=MapList.map1[selectMap][i][j];//初始化第一层

}

}

map2=newint[MapList.map2[selectMap].length][MapList.map2[selectMap][0].length];

for(inti=0;i

for(intj=0;j

map2[i][j]=MapList.map2[selectMap][i][j];//初始化第二层

}

}

gameView=newGameView(this);

mySprite=newMySprite(this);

kt=newKeyThread(this);//添加键盘监听

kt.start();

if(isSound){

backSound.start();//播放声音

}

this.setContentView(gameView);

}

publicbooleanonKeyUp(intkeyCode,KeyEventevent){//键盘抬起

if(keyCode==19){//上

action=action&0x37;

}

if(keyCode==20){//下

action=action&0x3B;

}

if(keyCode==21){//左

action=action&0x3D;

}

if(keyCode==22){//右

action=action&0x3E;

}

returnfalse;

}

publicbooleanonKeyDown(intkeyCode,KeyEventevent){//键盘按下监听

if(keyCode==19){//上

action=action|0x08;

}

if(keyCode==20){//下

action=action|0x04;

}

if(keyCode==21){//左

action=action|0x02;

}

if(keyCode==22){//右

action=action|0x01;

}

returnfalse;

}

}

(2)欢迎界面WelcomeView类的实现

代码如下:

packagewyf.ytl;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.view.SurfaceHolder;

importandroid.view.SurfaceView;

importandroid.view.View;

importandroid.view.View.OnClickListener;

publicclassWelcomeViewextendsSurfaceViewimplementsSurfaceHolder.Callback,OnClickListener{

PushBoxActivitypushBoxActivity;

WelcomeViewDrawThreadwelcomeViewDrawThread=null;

Bitmapbitmap;

BitmapwallLeft;//左面的墙

BitmapwallRight;//右面的墙

Bitmapiron;//铁门

BitmapwoodLeft;//左面的木门

BitmapwoodRight;//右面的木门

Bitmapbackground;

Bitmapmountain;//背景的山

intwallLeftX=15;//墙的坐标

intwallLeftY=10;

intwallRightX=150;

intwallRightY=10;

intironX=15;//铁门的坐标

intironY=10;

intwoodLeftX=15;//木门的坐标

intwoodLeftY=10;

intwoodRightX=150;

intwoodRightY=10;

publicWelcomeView(PushBoxActivitypushBoxActivity){//构造器

super(pushBoxActivity);

this.pushBoxActivity=pushBoxActivity;

getHolder().addCallback(this);

welcomeViewDrawThread=newWelcomeViewDrawThread(this,getHolder());

wallRight=BitmapFactory.decodeResource(getResources(),R.drawable.wallright);

wallLeft=BitmapFactory.decodeResource(getResources(),R.drawable.wallleft);

bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.image4);

iron=BitmapFactory.decodeResource(getResources(),R.drawable.image2);

woodLeft=BitmapFactory.decodeResource(getResources(),R.drawable.image33);

woodRight=BitmapFactory.decodeResource(getResources(),R.drawable.image3);

background=BitmapFactory.decodeResource(getResources(),R.drawable.background);//背景的水

mountain=BitmapFactory.decodeResource(getResources(),R.drawable.mountain2);

}

protectedvoidonDraw(Canvascanvas){

canvas.drawColor(Color.WHITE);//背景白色

canvas.drawBitmap(background,0,0,newPaint());//绘制背景

canvas.drawBitmap(mountain,0,0,newPaint());//后面的山图片

canvas.drawBitmap(wallLeft,wallLeftX,wallLeftY,newPaint());//墙的左面

canvas.drawBitmap(wallRight,wallRightX,wallRightY,newPaint());//墙的右面

canvas.drawBitmap(iron,ironX,ironY,newPaint());//铁门

canvas.drawBitmap(woodLeft,woodLeftX,woodLeftY,newPaint());//木头门左面

canvas.drawBitmap(woodRight,woodRightX,woodRightY,newPaint());//木头门右面

canvas.drawBitmap(bitmap,0,0,newPaint());

this.setOnClickListener(this);

}

publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1