Java大作业报告

  • 格式:doc
  • 大小:615.00 KB
  • 文档页数:18

Java大作业报告课程名称:Java2面向对象程序设计设计题目:淘金者的游戏一、实验目的1、加深对Java相关语法以及程序编写的认识与理解。

2、更好地熟悉JDK和J2ME。

3、初步建立自我开发Java程序的意识和概念,增强进一步学习Java的兴趣。

二、摘要说明对于初学者而言,这是一个比较大的程序,极具挑战性。

它是由八个子程序(Ghost/GhostCanvas/GhostMIDlet/Man/Monster/Prop/svPoint/TollGate)和一个图片文件(res)组成。

由于临近期末,时间紧张,所以我只挑选了其中的一个主程序的主要部分来研究。

因为我想Java程序的学习重在精,不在多。

这一点还请老师见谅。

这是一个“淘金者”的游戏。

原先我从网上下载来的是一个“抓鬼”游戏。

我觉得这个主题太恐怖,所以就想给它换个主题。

最后,我通过一些方法把游戏界面换成了“淘金”。

三、主程序主要代码的分步详述1)游戏状态的设置int status=0; //主菜单被选中项 0-百宝箱显示 1-主菜单 2-游戏中 3-重新开始 4-分数排行 5-游戏帮助 6-退出游戏int g_status=0; //游戏状态int p_status=0; //子状态int s_status=0; //子状态下的状态int sta=0;//下一个状态int g_sta=0;int p_sta=0;int i_status=0;//装载状态public static boolean playPause=false;// boolean是关键字,其缺省值是false2)主面布相关boolean conti; //游戏运行标志Random random=new Random();//产生随机数public static svPoint svp=null;//svPoint是另一个class的名称,用于控制得分的记录与保存boolean keyPre=false;//是否有键按下3)游戏相关//--------------------主菜单-------------------------public Image menuImg=null;public String[]menuSelPng={"/res/m0.png","/res/m1.png","/res/m2.png","/res/m3.png","/res/m4.png"};public Image[] menuSelImg=new Image[5];//m0,m1,m2,m3,m4,这五张图片分别是“游戏开始”“重新游戏”“分数排行”“游戏帮助”“退出游戏”//--------------------游戏中-------------------------public Image panelImg=null;static boolean g_pause=false; //游戏暂停标志public static Man man=null; //Man是另一个class的名称,用于控制小人的走路、中招、淘到金子等状态public static Vector mons=null;//Monster是另一个class的名称,用于控制牛头、马面、夜叉、僵尸这四种怪物的移动方向以及范围public static Prop prop=null; //Prop是另一个class的名称,用于控制游戏中溜冰鞋、面罩、蜡烛、蔓藤、鼠夹、鬼火这些道具的出现时间与位置public Image gameOverImg=null;public static int gateTime=1000;//本关关卡时间public String[]gateNumPng={"/res/n0.png","/res/n1.png","/res/n2.png","/res/n3.png","/res/n4.png","/ res/n5.png","/res/n6.png","/res/n7.png","/res/n8.png","/res/n9.png"};public Image[] gateNumImg=new Image[10];//这10张图片分别是0-9的数字,用来表示所闯的关数public Image gateImg=null;int t_gate=0;int t_point=0;int showWinTime=0;Image winImg=null;Image congImg=null;//--------------------帮助文字-----------------------String[] helpMe=null;//===================================================int i,j;GhostCanvas() {super(false);setFullScreenMode(true);//设置全屏模式init();start();}public void start() {Thread t=new Thread(this);//多线程t.start();}public static int rate=200;//每帧播放时间为1/10秒public static long startTime=0;//记录开始游戏经过的时间4)根据当前状态时的按键调整游戏状态(用了多个switch语句,嵌套)private void control() {int keystate=getKeyStates();switch(status) {//主菜单被选中项 0-百宝箱显示 1-主菜单 2-游戏中 3-重新开始 4-分数排行 5-游戏帮助 6-退出游戏case 0://百宝动画status=1;g_status=0;break;case 1://主菜单switch(g_status){ //游戏状态case 0:menuInit();//菜单初始化g_status=1;p_status=0; //子状态break;case 1://菜单选择界面if (v_GameCode==Canvas.UP && keyPre){// 游戏操作Canvas类的up属性p_status--;//子状态if (p_status<0){p_status=4;}} else if (v_GameCode==Canvas.DOWN && keyPre){p_status++;if (p_status>4){p_status=0;}}if (v_GameCode==Canvas.FIRE && keyPre){unMenu();switch(p_status){case 0://开始游戏status=2;g_status=0;case 1://重新开始status=3;break;case 2://分数排行status=4;g_status=0;break;case 3://游戏帮助status=5;g_status=0;break;case 4://退出游戏exit();status=-1;break;}}break;}break;case 2: //游戏画面switch(g_status){ //游戏状态case 0://载入游戏gameInit(10);g_status=4;p_status=0;break;case 1://载入本关startGate();g_pause=false;if (i_status>10){g_status=3;i_status=0;}break;case 3://游戏中if(v_keyCode==-7 && keyPre) {endGate();unGame();status=1;g_status=0;p_status=0;} else if(v_keyCode==-6 && keyPre) {} else{int s_status=isEndGate();if (s_status!=0){if (s_status==1){//淘到所有的金子if (t_gate==17){//通关man.point=man.point+(TollGate.curTollGate+1)*1000; //基本分man.point=man.point+GhostCanvas.gateTime/1000*100; //提前完成的分数t_point=Man.point;t_gate=TollGate.curTollGate;g_sta=6;p_sta=0;g_status=-3;p_status=0;} else{//过关man.point=man.point+(TollGate.curTollGate+1)*1000; //基本分man.point=man.point+GhostCanvas.gateTime/1000*100; //提前完成的分数TollGate.curTollGate++;g_sta=4;p_sta=0;endGate();g_status=-3;p_status=0;}} else if(s_status==2 || s_status==3){//时间到或被怪物碰到t_point=Man.point;t_gate=TollGate.curTollGate;g_status=5;p_status=0;}}case -3://胜利switch(p_status){case 0:showWinTime=0;if (winImg==null){winImg=Image.createImage("/res/win.png");//显示胜利的图片 }catch(Exception e){}}p_status=1;break;case 1:showWinTime+=rate;if (showWinTime>1500){p_status=2;}break;case 2:winImg=null;g_status=g_sta;p_status=p_sta;}break;case 4://过关画面操作switch(p_status){case 0://gateImgInit(TollGate.curTollGate+1);p_status=1;break;case 1://if(keyPre){UnGateImg();g_status=1;}break;}break;case 5://GameOverswitch(p_status){case 0:endGate();unGame();if (gameOverImg==null){try{gameOverImg=Image.createImage("/res/gameover.png"); }catch(Exception e){}}p_status=1;case 1:if(keyPre){congImg=null;p_status=2;}break;case 2:if (t_point>Man.MaxPoint){svp.inputing=true;GhostMIDlet.mainMIDlet.disp.setCurrent(svp.frm); }p_status=3;break;case 3:if (!svp.inputing && keyPre){gameOverImg=null;status=1;g_status=0;p_status=0;}break;}break;case 6://通关switch(p_status){case 0://装载通关画面endGate();unGame();if (congImg==null){try{congImg=Image.createImage("/res/cong.png"); }catch(Exception e){}}p_status=1;break;case 1:if (keyPre){p_status=2;}break;case 2:if (t_point>Man.MaxPoint){svp.inputing=true;GhostMIDlet.mainMIDlet.disp.setCurrent(svp.frm); }p_status=3;break;case 3:if (!svp.inputing){status=1;g_status=0;p_status=0;}break;}break;}break;case 3://重新开始svp.readTollGate();TollGate.curTollGate=svp.gate;Man.point=0;gameInit(TollGate.curTollGate);status=2;g_status=4;p_status=0;break;case 4://分数排行switch(g_status){case 0://装载排行榜if (svp.isExistRs("point")){svp.getPointList();}g_status=1;break;case 1://显示排行榜if (keyPre){status=1;g_status=0;}break;}break;case 5://游戏帮助switch(g_status){case 0://装载帮助文字helpMe=new String[]{"1.在游戏规定的关卡中淘到所有的金子"," 就可以获得胜利。