课程设计--手机黄金矿工游戏Word文档格式.docx
《课程设计--手机黄金矿工游戏Word文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计--手机黄金矿工游戏Word文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
设计思路、方法科学合理;
达到课程设计任务书规定的要求;
图、表、文字表达准确规范,上交及时。
30
答辩陈述和回答问题
陈述简明扼要,思路清晰,清楚流利,回答问题准确,基本概念清楚有理有据,有一定深度。
, 30
评定成绩
□优秀
□良好
□中等
□及格
□不及格
评定人员签名
2013年7月5日
3
课程设计任务书
一、设计题目:
《手机黄金矿工游戏》
二、设计内容:
黄金矿工是一款备受玩家喜爱的经典游戏。
本设计针对黄金矿工实现了新游戏,恭喜过关、游戏失败、暂停游戏、继续游戏或重新开始等过程。
可以清楚的演示各个画面的切换和一些游戏开发的类库。
三、设计要求:
1、开始显示欢迎界面,然后是游戏界面,主界面显示各种键的功能以及菜单-开始游戏和离开游戏。
2、开始玩游戏,如果赢了可进入下一关或重新开始。
采用子菜单的重新开始来实现以上功能。
3、游戏期间可以暂停游戏。
子菜单选项的暂停/继续游戏、离开游戏实现以上功能。
四、工作计划:
时间
完成内容
提交文档
备注
第1天
查找资料,确定题目,选择方案
课程设计说明书
设计准备阶段
第2天
第3天
设计建模
设计阶段
第4天
第5天
详细设计与实现
编码测试阶段
第6天
第7天
第8天
整理材料,撰写设计说明书
收尾阶段
第9天
第10天
课程设计答辩
课程设计说明书、设计源代码
课程设计答辩、考核,评定成绩
指导教师:
王艳涛 陈伟
教研室主任:
高殿武
2013年6月25日
I
本科课程设计说明书
目 录
1、程序的算法及说明 2
1.1、程序算法 2
1.2、程序的使用方法 2
2、程序的项目结构及说明 5
3、程序运行与发布 6
3.1欢迎界面 6
3.2主界面 6
3.3游戏界面 7
4、总结 8
5、参考文献 9
附录:
程序源代码 10
1、程序的算法及说明
—II—
1.1、程序算法
游戏规则:
黄金矿工游戏的目的是用最少的时间尽量钩到所有的金块与石头块。
在游戏中,游戏角色不能移动。
游戏开始即倒计时50秒。
操作者通过钩子左右摇摆来选择方向发出钩子。
一次只能钩到一个物品,当钩到金块或石头块时,其形状越大,钩上来的时间越慢。
每次成功钩到后系统会记相应的钱数。
注意游戏时间结束会判定所得钱数与游戏要求钱数比较,如高于目标钱数则继续下一关。
否则游戏失败,此时建议重新玩一次。
如果成功达到要求钱数,屏幕会出现提示,此时可进入下一关继续游戏。
本游戏共20关,每关的难易程度不同,越往后目标钱数越高,选择合适方向钩选大块金块的机会越难。
考验玩家准确的判断力与果断性。
1.2、程序的使用方法
1.开始显示欢迎界面,欢迎界面显示了游戏制作者的主要信息,然后3秒后自动跳转到游戏主界面。
2.主界面中显示各种键的功能以及菜单-开始游戏和离开游戏。
游戏中钩子自动左右摇摆。
按↓钩子射出。
3.游戏期间,右键菜单可以选定暂停游戏,暂停后可选继续游戏。
4.游戏中,右键菜单可以选择重新开始游戏和离开游戏。
程序流程图如下:
—2—
开始
否
判断用户是否按键
是
读取按键信息
输出关卡
过关
判断钩到钱数是
否超过目标钱数
结束
图1程序流程图
—3—
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。
—4—
3、程序运行与发布
3.1欢迎界面
欢迎界面显示了程序第一个屏幕,欢迎界面如图3所示。
图3 欢迎界面
3.2主界面
进入主程序界面后可根据界面中的提示选择新游戏或选关,主界面如图4
所示。
—5—
图4 程序主界面
3.3游戏界面
开始玩游戏,如果赢了可进入下一关或重来。
采用子菜单选项确定和取消来实现以上功能。
—6—
图5开始游戏界面 图6失败出现的界面
图7通关游戏界面 图8所有关卡通关界面
—7—
4、总结
在本次课程设计过程中,为努力做到最好,本人做了很多工作。
设计前从各方面考虑选定了手机游戏黄金矿工,选定题目后,通过网上搜索等途径寻找了一些资料方便设计。
尽管如此,在设计时还是遇到很多问题。
起初很慌乱,但是在老师同学的帮助下,得到了解决。
随后便逐渐的适应了这一过程,也慢慢摸索到了一些解决方法和途径。
很辛苦,但是当程序能够顺利运行后非常开心。
黄金矿工游戏有不足之处:
只有过关才能选择继续或重玩,输了就不能重玩。
这是本次设计的遗憾之处,但是通过本次设计,本人对JAVAME有了更深层次的理解和认识。
对其中的很多类库以及很多方法都更为了解与掌握。
总之收益良多,这次设计为本人以后更深入的学习JAVA奠定了基础,也提高了自身动手实践能力。
5、参考文献
[1]崔尚志.Mobile手机应用开发.机械工业出版社.1989:
60-98
[2]张强,陆文华.J2ME手机开发入门.1993,29(6):
263-268
[3]王梦瑶.WindowsMobile平台应用与开发.清华大学出版社.1992:
8-13
—8—
程序源代码
GoldMiner.java页面代码:
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassGoldMinerextendsMIDlet{privateGameCanvasgamecanvas;
privateDisplaydisplay=null;
privateFlashScreenflashscreen;
//声明闪屏画面对象
publicGoldMiner(){
}
publicvoidstartApp(){display=Display.getDisplay(this);
flashscreen=newFlashScreen(this);
//创建闪屏display.setCurrent(flashscreen);
publicvoidloadFlashScreen(){
//设置闪屏画面为当前显示画面
publicvoidFlashScreen(){
if(gamecanvas==null){
gamecanvas=newGameCanvas(this);
Display.getDisplay(this).setCurrent(gamecanvas);
gamecanvas.doStartApp();
publicvoidpauseApp(){gamecanvas.doPauseApp();
protectedvoiddestroyApp(booleanunconditional)
—9—
throwsMIDletStateChangeException{}publicvoiddoExit(){
try{
destroyApp(false);
notifyDestroyed();
}catch(MIDletStateChangeExceptione){}
GameCanvas.java页面部分代码:
importjava.util.Timer;
importjavax.microedition.lcdui.*;
importjava.io.IOException;
importjava.util.Random;
importjavax.microedition.lcdui.game.Sprite;
publicclassGameCanvasextendsCanvasimplementsRunnable,CommandListener{privatestaticfinalintTIMEPERSTAGE=50;
privatestaticfinalintGOLDNUM=10;
privatestaticfinalintSTONENUM=4;
privatestaticfinalintGAMEOVER=0;
privatestaticfinalintSTARTING=1;
privatestaticfinalintCIRCUMGYRATEING=2;
privatestaticfinalintSTRETCHING=3;
privatestaticfinalintBACKING=4;
privatestaticfinalintCATCHING=5;
privatestaticfinalintSTAGEPASSING=6;
privatestaticfinalintALLSTATESPASSED=7;
privatebooleanisPaused;
/**Start指令变量*/
privateCommandstartCmd=newCommand("
开始游戏"
Command.SCREEN,1);
/**Exit指令变量*/
privateCommandexitCmd=newCommand("
离开游戏"
Command.SCREEN,5);
/**Pause指令变量*/
privateCommandpauseCmd=newCommand("
暂停游戏"
/**Resume指令变量*/
privateCommandresumeCmd=newCommand("
继续游戏"
/**Quit指令变量*/
privateCommandquitCmd=newCommand("
重新开始"
Command.SCREEN,4);
—10—
privateGoldMinergoldminer;
privateGold[]gold=newGold[GOLDNUM];
privateStone[]stone=newStone[STONENUM];
privateintScreenWidth;
privateintScreenHeight;
privateRandomrandomTool=newRandom();
privateHookhook=newHook();
privateinthookCirState;
privateintStage;
privateImageBackGround;
privateGaingain;
privateintAmountofMoney;
privateintStageNum;
privateint[]MinMoney={650,1500,2500,3700,5000,6500,8000,10000};
privateintLeftTime;
privateintMoneyToAdd;
privateTimertimer=null;
publicvoiddoStartApp(){
//repaint();
Threadt=newThread(this);
t.start();
} publicGameCanvas(GoldMinergoldminer){this.goldminer=goldminer;
ScreenWidth=getWidth();
ScreenHeight=getHeight();
Stage=STARTING;
gain=newGain();
try{
BackGround=Image.createImage("
/BG.png"
);
}catch(IOExceptionioe){
System.out.println("
Can'
tloadfileBackground.png"
privatevoidInitialize(){hookCirState=1;
hook.Initialize();
AmountofMoney=0;
isPaused=false;
StageNum=1;
LeftTime=TIMEPERSTAGE;
MoneyToAdd=0;
IniGold();
—11—
IniStone();
setCommandListener(this);
addCommand(startCmd);
addCommand(exitCmd);
privatevoidChangeStage(){StageNum++;
Stage=CIRCUMGYRATEING;
LeftTime=TIMEPERSTAGE;
privatevoidIniGold(){inttempint=1;
for(inti=0;
i<
GOLDNUM;
i++){if(i<
2){
gold[i]= newGold(5+randomTool.nextInt(ScreenWidth-10),randomTool.nextInt(ScreenHeight/2-40)+50,tempint);
}else{
tempint=randomTool.nextInt(4)+1;
gold[i]=newGold(randomTool.nextInt(ScreenWidth-30)+15,randomTool.nextInt(ScreenHeight/2)+ScreenHeight/3+30,tempint
privatevoidIniStone(){
STONENUM;
i++){
stone[i]=newStone(50+randomTool.nextInt(ScreenWidth-100),randomTool.nextInt(ScreenHeight/2-40)+70,randomTool.nextInt
(2)+1);
publicvoiddoPauseApp(){
publicvoidpaint(Graphicsg){switch(Stage){
caseSTARTING:
Initialize();
—12—
try{
g.drawImage(Image.createImage("
/Start.png"
),ScreenWidth/2,ScreenHeight/2,Graphics.HCENTER|Graphics.VCENTER);
}catch(IOExceptionioe){}break;
caseCIRCUMGYRATEING:
paintBackGround(g);
hook.getHookSprite().paint(g);
break;
caseSTRETCHING:
g.setColor(0x00000000);
g.drawLine(hook.INIX,hook.INIY,hook.getX(),hook.getY());
break;
caseBACKING:
caseCATCHING:
paintBackGround(g);
gain.getGainSprite().setRefPixelPosition(hook.getX(),hook.getY());
gain.getGainSprite().paint(g);
caseSTAGEPASSING:
/GP.png"
g.setColor(254,255,0);
g.drawString(String.valueOf(MinMoney[StageNum]),150,167,Graphics.TOP|Graphics.LEFT);
}catch(IOExceptionioe){System.out.println("
tloadGP.pngfile."
caseGAMEOVER:
try{
/GameOver.png"
),ScreenWidth/2,
—13—
ScreenHeight/2,Graphics.HCENTER|Graphics.VCENTER);
tloadGameOver.pngfile."
caseALLSTATESPASSED:
/CM.png"
Hook.java页面代码:
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
publicclassHook{
publicstaticfinalintSPEED=5;
publicstaticfinalintINIX=120;
publicstaticfinalintINIY=37;
privatestaticfinaldouble[]TRIANGLE={0.9848,0.9397,0.8660,0.7660,0.6427,0.5,0.3420,0.1736};
privateintnowSpeed;
privateImageSource;
privatedoubleX,Y;
privateintcurrentImage;
privateSpriteHookSprite;
publicHook(){
Source=