湖北聚四方建设有限公司网站,手机网站开发方案,珠海网站制作设计,软件开发工具包括一、摘要
摘要 近年来#xff0c;Java作为一种新的编程语言#xff0c;以其简单性、可移植性和平台无关性等优点#xff0c;得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序…一、摘要
摘要 近年来Java作为一种新的编程语言以其简单性、可移植性和平台无关性等优点得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序也可以开发Java Applet程序。 “超级玛丽”游戏是一个经典的游戏它因操作简单、娱乐性强而广受欢迎。本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计采用面向对象的设计模式对游戏中的所有物体赋予对象的概念和属性。开发了一款超级玛丽游戏该游戏主要分为窗体类、场景类、马里奥类、敌人类、障碍物类等几个类。在主程序运行的线程中用户控制的超级玛丽随方向键的操作而移动并且可以实现马里奥游戏中的一些基本功能例如踩死敌人或者顶掉砖块。本游戏采用双缓存技术解决了游戏过程中的闪屏问题。通过本游戏的开发达到学习Java技术和熟悉软件开发流程的目的。 本文在介绍Java相关技术和国内外发展现状的基础上对“超级玛丽”游戏的整个生命周期的各个开发阶段进行了详细地介绍。为了保证程序代码的正确性和功能实现的可靠性本文还介绍了游戏软件的程序调试过程和功能测试结果。
二、系统运行环境及开发软件
开发环境Windows 7 2开发工具eclipse 3编程语言Java语言
三、可行性的分析
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。要达到这个目的必须分析几种主要的可能解法的利弊从而判断原定的系统规模和目标是否现实系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。因此可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
1 技术可行性
本游戏是在Windows 7环境下开发的一般的机器配置就可以了对机器本身没有太高的要求一般当前学校或个人电脑完全可满足要求环境只需装上jdk 1.4或以上版本就行了Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机。NeatBeans IDE 5.5是SUN公司开发的Java可视化集成开发工具是目前最优秀的Java集成开发工具之一。
2 经济可行性
由于本系统使用到的工具一般机器都具备使用环境也很简单开发成本低本课题研究的内容是涉及网络的游戏对战。当今形式下网络游戏俨然已经成为年轻人最时兴的消费方式之一JAVA一直以来由于其可以“跨平台”以及“一次编译到处运行”等特点许多人直接它为网络编程语言且由于JAVA游戏一般来说简单有趣并且对用户硬件要求极小所以JAVA游戏通常对85%的计算机用户都有吸引力。且政府态度和政策都是一种信号表明2005年对本土网络游戏的扶持力度将加大国内游戏厂商将可获得发展的核心技术平台政策有利于保护中国游戏软件的自主知识产权这为网络游戏发展创造了良好的政策环境。
3 操作可行性
由于在整个系统的开发过程中从操作简便、界面美观、灵活实用的用户要求为出发点界面设计时充分考虑玩家的感受界面比较直观交互性很好所以操作起来简单明了。
四、需求分析
所谓系统分析就是指在整个系统开发工程中解决“做什么”的问题把要解决哪些问题满足用户哪些具体的信息需求调查分析清楚从逻辑上或是说从信息处理的功能需求上提出系统的方案即逻辑模型为下一阶段进行物理方案设计解决怎么办提供依据。
1 用户需求分析
超级玛丽这款游戏是很多人童年经典的回忆是一种简单的大众的游戏自从计算机实现以来深受广大电脑玩家的喜爱。并且随着社会的快速发展人们的生活节奏越来越快人们对于童年的美好已经不愿意仅仅停留在回忆阶段。所以利用java语言开发一款超级玛丽游戏正是人们迫切需要的。
2功能需求分析
本系统主要是完成超级玛丽游戏的基本操作。本系统需要满足以下几点要求 (1) 在开始界面按空格键进入游戏。 (2) 利用方向键来控制马里奥的运动。 (3) 碰撞检测 A.马里奥在运动的过程中如果碰到障碍物则停止运动,在移动到悬崖上方是会掉下去并失去一条生命。 B.对于有些敌人如果马里奥跳到敌人头顶上则敌人消失否则马里奥失去一条生命。 (4)马里奥顶到金币会增加分数当马里奥失去3条生命时游戏结束。
3.界面设计需求分析
选取和谐Q版的图片使画面色彩和谐自然。固定游戏界面大小与初始显示位置。游戏采用900600像素显示对于马里奥和障碍物选用6060像素的正 方图片对于较大的障碍物分割成多个60*60的小正方形。
五、系统概要设计
1系统模块设计
首先在对于系统的需求进行了分析因为设计者的最初是要做一款游戏所以窗体类必不可少。接下来继续分析游戏中还需要背景类、障碍物类、敌人类、马里奥类这及格类。其次为了游戏的流畅以及游戏中图片调用的方便专门为此再设计一个初始化类。
2.窗体类
该类主要用于存放游戏的场景以及其他各类并且实现KeyListener接口用于从键盘的按键中读取信息。该类中的一些属性主要包括了用于存放所有场景的list集合 allBG马里奥类 mario当前的场景 nowBG以及其他一些游戏中需要的标记等。而且在该类中运用双缓存的技术使得游戏的流畅度更高解决了游戏中出现的闪屏问题。
Myframe
allBG:Listmario:MarionowBG:BackGround …
main():voidpaint():voidkeyPressed():voidkerReleased():void …
2初始化类
用于存放游戏所需要的所有静态文件在游戏开始的时候将所有文件导入提高游戏的运行速度。并且在该类中将所有需要用到的图片进行分类分为障碍物类马里奥类敌人类以及背景图片。当游戏运行时可以直接调用这些集合中的图片进行遍历在调用的时候更加方便而且可以使马里奥或者敌人在移动的时候产生动态效果。
StaticValue
allMarioImage:ListstartImage:BufferedImage …init():void …
3背景类
该类表示马里奥及障碍物和敌人所处的场景并且将障碍物和敌人绘制到场景中。在该类中包括用于存放敌人和障碍物的list集合以及当敌人或者障碍物被消灭后用于存放已经消失的敌人和障碍物的集合这样做是为了在马里奥死亡时重置场景所用的。其次在该类中还使用了控制敌人移动的方法是为了在程序之初控制敌人静止然后在玩家点击空格以后在使得敌人开始移动。
BackGround
bgImage:BufferedImageisOver:booleanisDown:booleanallEnemy:ListremoveEnemy:List …
enemyStartMove():voidreset():void …
4.马里奥类
用来控制马里奥的行动并且在该类中加入碰撞检测判断马里奥是否与障碍物或者敌人发生碰撞。该类中的属性主要定义了马里奥所在的场景马里奥的移动和跳跃的速度以及马里奥在移动过程中需要显示的图片。另外该类中还定义了玩家的生命值和所获得的分数。并且在run方法中还定义了当马里奥到达最后一关的旗子时玩家将失去对马里奥的控制剩下的由程序控制走到城堡完整全部游戏。
Mario
x:inty:intxmove:intymove;intlife:intisDead:boolean …
leftMove():voidleftStop():voidjump():voiddown():voiddead():void …
5障碍物类
绘制场景中所需要的障碍物例如地面、砖块、水管等等。该类中的属性包括了障碍物的坐标障碍物所需要显示的图片等。并且在该类中也定义了障碍物类的重置方法当马里奥死亡时场景类会调用该方法。
Obstruction
x:inty:inttype:intstarttype:intshowImage:BufferedImage …
reset():voidsetImage():void …
6敌人类
该类中主要设置了两种敌人一种是蘑菇怪可以被马里奥踩死另一种是食人花不能被踩死。该类中的属性包括了敌人的坐标敌人的初始坐标需要显示的图片以及敌人的移动方向和移动范围等。敌人的初始坐标主要是为了当敌人执行重置方法后将敌人的位置还原。
Enemy
x:inty:intstartx:intstarty:intshowImage:BufferedImageupMax:intdownMax:int …
reset():voiddead():void …
7.设计流程 六、程序截图 七、部分代码
gaamaCreature.java
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.List;class GameCreature extends GameObject
{protected int XSPE10,YSPE10;protected int xspe,yspe,xadd,yadd3;protected ListGameObject objsnull;public boolean draw false;GameCreature(int x,int y,GameClient gc){super(x,y,gc);}public void draw(Graphics g){setObjs(gc.obj_map.objs);super.draw(g);
// setAvailable();
// getHasrun();
// touchWithHero(gc.player1);
// move();
// action();}protected void setAvailable() {if(availablefalse) return;if(getRectangle().intersects(new Rectangle(0,0,GameClient.F_W,GameClient.F_H))){this.drawtrue;}else if(x-GameClient.F_W/2){drawfalse;availablefalse;}}public void move(){super.move();}protected void xMove(){}protected void yMove(){}protected void disappear(){if(drawtrue){drawfalse;availablefalse;}else return;}public void touchWithHero(Hero hero){super.touchWithHero(hero);}protected void action(){super.action();}public void setObjs(ListGameObject objs) {this.objs objs;}public Rectangle getRectangle(){return new Rectangle(x,y,all_w,all_h);}public Rectangle getARectangle(int x,int y,int w,int h){return new Rectangle(x,y,w,h);}public Rectangle getNextRectangle(){return new Rectangle(xxspe,yyspe,all_w,all_h);}
Hero.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.List;
import java.util.Map;class Hero
{protected static final int XSPE12,YSPE27;public int spe_add2,xspe0,yspe0,spe10,rub_add1,g_add3,y_add17,j_time0,j_lim2,die_t0;public int hero_w25,hero_h40;public int x,y,x1,y1,x2,y2,hasrun_x0;public final static int LIM_X10,LIM_X2550;protected boolean march,can_jtrue,finishfalse;protected boolean b_l,b_u,b_r,b_d;public boolean live true;public Action act Action.UNSTAND;public Action touch Action.STAND;public Action last_t Action.UNSTAND;protected Dirction add_dirDirction.STOP;protected Dirction move_dirDirction.STOP;protected Dirction face_dirDirction.R;private ListGameObject objsnull;protected static MapString,Image hero_img new HashMapString,Image();public boolean bigfalse;protected GameClient gcnull;public Hero(int x, int y,GameClient gc) {this.x x;this.y y;this.gc gc;}public void draw(Graphics g){move();Color c g.getColor();g.setColor(Color.black);g.fillOval(x,y,5,5);g.fillOval(x,(yhero_h),5,5);g.fillOval(xhero_w,y,5,5);g.setColor(c);if(this.livetrue){this.setMarch();setObjs(gc.obj_map.objs);touchWithObjs();}}private void setHasrun() {if(xxspeLIM_X2){hasrun_xxspe;}}public void setObjs(ListGameObject objs) {this.objs objs;}public void keyPressed(KeyEvent e) {if(livefalse||finishtrue) return;int keye.getKeyCode();if(keyKeyEvent.VK_LEFT) b_ltrue;else if (keyKeyEvent.VK_UP) b_utrue;else if (keyKeyEvent.VK_RIGHT) b_rtrue;else if (keyKeyEvent.VK_DOWN) b_dtrue;}public void keyReleased(KeyEvent e) {if(finishtrue) return;int keye.getKeyCode();if(keyKeyEvent.VK_LEFT) b_lfalse;else if (keyKeyEvent.VK_UP) b_ufalse;else if (keyKeyEvent.VK_RIGHT) b_rfalse;else if (keyKeyEvent.VK_DOWN) b_dfalse;//else if (keyKeyEvent.VK_F1) relive();}public void relive() {if(livefalse){bigfalse;livetrue;finishfalse;x50;y100;xspe0;yspe0;die_t0;}}public void reset(){hasrun_x0;relive();//System.out.println(big big march march);}protected void setDir(){if(xspe0) move_dirDirction.R;if(xspe0) move_dirDirction.L;if(xspe0) move_dirDirction.STOP;}protected void setMarch(){if(move_diradd_dir) marchtrue;else marchfalse;if(finishtrue) marchtrue;//ʱߵ״̬}protected void setFacedir(){if(add_dir!Dirction.STOP)face_dirthis.add_dir;}protected int getXAdd(){if(finishtrue) return 0;int add 0;if(b_lfalseb_rfalse) {add0;add_dirDirction.STOP;}else if(b_ltrue) {add(-spe_add);add_dirDirction.L;}else if(b_rtrue) {addspe_add;add_dirDirction.R;}return add;}protected int get_rub_Add(){if(livefalse||finishtrue) return 0;int rub 0;if(xspe!0) {if(move_dirDirction.R) rub(-rub_add);else if(move_dirDirction.L) rub(rub_add);}if(touchAction.LTOUCH||touchAction.RTOUCH){rub0;}return rub;}protected void jump(){if(can_jactAction.STAND){yspe-y_add*1.3;b_ufalse;}else if(can_jtrueactAction.UNSTAND){ yspe-y_add*1;b_ufalse;}if(yspe-YSPE){yspe-YSPE;can_jfalse;}j_time;actAction.UNSTAND;//Ծnew GameAudio(ˮ).start();}public void move(){if(ygc.F_H100) return;xMove();yMove();setHasrun();if(y600){if(die_t0)die();}if(xgc.F_Wfinishtrue){xspe0;yspe0;livefalse;gc.d_gamefalse;gc.d_menutrue;}}protected void die(){//livefalse;die_t;actAction.UNSTAND;touchAction.UNTOUCH; xspe0;yspe-YSPE;hasrun_x0;System.out.println(die);//ʧЧnew GameAudio(ʧ).start();}public void finish(){if(finishfalse){finishtrue;xspeXSPE;//Чnew GameAudio(ף).start();}}private void yMove() {if(b_utruecan_jtruej_timej_lim){jump();b_ufalse;}else if (actAction.STANDyspe0){can_jtrue;j_time0;yspe1;}else if (actAction.UNSTAND){yspeg_add;}int g_add1g_add;if(touchAction.UNTOUCH){g_addg_add1;}else if(touchAction.LTOUCH){yspe0;//g_add0;}else if(touchAction.RTOUCH){yspe0;//g_add0;}else if(touchAction.BUNT){yspe0;}yyspe;}private void xMove() {this.setFacedir();this.setDir();int xaddthis.getXAdd();int raddthis.get_rub_Add();spe1(xaddradd);if(touchAction.UNTOUCH){rub_add1;}//ײelse if(touchAction.LTOUCH){//xspe-xspe/2;xhero_w/2;rub_add3;b_lfalse;if(b_lfalse){xspe0;}}else if(touchAction.RTOUCH){//xspe-xspe/2;x-hero_w/2;rub_add3;b_rfalse;if(b_rfalse){xspe0;}}if(-XSPEspe1spe1XSPE){xspespe1;}else{spe1xspe;}if((xxspeLIM_X2||xxspeLIM_X1)finishfalse)//δյԽ߽ʱ{xx1;}else{xxspe;x1x;}}public Rectangle getRectangle(){return new Rectangle(x,y,hero_w,hero_h);}public Rectangle getARectangle(int x,int y,int w,int h){return new Rectangle(x,y,w,h);}public Rectangle getNextRectangle(){return new Rectangle(xxspe,yyspe,hero_w,hero_h);}protected void touchWithObjs() {if(livefalse) return;GameObject obj1null;GameObject obj2null;for(int i0;iobjs.size();i){GameObject objnull;obj objs.get(i);if((xobj.xxobj.xobj.all_wyobj.yyobj.yobj.all_h)||(xhero_wobj.xxhero_wobj.xobj.all_wyobj.yyobj.yobj.all_h))//Խ1{if(obj.yy-hero_h) {yobj.y-hero_h;yspe1;System.out.println(HeroԽ1˳);return;}if(xspe0){xobj.x-hero_w;}else{xobj.xobj.all_w;}actAction.UNSTAND;System.out.println(HeroԽ1);}if((obj.drawtruegetNextRectangle().intersects(obj.getRectangle())true(obj!obj1obj!obj2))||obj.throughCheck(this)){if(obj.throughCheck(this))//Խ2{if(obj.yy) return;x-xspe;y-yspe;System.out.println(HeroԽ2);}if(obj1null){obj1obj;//System.out.println(obj1 obj.getRectangle());}else if(obj1!null){obj2obj;//System.out.println(obj2 obj.getRectangle());}if(obj1!nullobj2!null){//System.out.println(Ҫһµobj obj.getRectangle() obj1 obj1.getRectangle() obj2 obj2.getRectangle());}}}if(obj1!nullobj2null)//ֻһmarioӴʱ{if(yobj1.y){yobj1.y-hero_h;actAction.STAND;}else{actAction.UNSTAND;}if(xobj1.xobj1.all_wxspe0){touchAction.LTOUCH;}else if(xhero_wobj1.xxspe0){touchAction.RTOUCH;}else if(yobj1.yobj1.all_hyspe0){touchAction.BUNT;yobj1.yobj1.all_h;}else{touchAction.UNTOUCH;}
/* if(touch!Action.UNTOUCH)System.out.println(һ弴ײ act touch x x y y);*/}else if(obj1!nullobj2!null)//marioӴʱ{int ground0;//ҳΪΪǽif(xhero_wobj1.xxobj1.xobj1.all_wobj1.yy){ground1;}else if(xhero_wobj2.xxobj2.xobj2.all_wobj2.yy){ground2;}else{System.out.println(heroײmario);return ;}//ǽĴGameObject obj null;if(ground1){objobj2;}else if(ground2){objobj1;}if(xhero_wobj.xobj.all_wxspe0){touchAction.LTOUCH;}else if(xobj.xxspe0){touchAction.RTOUCH;}//if(touch!Action.UNTOUCH)//System.out.println(弴ײ act touch xspe xspe yspe yspe);}else if(obj1nullobj2null){actAction.UNSTAND;touchAction.UNTOUCH;//System.out.println(û弴ײ act touch x x y y);}}
}
八、联系与交流
q:969060742 完整报告、程序资源、代码