欢迎来到天天文库
浏览记录
ID:42818984
大小:66.50 KB
页数:7页
时间:2019-09-23
《java手机游戏实验5》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
实验五射击游戏一、实验目的1.熟悉射击类游戏规则。2.学习游戏过程中的碰撞检测方法。3.学习J2ME的记录管理系统。二、实验环境Eclipse、WTK、Proguard。三、实验内容完成打飞机游戏。游戏规则是:玩家控制一架飞机在夜空飞行,按手机方向键可移动飞机,按中心键可向前方发射导弹,游戏时背景不变,屏幕上会随时出现敌机,并不断开火。玩家的任务是尽可能多的消灭敌机。当玩家飞机中弹时游戏结束,系统提示本次战斗消灭的敌机数量,以及历史消灭敌机的最高记录。四、实验步骤1.用Eclipse创建项目及MIDlet框架2.准备好游戏所用资源图片:3.根据游戏中存在的对象以及对象之间的关系,定义五个类分别管理导弹、飞机、玩家飞机、敌机和爆炸。4.添加一个MainCanvas类。把MainCanas和Midlet框架联系起来。5.思考题 (1)理解游戏流程.(2)本程序存在问题:游戏结束后记录本次得分和历史得分,玩家飞机还可以继续打敌机,分数继续累加。。。(3)修改代码:A)本程序的RMS是否有效?去掉SaveHighScore()和LoadHighScore()观察运行结果有无差异?B)如何修改代码,使得每架玩家飞机可同时发射三枚导弹。怎么修改可以使得每家玩家飞机和敌机均可发射三枚导弹。C)如何修改代码,使得玩家可以游戏三轮,每轮中弹后记录本次得分和历史最高分。重新一轮游戏,分数应该从0开始重新计本轮得分。三轮之后游戏结束,保持游戏画面的静止。如何修改代码实现上述功能?(4)给游戏添加音效。主要类参考代码:BulletSpritepublicclassBulletSpriteextendsSprite{privateintm_nSpeedX=0;privateintm_nSpeedY=0;BulletSprite(Imageimage,intframeWidth,intframeHeight){super(image,frameWidth,frameHeight);defineReferencePixel(frameWidth/2,frameHeight/2);setVisible(false);}publicvoidSetSpeed(intnSpeedX,intnSpeedY){m_nSpeedX=nSpeedX; m_nSpeedY=nSpeedY;}publicvoidLogic(){if(isVisible()==false)return;intnX=getRefPixelX()+m_nSpeedX;intnY=getRefPixelY()+m_nSpeedY;setRefPixelPosition(nX,nY);if(getRefPixelX()<-10||getRefPixelX()>MainCanvas.m_nScrWidth+10||getRefPixelY()<-10||getRefPixelY()>MainCanvas.m_nScrHeight+10)setVisible(false);}ExplosionSpritepublicclassExplosionSpriteextendsSprite{ExplosionSprite(Imageimage,intframeWidth,intframeHeight){super(image,frameWidth,frameHeight);defineReferencePixel(frameWidth/2,frameHeight/2);setVisible(false);}publicvoidLogic(){if(isVisible()==false)return;intnFrame=getFrame();nFrame++;if(nFrame>7){setVisible(false);return;}setFrame(nFrame);} }PlaneSpritepublicclassPlaneSpriteextendsSprite{protectedintm_nSpeedX=0;protectedintm_nSpeedY=0;publicBulletSpritem_Bullet;publicPlaneSprite(Imageimg,intnWidth,intnHeight){super(img,nWidth,nHeight);try{ImageBImg=Image.createImage("/Bullet.png");m_Bullet=newBulletSprite(BImg,5,5);}catch(IOExceptione){}setVisible(false);defineReferencePixel(nWidth/2,nHeight/2);}publicvoidSetSpeed(intnSpeedX,intnSpeedY){m_nSpeedX=nSpeedX;m_nSpeedY=nSpeedY;}publicvoidLogic(){m_Bullet.Logic(); }}MyPlane:importjavax.microedition.lcdui.Image;importjavax.microedition.lcdui.game.GameCanvas;publicclassMyPlaneextendsPlaneSprite{MyPlane(Imageimg,intnWidth,intnHeight){super(img,nWidth,nHeight);m_nSpeedY=2;m_nSpeedX=2;}publicvoidInput(intkeyStates){if(isVisible()==false)return;intnX=getRefPixelX();intnY=getRefPixelY();if((keyStates&GameCanvas.UP_PRESSED)!=0)nY-=m_nSpeedY;if((keyStates&GameCanvas.LEFT_PRESSED)!=0)nX-=m_nSpeedX;if((keyStates&GameCanvas.RIGHT_PRESSED)!=0)nX+=m_nSpeedX;if((keyStates&GameCanvas.DOWN_PRESSED)!=0)nY+=m_nSpeedY;if((keyStates&GameCanvas.FIRE_PRESSED)!=0)CreateBullet();setRefPixelPosition(nX,nY);}publicvoidLogic(){super.Logic();}privatevoidCreateBullet(){if(m_Bullet.isVisible())return;m_Bullet.setRefPixelPosition(getRefPixelX(),getRefPixelY()); m_Bullet.SetSpeed(0,-3);m_Bullet.setVisible(true);}}Enemy:importjava.util.Random;importjavax.microedition.lcdui.Image;publicclassEnemyextendsPlaneSprite{privateRandomm_Random;Enemy(Imageimg,intnWidth,intnHeight){super(img,nWidth,nHeight);m_Random=newRandom();}publicvoidLogic(){super.Logic();if(isVisible()==false)return;intnX=getRefPixelX()+m_nSpeedX;intnY=getRefPixelY()+m_nSpeedY;setRefPixelPosition(nX,nY);if(getRefPixelX()<-10||getRefPixelX()>MainCanvas.m_nScrWidth+10||getRefPixelY()<-10||getRefPixelY()>MainCanvas.m_nScrHeight+10)setVisible(false);CreateBullet();}privatevoidCreateBullet(){if(m_Bullet.isVisible())return;intRS=Math.abs(m_Random.nextInt()%30);if(RS!=0)return;intnSpeedX=m_Random.nextInt()%2;intnSpeedY=Math.abs(m_Random.nextInt()%2)+1;m_Bullet.SetSpeed(nSpeedX,nSpeedY); m_Bullet.setRefPixelPosition(getRefPixelX(),getRefPixelY());m_Bullet.setVisible(true);}}
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处