游戏精灵走动碰撞j2me游戏编程.docx
- 文档编号:8189944
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:17
- 大小:340.09KB
游戏精灵走动碰撞j2me游戏编程.docx
《游戏精灵走动碰撞j2me游戏编程.docx》由会员分享,可在线阅读,更多相关《游戏精灵走动碰撞j2me游戏编程.docx(17页珍藏版)》请在冰豆网上搜索。
游戏精灵走动碰撞j2me游戏编程
实训过程
实施建议
实训过程:
1、编写实训项目,完成以下功能:
(1)根据给定的图片利用地图编辑器编辑一幅地图作为TiledLayer,要求18行、20列,并产生相应的二维数组。
(2)让游戏精灵在上题产生的TiledLayer里自由的上下左右移动,但不能走出TiledLayer,并且该游戏精灵上下左右移动具有对应的走姿。
(3)游戏精灵碰到障碍物则停止移动;游戏精灵碰到花,花消失。
2、实训成果展示:
(1)程序源代码
(2)运行结果
实施建议:
1、综合实训环境
(1)硬件环境
嵌入式实训室(45台电脑)。
(2)软件环境
JDK1.6;Eclipse3.4.1;WTK;EclipseME
2、单元实训安排
(1)实训学时
4学时
(2)实训方式
以个人为单位,采取任务引导+课内实训,主要以课内训练为主。
3、考核方式
本次单元实训要求每位同学提供程序源代码和运行结果,参考在此单元实训过程中的表现评分。
学习评价
(1)程序源代码
importjava.io.IOException;
importjava.util.Random;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
importjavax.microedition.lcdui.game.GameCanvas;
importjavax.microedition.lcdui.game.LayerManager;
importjavax.microedition.lcdui.game.Sprite;
importjavax.microedition.lcdui.game.TiledLayer;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
publicclassMIDlet13extendsMIDlet{
publicMIDlet13(){
//TODOAuto-generatedconstructorstub
}
privateDisplaydis;
privateMyGameCanvasmgc;
protectedvoidstartApp()throwsMIDletStateChangeException{
dis=Display.getDisplay(this);
mgc=newMyGameCanvas();
dis.setCurrent(mgc);
}
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{
//TODOAuto-generatedmethodstub
}
protectedvoidpauseApp(){
//TODOAuto-generatedmethodstub
}
classMyGameCanvasextendsGameCanvasimplementsRunnable{
privateGraphicsg;
privateImageimgMap,imgWalk;
privatebooleanRUN=true;
privateTiledLayertlMap;
privateTiledLayertlH;
privateint[][]temp;
privateint[][]temp1;
privateint[]f1={21};
privateLayerManagerlm;//定义一个图层管理器
privateSpritef[]=newSprite[10];
privateSpritesPlayer;
privateintviewX,viewY;//用来表示地图的可视窗口的开始位置
privateintright[]={3,4,5};//人向右的帧序列
privateintleft[]={9,10,11};
privateintup[]={0,1,2};
privateintdown[]={6,7,8};
privatebooleanflagRight=true;
privatebooleanflagLeft=true;
privatebooleanflagUp=true;
privatebooleanflagDown=true;
privateRandomr=newRandom();
MyGameCanvas(){
super(true);
g=this.getGraphics();
try{
imgMap=Image.createImage("/item01.png");
imgWalk=Image.createImage("/walk.png");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
tlMap=newTiledLayer(20,18,imgMap,16,16);
tlH=newTiledLayer(20,18,imgMap,16,16);
temp=newint[][]{
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,
16,17,16,17},
{11,12,11,12,11,12,11,12,11,12,11,12,11,12,11,12,
11,12,11,12},
{16,17,16,17,16,17,16,31,32,17,16,17,16,17,16,17,
16,17,16,17}
};
temp1=newint[][]{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,
0,0,0,0},
{0,0,0,0,0,1,2,0,0,0,0,0,0,18,0,0,
0,0,0,0},
{0,0,0,0,0,6,7,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,3,4,5,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,8,9,10,0,0,0,0,0,33,34,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,35,36,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0}
};
for(inti=0;i<18;i++)
for(intj=0;j<20;j++){
tlMap.setCell(j,i,temp[i][j]);
tlH.setCell(j,i,temp1[i][j]);
}
sPlayer=newSprite(imgWalk,imgWalk.getWidth()/12,imgWalk.getHeight());//运动角色实例化,开始指向的是第0帧
lm=newLayerManager();//实例化图层管理器
//先追加的图层在上,后追加的图层在下
lm.append(sPlayer);//往图层管理器里追加运动角色sPlayer
for(inti=0;i<10;i++)
{
f[i]=newSprite(imgMap,16,16);;
f[i].setFrameSequence(f1);
if(!
f[i].collidesWith(tlH,true))
{f[i].setPosition(r.nextInt(320),r.nextInt(288));
lm.append(f[i]);
}}
lm.append(tlH);
lm.append(tlMap);//往图层管理器里追加图层tlMap
newThread(this).start();
}
//向右走:
//一开始,人动,地图不动;
//当人走到屏幕的中间,人动,地图也动;
//当地图剩下最后176宽度时,地图不动,人动;
//人不能走出地图右边界
publicvoidrun(){
while(RUN){
input();//用来捕捉按键
g.setColor(255,255,255);
g.fillRect(100,100,120,20);
lm.setViewWindow(viewX,viewY,176,208);
lm.paint(g,0,0);//画笔g画图层管理器lm里的图层在位置(100,100)上
this.flushGraphics();
try{
Thread.sleep(100);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
publicvoidinput(){//用来捕捉按键
intkeyState=this.getKeyStates();
switch(keyState){
caseGameCanvas.RIGHT_PRESSED:
if(flagRight){
sPlayer.setFrameSequence(right);//指定人向右走的帧序列
flagRight=false;
flagLeft=true;
flagUp=true;
flagDown=true;
}
if(sPlayer.getX()<176/2)//一开始,人动,地图不动;
{sPlayer.move(5,0);//运动角色往右走5个像素
if(sPlayer.collidesWith(tlH,true))
sPlayer.move(-5,0);
}
else{//人动,地图也动,但是人与地图不能无限移动
viewX+=5;//地图动
if(viewX>320-176){//当地图剩下最后176宽度时,地图不动
viewX=320-176;
}
sPlayer.move(5,0);//人动
if(sPlayer.getX()>320-sPlayer.getWidth()){//人不能走出地图右边界,到右边界,停止向右
sPlayer.setPosition(320-sPlayer.getWidth(),sPlayer.getY());
}
elseif(sPlayer.collidesWith(tlH,true))
sPlayer.move(-5,0);
}
sPlayer.nextFrame();//下一帧
break;
caseGameCanvas.LEFT_PRESSED:
if(flagLeft){
sPlayer.setFrameSequence(left);//指定人向右走的帧序列
flagLeft=false;
flagRight=true;
flagUp=true;
flagDown=true;
}
if(sPlayer.getX()>320-176/2){
sPlayer.move(-5,0);
if(sPlayer.collidesWith(tlH,true))
sPlayer.move(5,0);
}
else{//人动,地图也动,但是人与地图不能无限移动
viewX-=5;//地图动
if(viewX<0)
{viewX=0;}
sPlayer.move(-5,0);//人动
if(sPlayer.getX()<0){//人不能走出地图右边界,到右边界,停止向右
sPlayer.setPosition(0,sPlayer.getY());
}
elseif(sPlayer.collidesWith(tlH,true))
sPlayer.move(5,0);
}
sPlayer.nextFrame();//下一帧
break;
caseGameCanvas.DOWN_PRESSED:
if(flagDown){
sPlayer.setFrameSequence(down);//指定人向右走的帧序列
flagDown=false;
flagRight=true;
flagLeft=true;
flagUp=true;
}
if(sPlayer.getY()<208/2)//一开始,人动,地图不动;
{sPlayer.move(0,5);//运动角色往右走5个像素
if(sPlayer.collidesWith(tlH,true))
sPlayer.move(0,-5);
}
else{//人动,地图也动,但是人与地图不能无限移动
viewY+=5;//地图动
if(viewY>288-208){//当地图剩下最后176宽度时,地图不动
viewY=288-208;
}
sPlayer.move(0,5);//人动
if(sPlayer.getY()>288-sPlayer.getHeight()){//人不能走出地图右边界,到右边界,停止向右
sPlayer.setPosition(sPlayer.getX(),288-sPlayer.getHeight());
}
elseif(sPlayer.collidesWith(tlH,true))
sPlayer.move(0,-5);
}
sPlayer.nextFrame();//下一帧
break;
caseGameCanvas.UP_PRESSED:
if(flagUp){
sPlayer.setFrameSequence(up);//指定人向右走的帧序列
flagUp=false;
flagRight=true;
flagLeft=true;
flagDown=true;
}
if(sPlayer.getY()>288-208/2){
sPlayer.move(0,-5);
if(sPl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 精灵 走动 碰撞 j2me 编程