课程设计--手机黄金矿工游戏.doc_第1页
课程设计--手机黄金矿工游戏.doc_第2页
课程设计--手机黄金矿工游戏.doc_第3页
课程设计--手机黄金矿工游戏.doc_第4页
课程设计--手机黄金矿工游戏.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVAME程序设计课程设计说明书题 目: 手机黄金矿工游戏学 院:计算机与信息工程学院专 业:计算机科学与技术班 级:网络10-1班姓 名:田明昊学 号:107起止时间: 2013-6-242013-7-5 成绩: 课程设计成绩评定表质量评价指标评 价 项 目具 体 要 求满 分得 分学习态度学习认真,态度端正,遵守纪律,出勤情况良好,能够独立完成设计工作。20工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。20设计说明书质量设计方案正确、表达清楚;设计思路、方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。30答辩陈述和回答问题陈述简明扼要,思路清晰,清楚流利,回答问题准确,基本概念清楚,有理有据,有一定深度。30评定成绩优秀 良好 中等 及格 不及格评定人员签名2013年 7 月 5 日3课程设计任务书一、设计题目:手机黄金矿工游戏二、设计内容:黄金矿工是一款备受玩家喜爱的经典游戏。本设计针对黄金矿工实现了新游戏,恭喜过关、游戏失败、暂停游戏、继续游戏或重新开始等过程。可以清楚的演示各个画面的切换和一些游戏开发的类库。三、设计要求:1、开始显示欢迎界面,然后是游戏界面,主界面显示各种键的功能以及菜单-开始游戏和离开游戏。2、开始玩游戏,如果赢了可进入下一关或重新开始。采用子菜单的重新开始来实现以上功能。3、游戏期间可以暂停游戏。子菜单选项的暂停/继续游戏、离开游戏实现以上功能。四、工作计划:时间完成内容提交文档备注第1天查找资料,确定题目,选择方案课程设计说明书设计准备阶段第2天第3天设计建模设计阶段第4天第5天详细设计与实现编码测试阶段第6天第7天第8天整理材料,撰写设计说明书收尾阶段第9天第10天课程设计答辩课程设计说明书、设计源代码课程设计答辩、考核,评定成绩指导教师: 王艳涛 陈伟 教研室主任: 高殿武 2013 年6 月 25 日I 本科课程设计说明书 II 目 录1、程序的算法及说明21.1、程序算法21.2、程序的使用方法22、程序的项目结构及说明53、程序运行与发布63.1欢迎界面63.2主界面63.3 游戏界面74、总结85、参考文献9附录:程序源代码101、 程序的算法及说明1.1、程序算法游戏规则:黄金矿工游戏的目的是用最少的时间尽量钩到所有的金块与石头块。在游戏中,游戏角色不能移动。游戏开始即倒计时50秒。操作者通过钩子左右摇摆来选择方向发出钩子。一次只能钩到一个物品,当钩到金块或石头块时,其形状越大,钩上来的时间越慢。每次成功钩到后系统会记相应的钱数。注意游戏时间结束会判定所得钱数与游戏要求钱数比较,如高于目标钱数则继续下一关。否则游戏失败,此时建议重新玩一次。如果成功达到要求钱数,屏幕会出现提示,此时可进入下一关继续游戏。本游戏共20关,每关的难易程度不同,越往后目标钱数越高,选择合适方向钩选大块金块的机会越难。考验玩家准确的判断力与果断性。1.2、程序的使用方法1开始显示欢迎界面,欢迎界面显示了游戏制作者的主要信息,然后3秒后自动跳转到游戏主界面。2. 主界面中显示各种键的功能以及菜单-开始游戏和离开游戏。游戏中钩子自动左右摇摆。按钩子射出。3游戏期间,右键菜单可以选定暂停游戏,暂停后可选继续游戏。4游戏中,右键菜单可以选择重新开始游戏和离开游戏。程序流程图如下:开始读取按键信息输出关卡判断钩到钱数是否超过目标钱数判断用户是否按键过关结束是否是否图 1 程序流程图2、程序的项目结构及说明本程序的项目结构如图2所示图2 手机游戏推箱子目结构图本程序的JAVA源文件说明如下:本程序共Stone.java, Hook.java, Gold.java, Gain.java, FlashScreen.java, GameTimer.java, Target.java,GameCanvas.java,GoldMiner .java。9个JAVA源文件:Stone:石头类,定义石头属性和方法。Hook:矿钩类。定义矿钩属性和方法。Gold:金块类。定义金块属性和方法。Gain:金钱类。FlashScreen:闪屏类,自我介绍界面。GameTimer:时间类。控制时间。Target:目标基类。GameCanvas:画布。GoldMiner:入口类,该文件的父类是MIDlet。3、程序运行与发布3.1欢迎界面欢迎界面显示了程序第一个屏幕,欢迎界面如图3所示。 图3 欢迎界面3.2主界面进入主程序界面后可根据界面中的提示选择新游戏或选关,主界面如图4所示。图4 程序主界面3.3 游戏界面开始玩游戏,如果赢了可进入下一关或重来。采用子菜单选项确定和取消来实现以上功能。 图5 开始游戏界面 图6失败出现的界面 图7通关游戏界面 图8所有关卡通关界面 4、总结在本次课程设计过程中,为努力做到最好,本人做了很多工作。设计前从各方面考虑选定了手机游戏黄金矿工,选定题目后,通过网上搜索等途径寻找了一些资料方便设计。尽管如此,在设计时还是遇到很多问题。起初很慌乱,但是在老师同学的帮助下,得到了解决。随后便逐渐的适应了这一过程,也慢慢摸索到了一些解决方法和途径。很辛苦,但是当程序能够顺利运行后非常开心。黄金矿工游戏有不足之处:只有过关才能选择继续或重玩,输了就不能重玩。这是本次设计的遗憾之处,但是通过本次设计,本人对JAVAME有了更深层次的理解和认识。对其中的很多类库以及很多方法都更为了解与掌握。总之收益良多,这次设计为本人以后更深入的学习JAVA奠定了基础,也提高了自身动手实践能力。5、参考文献1 崔尚志. Mobile手机应用开发.机械工业出版社.1989:60-982 张强,陆文华. J2ME手机开发入门.1993,29(6):263-2683 王梦瑶. Windows Mobile平台应用与开发.清华大学出版社.1992:8-13 17 附录:程序源代码GoldMiner.java页面代码:import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class GoldMiner extends MIDlet private GameCanvas gamecanvas; private Display display=null; private FlashScreen flashscreen; /声明闪屏画面对象 public GoldMiner() public void startApp() display=Display.getDisplay(this); flashscreen=new FlashScreen(this); /创建闪屏 display.setCurrent(flashscreen); public void loadFlashScreen() /设置闪屏画面为当前显示画面 public void FlashScreen() if (gamecanvas = null) gamecanvas = new GameCanvas(this); Display.getDisplay(this).setCurrent(gamecanvas); gamecanvas.doStartApp(); public void pauseApp() gamecanvas.doPauseApp(); protected void destroyApp(boolean unconditional) throws MIDletStateChangeException public void doExit() try destroyApp(false); notifyDestroyed(); catch(MIDletStateChangeException e) GameCanvas.java页面部分代码: import java.util.Timer;import javax.microedition.lcdui.*;import java.io.IOException;import java.util.Random;import javax.microedition.lcdui.game.Sprite;public class GameCanvas extends Canvas implements Runnable, CommandListener private static final int TIMEPERSTAGE = 50; private static final int GOLDNUM = 10; private static final int STONENUM = 4; private static final int GAMEOVER = 0; private static final int STARTING = 1; private static final int CIRCUMGYRATEING = 2; private static final int STRETCHING = 3; private static final int BACKING = 4; private static final int CATCHING = 5; private static final int STAGEPASSING = 6; private static final int ALLSTATESPASSED = 7; private boolean isPaused; /* Start指令变量 */ private Command startCmd = new Command(开始游戏, Command.SCREEN, 1); /* Exit指令变量 */ private Command exitCmd = new Command(离开游戏, Command.SCREEN, 5); /* Pause指令变量 */ private Command pauseCmd = new Command(暂停游戏, Command.SCREEN, 1); /* Resume指令变量 */ private Command resumeCmd = new Command(继续游戏, Command.SCREEN, 1); /* Quit指令变量 */ private Command quitCmd = new Command(重新开始, Command.SCREEN, 4); private GoldMiner goldminer; private Gold gold = new GoldGOLDNUM; private Stone stone = new StoneSTONENUM; private int ScreenWidth; private int ScreenHeight; private Random randomTool = new Random(); private Hook hook = new Hook(); private int hookCirState; private int Stage; private Image BackGround; private Gain gain; private int AmountofMoney; private int StageNum; private int MinMoney = 650, 1500, 2500, 3700, 5000, 6500, 8000, 10000 ; private int LeftTime; private int MoneyToAdd; private Timer timer = null; public void doStartApp() /repaint(); Thread t = new Thread(this); t.start(); public GameCanvas( GoldMiner goldminer ) this.goldminer = goldminer; ScreenWidth = getWidth(); ScreenHeight = getHeight(); Stage = STARTING; gain = new Gain(); try BackGround = Image.createImage(/BG.png); catch(IOException ioe) System.out.println(Cant load file Background.png); private void Initialize() hookCirState = 1; hook.Initialize(); AmountofMoney = 0; isPaused = false; StageNum = 1; LeftTime = TIMEPERSTAGE; MoneyToAdd = 0; IniGold(); IniStone(); setCommandListener(this); Stage = STARTING; addCommand(startCmd); addCommand(exitCmd); private void ChangeStage() StageNum+; IniGold(); IniStone(); Stage = CIRCUMGYRATEING; LeftTime = TIMEPERSTAGE; MoneyToAdd = 0; hook.Initialize(); private void IniGold() int tempint = 1; for( int i = 0; i GOLDNUM; i+ ) if ( i 2 ) goldi = new Gold( 5+randomTool.nextInt(ScreenWidth-10), randomTool.nextInt(ScreenHeight/2-40)+50, tempint ); else tempint = randomTool.nextInt(4)+1; goldi = new Gold(randomTool.nextInt(ScreenWidth-30)+15, randomTool.nextInt(ScreenHeight/2)+ScreenHeight/3+30, tempint ); private void IniStone() for( int i = 0; i STONENUM; i+ ) stonei = new Stone(50+randomTool.nextInt(ScreenWidth-100), randomTool.nextInt(ScreenHeight/2-40)+70, randomTool.nextInt(2)+1); public void doPauseApp() public void paint(Graphics g) switch(Stage) case STARTING: Initialize(); try g.drawImage( Image.createImage(/Start.png), ScreenWidth/2, ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER ); catch(IOException ioe) break; case CIRCUMGYRATEING : paintBackGround(g); hook.getHookSprite().paint(g); break; case STRETCHING: paintBackGround(g); g.setColor(0x00000000); g.drawLine(hook.INIX, hook.INIY, hook.getX(), hook.getY(); hook.getHookSprite().paint(g); break; case BACKING : paintBackGround(g); g.setColor(0x00000000); g.drawLine(hook.INIX, hook.INIY, hook.getX(), hook.getY(); hook.getHookSprite().paint(g); break; case CATCHING : paintBackGround(g); g.setColor(0x00000000); g.drawLine(hook.INIX, hook.INIY, hook.getX(), hook.getY(); gain.getGainSprite().setRefPixelPosition(hook.getX(), hook.getY(); gain.getGainSprite().paint(g); break; case STAGEPASSING : try g.drawImage( Image.createImage(/GP.png), ScreenWidth/2, ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER ); g.setColor(254, 255, 0); g.drawString(String.valueOf(MinMoneyStageNum), 150, 167, Graphics.TOP|Graphics.LEFT); catch(IOException ioe) System.out.println(Cant load GP.png file.); break; case GAMEOVER : try g.drawImage( Image.createImage(/GameOver.png), ScreenWidth/2, ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER ); catch(IOException ioe) System.out.println(Cant load GameOver.png file.); break; case ALLSTATESPASSED : try g.drawImage( Image.createImage(/CM.png), ScreenWidth/2, ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER ); catch(IOException ioe) System.out.println(Cant load GameOver.png file.); break; Hook.java页面代码:import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import java.io.IOException;import javax.microedition.lcdui.game.Sprite;public class Hook public static final int SPEED = 5; public static final int INIX = 120; public static final int INIY = 37; private static final double TRIANGLE = 0.9848, 0.9397, 0.8660, 0.7660, 0.6427, 0.5, 0.3420, 0.1736 ; private int nowSpeed; private Image Source; private double X, Y; private int currentImage; private Sprite HookSprite; public Hook() try Source = Image.createImage(/GoldHook.png); HookSprite = new Sprite(Source, 30, 30); HookSprite.defineReferencePixel(17, 8); Initialize(); catch(IOException ioe) System.out.println(GoldHook cant be loaded.); public void Initialize() getHookSprite().setVisible(true); getHookSprite().setFrame(0); getHookSprite().setTransform(Sprite.TRANS_NONE); nowSpeed = SPEED; X = INIX; Y = INIY; currentImage = 0; HookSprite.setRefPixelPosition(int)X,(int)Y); public int getnowSpeed() return nowSpeed; public int getX() return (int)X; public int getY() return (int)Y; public void setXY(int x, int y) X = x; Y = y; public void setnowSpeed(int nowspeed) nowSpeed = nowspeed; public void setCurrentImage( int currentimage ) currentImage = currentimage; public Image getSource() return Source; public Sprite getHookSprite() return HookSprite; public void extReSetXY( boolean isLeft ) if ( HookSprite.getFrame() = 8 ) Y = Y+nowSpeed; else if ( isLeft = true ) X = X-nowSpeed*TRIANGLEHookSprite.getFrame(); Y = Y+nowSpeed*TRIANGLETRIANGLE.length-HookSprite.getFrame()-1; else X

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论