您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > JAVA实验报告18-“打地鼠”游戏程序设计
JAVA实验(18)课程名称:Java面向对象程序设计学院:管理学院专业班级:信息管理与信息系统(6)班学号:3108006406姓名:张钟权任课教师:聂小东2010年06月15日管理学院信息管理与信息系统专业08信管6班______组学号3108006406姓名张钟权协作者教师评定_____________实验题目“打地鼠”游戏程序设计一、实验目的与要求(1)实验目的:通过编写调试“打地鼠”游戏程序,分析了解“打地鼠”游戏的功能实现过程,掌握游戏设计的有关知识。(2)实验要求:按照实验教程的要求完成“打地鼠”游戏程序的编写和调试工作。二、实验方案(1)HammerSprite类:①HammerSprite(Imageimage,intframeWidth,intframeHeight)方法:锤子精灵的构造函数,设置精灵贴片图像及精灵的宽度与高度;②moveTo(intx,inty)方法:为游戏操控者控制手机的按键,移动锤子精灵到指定位置。(2)MouseSprite类:①MouseSprite(Imageimage,intframeWidth,intframeHeight)方法:地鼠精灵的构造函数,设置精灵贴片图像及精灵的宽度与长度;②moveTo(ints)方法:根据随机数s,移动地鼠精灵到指定的坐标位置。(3)MainCanvas类:①MainCanvas()方法:对游戏进行初始化,设置游戏的背景图像及背景音乐,并实例化游戏精灵;②gameStart()方法:游戏开始,加载地鼠精灵,让其随机现身。(4)BeatSusliksMIDlet类:执行程序的入口,定义了“开始游戏”和“退出游戏”按钮地方法。三、实验结果和数据处理importjava.io.*;importjava.util.*;importjavax.microedition.lcdui.*;importjavax.microedition.lcdui.game.*;importjavax.microedition.media.*;importjavax.microedition.media.control.*;publicclassMainCanvasextendsGameCanvasimplementsRunnable{privateThreadt;privatebooleansleeping;privateintbegin;privateintframeDeleay;privateImagebkp,hammerImage,startImg,mouseImage,gameOverImg;privateHammerSpritehammerSprite;privateMouseSpritemouseSprite;privateintlevel;privatelongScore;privatePlayermusicPlayer,musicPlayer1;//构造函数,进行一些初始化的设置publicMainCanvas(){super(true);//frameDeleay=33;//begin=0;//得分回零Score=0;try{//游戏背景图像bkp=Image.createImage(/bk.png);//游戏开始封面startImg=Image.createImage(/start.png);//锤子系列图像,构造锤子精灵hammerImage=Image.createImage(/chuizi.png);//地鼠锤子系列图像,构造地鼠精灵mouseImage=Image.createImage(/shu.png);//地鼠贴片的宽和高mouseSprite=newMouseSprite(mouseImage,40,30);//锤子贴片的宽和高hammerSprite=newHammerSprite(hammerImage,40,30);//游戏结束画面gameOverImg=Image.createImage(/gameover.png);}catch(IOExceptione){}try{//定义声音文件的输入流InputStreamis=this.getClass().getResourceAsStream(Music.mid);//建立midi文件媒体播放器musicPlayer=Manager.createPlayer(is,audio/midi);//让播放器对声音流进行预提取musicPlayer.prefetch();//设置声音的播放次数(无限循环)musicPlayer.setLoopCount(-1);//启动播放器musicPlayer.start();}catch(IOExceptionioe){}catch(MediaExceptionme){}}//精灵碰撞检测privatevoidcheckSpritEvent(){if(hammerSprite.collidesWith(mouseSprite,true)){mouseSprite.();//加分Score+=100;}}//手机按键对应锤子精灵的坐标位置:privatevoidupdate(){//获取手机按键的键值intkeySelect=this.getKeyStates();switch(()){caseLEFT_PRESSED://移动锤子精灵到指定的坐标位置hammerSprite.moveTo(42,93);//检测精灵碰撞checkSpritEvent();break;caseRIGHT_PRESSED://移动锤子精灵到指定的坐标位置hammerSprite.moveTo(180,92);//检测精灵碰撞checkSpritEvent();break;caseFIRE_PRESSED://移动锤子精灵到指定的坐标位置hammerSprite.moveTo(110,95);//检测精灵碰撞checkSpritEvent();break;caseUP_PRESSED://移动锤子精灵到指定的坐标位置hammerSprite.moveTo(120,73);//检测精灵碰撞checkSpritEvent();break;caseDOWN_PRESSED://移动锤子精灵到指定的坐标位置hammerSprite.moveTo(100,134);//检测精灵碰撞checkSpritEvent();break;}}//显示游戏封面privatevoiddrawStart(Graphicsg){g.setColor(0,0,0);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,255,255);g.drawImage(startImg,0,0,g.TOP|g.LEFT);//刷新画面flushGraphics();}//显示游戏画面privatevoiddraw(Graphicsg){g.setColor(0,0,0);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,255,255);//显示背景图像g.drawImage(bkp,0,0,g.TOP|g.LEFT);//加载地鼠精灵mouseSprite.paint(g);//加载锤子精灵hammerSprite.paint(g);g.setColor(0,0,0);//记录得分g.drawString(+Score,70,194,g.TOP|g.LEFT);//记录关卡g.drawString(+mouseSprite.getLevel(),220,194,g.TOP|g.LEFT);//刷新画面flushGraphics();}//过关,显示得分和过关数privatevoiddrawLevel(Graphicsg){g.setColor(0,0,0);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,255,255);g.setColor(255,255,255);//在93行27列显示得分情况g.drawString(+Score,27,93,g.TOP|g.LEFT);//在93行106列显示过关数g.drawString(+mouseSprite.getLevel(),106,93,g.TOP|g.LEFT);//在59行30列显示g.drawString(Level:+mouseSprite.getLevel()+Start,30,59,g.TOP|g.LEFT);//刷新画面flushGraphics();}//结束游戏画面privatevoiddrawGameOver(Graphicsg){g.setColor(0,0,0);g.fillRect(0,0,getWidth(),getHeight());//显示游戏结束画面g.drawImage(gameOverImg,0,0,g.TOP|g.LEFT);//刷新画面flushGraphics();}//启动线程publicvoidstart(){sleeping=false;t=newThread(this);t.start();}//运行线程publicvoidrun(){Graphicsg=this.getGraphics();while(!sleeping){//游戏结束if(mouseSprite.isGameOver()){begin=-1;}//游戏进行中if(begin==1){//锤子精灵移动到指定的坐标位置update();//显示画面draw(g);try//暂停{Thread.sleep(frameDeleay);}catch(InterruptedExceptionie){}//如果是进入新关if(mouseSprite.isNewLevel()){//显示新的关数drawLevel(g);mouseSprite.setNewLevel(false);mouseSprite.initBeatMouse();try{Thread.sleep(5000);}catch(InterruptedExceptionie){}}}//游戏开始elseif(begin==0){drawStart(g);try{Thread.sleep(frameDeleay);}catch(InterruptedExceptionie){}}//游戏结束elseif(begin==-1){drawGameOver(g);mouseSprite.stop();try{musicPlayer.stop();}catch(Exceptione){}try{Thread.sleep(500);}catch(InterruptedExceptionie){}}}}//停止音乐publicvoidstop(){sleeping=true;musicPlayer.close();}//设置开始状态标志publicvoidbeginning(intb){begin=b;}//设置开始状态publicintifBegin(){returnbegin;}//游戏开始publicvoidgameStart(){//开始过关数第1关beginning(1);//得分归零Score=0;//初始化地鼠精灵的一些状态设置mouseSprite.initGame();//加载地鼠精灵mouseSprite.start();}}四、结论设计本程序的关键在于实现地鼠精灵的随机出现,几秒钟延时后,便立即消失了,游戏操作者能够控制手机按键移动锤子精灵敲打到地鼠,发生两类精灵碰撞。于是将程序划分为了锤子精灵HammerSprite类、地鼠精灵MouseSprite类、控制游戏操作的MainCanvas类以及程序入口BeatSusliksMIDlet类。五、问题与讨论锤子精灵HammerSprite类由两
本文标题:JAVA实验报告18-“打地鼠”游戏程序设计
链接地址:https://www.777doc.com/doc-5826463 .html