游戏精灵走动碰撞j2me游戏编程Word格式.docx
- 文档编号:21326254
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:17
- 大小:340.09KB
游戏精灵走动碰撞j2me游戏编程Word格式.docx
《游戏精灵走动碰撞j2me游戏编程Word格式.docx》由会员分享,可在线阅读,更多相关《游戏精灵走动碰撞j2me游戏编程Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
以个人为单位,采取任务引导+课内实训,主要以课内训练为主。
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(){
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,
{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,13,0,0,
{0,0,0,0,0,1,2,0,0,0,0,0,0,18,0,0,
{0,0,0,0,0,6,7,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,8,9,10,0,0,0,0,0,33,34,0,0,0,
{0,0,0,0,0,0,0,0,0,0,0,35,36,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
10;
{
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.nextFrame();
//下一帧
break;
caseGameCanvas.LEFT_PRESSED:
if(flagLeft){
sPlayer.setFrameSequence(left);
flagLeft=false;
flagRight=true;
if(sPlayer.getX()>
320-176/2){
if(sPlayer.collidesWith(tlH,true))
sPlayer.move(5,0);
viewX-=5;
//地图动
if(viewX<
0)
{viewX=0;
}
sPlayer.move(-5,0);
if(sPlayer.getX()<
0){//人不能走出地图右边界,到右边界,停止向右
sPlayer.setPosition(0,sPlayer.getY());
sPlayer.move(5,0);
caseGameCanvas.DOWN_PRESSED:
if(flagDown){
sPlayer.setFrameSequence(down);
flagDown=false;
if(sPlayer.getY()<
208/2)//一开始,人动,地图不动;
{sPlayer.move(0,5);
sPlayer.move(0,-5);
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());
caseGameCanvas.UP_PRESSED:
if(flagUp){
sPlayer.setFrameSequence(up);
flagUp=false;
if(sPlayer.getY()>
288-208/2){
if(sPl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 精灵 走动 碰撞 j2me 编程