超级玛丽游戏设计javaWord文件下载.docx
《超级玛丽游戏设计javaWord文件下载.docx》由会员分享,可在线阅读,更多相关《超级玛丽游戏设计javaWord文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
游戏进行的声音、玛丽吃金币的声音、玛丽撞墙的声音、玛丽发子弹的声音、玛丽死亡的提示音等等;
玛丽游戏界面上有文件(退出游戏、打开地图)、游戏(暂停、开始、新游戏)、工具(自定义地图)、帮助(关于、使用说明)的菜单,并且在每个子菜单上添加特定的标志;
设计思路:
1、首先设计游戏主界面、游戏界面上的控制菜单,
控制菜单包括:
文件、游戏、工具、游戏帮助。
文件、游戏等菜单又包含了以下子菜单:
文件:
单击打开地图,就可以选择已创建好的地图关卡;
单击退出游戏,就直接退出整个游戏主界面。
游戏:
单击新游戏,游戏就会从第一关重新开始;
单击开始游戏,游戏就开始进行,玩家可以通过键盘的按键来对玛丽的动作进行控制;
单击暂停游戏,游戏就暂停运行。
工具:
单击工具里的自定义地图,就会弹出自定义地图框,可以在框内进行新地图的创建。
游戏帮助:
单击使用说明,里面有玩此游戏的所有操作说明;
单击关于,就会有制作人和版本说明。
注意:
在对游戏设计的每一步,我们都需要进行功能的测试,这样才能保证编程游戏的正常进行。
2、游戏控制界面图:
二、类模块的设计:
此游戏是用对创建的类中的静态方法的调用来实现的,而且类与类之间是相互嵌套的;
通过对游戏的功能要求分析,将超级玛丽的功能划分成了十五个类模块:
zkml类、chuangkou类、gui类、game类、wenjian类、zi_map类、ml_map类、Photos类、Wav类、ma_li类、Enemy类、Skill类、Bullet类、move_wall类:
Record类。
下面是对每个类的简单介绍:
zkml类:
在zkml类里面包含了main方法,由于程序的运行是从主方法开始,所以zkml类是游戏的主类;
主要代码:
publicclasszkml{
publicstaticvoidmain(String[]args){
chuangkouaa1=newchuangkou();
newphotos(aa1);
//装载图片
newgame(aa1).start();
//创建游戏时钟线程
newma_li().start();
//创建玛丽运动线程
newenemy().start();
//创建敌人运动线程
newskill().start();
//创建技能运动线程
newbullet().start();
//创建子弹运动线程
newrecord().start();
//创建动态显示计分类
newmove_wall().start();
//创建移动的墙类
}
}
chuangkou类和gui类:
在Chuangkou类里面创建游戏主界面;
主要代码如下:
classchuangkouextendsJFrameimplementsActionListener{·
·
}//主界面
在gui类是游戏运行窗口类;
classguiextendsJPanelimplementsKeyListener,Runnable{
………………………………………..
publicvoidpaint(Graphicsg){·
}//游戏框
publicvoidkeyReleased(KeyEvente){·
}//释放某个键时调用此方法
publicvoidkeyPressed(KeyEvente){·
}//按下某个键时调用此方法
publicvoidkeyTyped(KeyEvente){·
};
publicvoidrun(){·
}//按键处理线程(实现多按键处理)
game类:
是游戏数据类(包含游戏中的所有重要数据);
classgameextendsThread{
publicstaticchuangkouaa1;
publicstaticintmoney,life,guan_qia,time;
//life玛丽生命
publicstaticbooleanshow,stealth;
//show控制显示,stealth玛丽是否隐身
publicstaticlongscore;
//得分
publicstaticbooleansuspend=true,games=false;
//suspend暂停游戏games是否游戏
publicstaticintmk,l=0,lm=0;
//控制变量
game(chuangkouaa1){
this.aa1=aa1;
}
publicstaticvoidinints(){·
}//新游戏初始
publicstaticvoidinint(){·
}//(菜单文件)打开地图初始(每死亡地图从新打开一次)
publicstaticvoidnew_inint(){·
}//过关初始
publicstaticvoidinint_ml(){·
}//玛丽死亡后初始
publicstaticvoidadd_score(intx,inty,intchoose){·
}//加分
publicstaticvoidgameover(){·
}//游戏结束
}//线程
wenjian类:
是文件类型类;
代码:
classwenjianextendsFileFilter{
publicStringext;
publicwenjian(Stringext){
this.ext=ext;
publicbooleanaccept(Filefile){
if(file.isDirectory())
returntrue;
Stringf_name=file.getName();
intdex=f_name.lastIndexOf("
."
);
if(dex>
0&
&
dex<
f_name.length()-1){
Stringpd=f_name.substring(dex+1).toLowerCase();
if(pd.equals(ext))
returnfalse;
publicStringgetDescription(){
if(ext.equals("
hzk"
))
return"
地图文件(*.hzkml)"
;
hzks"
游戏进度文件(*.hzkmls)"
return"
"
zi_map类:
是自定义地图类(地图的绘画);
classzi_mapextendsJPanelimplementsKeyListener,ActionListener{·
}//自定义地图容器
publicFilefile;
publicchuangkouaa1=null;
publicJFileChooserkuang=null;
//文件框
publicguigo=null;
publicContainergames=null;
publicbooleanps[]=newboolean[6];
//按键检测
publicJButtonb1,b2,b3;
publicJLabelts,ah,ah1,ah2,ah3;
publicJTextFieldx1,y1;
publicstaticinti,j;
publiczi_map(chuangkouaa1,Containergames,guigo,JFileChooserkuang){
publicvoidpaint(Graphicsg){·
}//画框
publicvoidkey(){·
}//按键处理
publicvoidkeyReleased(KeyEvente){·
publicvoidkeyPressed(KeyEvente){{·
}/按下某个键时调用此方法
publicvoidkeyTyped(KeyEvente){·
publicvoidactionPerformed(ActionEventea){·
}//按键
}
ml_map类:
是游戏地图类;
classml_map{
publicstaticinti,j,chcae_mali,yun_ti;
//chcae_mali缓存玛丽初始的数组位置信息,yun_ti缓存云梯数组位置信息
publicstaticfinalintRGD[][]={{79,128,250},{0,0,0}};
//地图背景色(蓝天,黑夜)
publicstaticintrgd[]=newint[3],rgd_cache[]=newint[3];
//rgd背景色,rgd_cache缓存背景色
publicstaticintmaps[][]=newint[14][400];
//地图(数组值意义0无,1~20地图组件100撞墙特效1,101撞墙特效2,200敌人2,201敌人2)
publicstaticintnew_ml[][]=newint[15][2];
//玛丽在地图中复活或产生的位置
publicstaticintreturn_surface[][]=newint[5][2];
//玛丽从土里从回地表面的位置
publicstaticintup_map[]=newint[5];
//下地下地图位置
publicstaticintsoil_map[]=newint[5];
//地下地图的位置
publicstaticintsky_map[][]=newint[3][4];
//天空地图的位置(x起,始,玛丽从天空下降的x坐标,y坐标)
publicstaticintyun_ladder[]=newint[3];
//云梯位置
publicstaticintskip_qi=0;
//过关跳旗地图位置(开始seat地图位置)
publicstaticintseat=0,end_seat=0;
//seat地图位置
publicstaticvoidinints(){·
}//初始
publicstaticvoidinints_new_enemy_move_wall(intseats){·
}//新地图(或地图初)初始产生敌人或会动的墙
publicstaticvoidstorage_mali_revive_position(intx,inty){·
}//存储玛丽复活位置
publicstaticvoidstorage_mali_return_surface_position(intx,inty){·
}//存储玛丽从土里从回地表面的位置
publicstaticvoidstorage_soil_map_position(intx,inty){·
}//存储土地里的地图位置
publicstaticvoidstorage_up_map(intx,inty){·
}//存储下(地下)地图位置
publicstaticvoidstorage_sky_map(intchoose,intchooses){·
}//存储天空地图位置(x起始)
publicstaticvoidstorage_yun_ladder(intx){·
}//存储云梯位置
publicstaticvoidvary_map(intx,intchoose){·
}//变化地图(int玛丽的初始x坐标;
int0上地表面,1下地表面,2上去过关拉旗,3上去天空,4下到土地里)
publicstaticvoidnew_yun_ti(intx,inty){·
}//产生云梯
Photos类:
是图片类(用于读入游戏中的所有图片);
classphotos{
publicstaticImagephoto[]=newImage[41];
//地图专用
publicstaticImagebody[][]=newImage[2][6];
//敌人专用
publicstaticImagemy[][]=newImage[3][14];
//玛丽专用
publicstaticImageskill[][]=newImage[4][2];
//技能专用
publicstaticImagez_d[]=newImage[5];
//子弹专用
publicstaticImagemoney[]=newImage[2];
//撞击金币特效专用
publicstaticImageeat_ml[]=newImage[2];
//食人花专用
publicphotos(chuangkouaa1){·
}/*地图*/
Wav类:
是声音类(此类在游戏中添加了一些特定的声音,是为了让游戏的效果更完美);
classwav{
publicstaticvoidgames(){
try{
FileInputStreamfileau=newFileInputStream("
wav/地上.wav"
AudioStreamas=newAudioStream(fileau);
AudioPlayer.player.start(as);
//播放
//AudioPlayer.player.stop(as);
//停止播放
}catch(Exceptione){}
publicstaticvoidmoney(){·
}//吃金币
publicstaticvoidq1(){·
}//玛丽撞墙(不损坏)
publicstaticvoidq2(){·
}//玛丽撞墙(损坏)
publicstaticvoidskip(){·
}//玛丽跳
publicstaticvoidnew_eat(){·
}//产生技能
publicstaticvoideat(){·
}//玛丽吃技能
publicstaticvoidzd(){·
}//玛丽发子弹
publicstaticvoidsmall(){·
}//玛丽变小
publicstaticvoidd_die(){·
}//敌人死亡
publicstaticvoidml_die(){·
}//玛丽死亡
publicstaticvoidpull(){·
}//过关拉旗
publicstaticvoidadd_life(){·
}//加生命
publicstaticvoidend_games(){·
}//游戏结束声音
publicstaticvoidml_town(){·
}//进入城堡声音
ma_li类:
是玛丽类(包含玛丽的一切动作);
classma_liextendsThread{
publicstaticml_mapmap;
//引入地图maps[14][400];
地图移动seat;
publicstaticfinalintdes[]={0,0,7,1,0};
//初始玛丽坐标数据0.玛丽类型,1.玛丽高度,2.玛丽显示形状,3.玛丽方向,4.玛丽是否发子弹;
publicstaticintcoordinate[]=newint[7];
//坐标(地图坐标)0.x,1.y,2.玛丽形状大小(0,1,2)3.玛丽高度(0,1)4,玛丽显示形状5.玛丽方向(0左,1右)6玛丽是否发子弹(0,1)
publicstaticintmoneys[]=newint[3],ml_x;
//撞击金币坐标0.x,1.y,2上升高度
publicstaticbooleanmoneys_p=false,via=false,mali_die=false;
//撞击金币显示控制;
via过关还是死亡(初始选择);
mali_die玛丽是否死亡
publicstaticinti,j,kfc=0,ml_tall=0;
//die玛丽死亡位置
publicstaticintmove[]={2,8,1,1};
publicstaticbooleanskip_qi=false,left_right=false,skip=false,caches=false,
launch=false,down=false,yan_enemy,abc=true;
//yan_enemy玛丽压死着敌人特效
publicstaticintyan_enemys[]=newint[3];
//压玛丽的坐标x,y,类型
publicstaticintml_skip;
//控制弹跳的高度
publicstaticintmoney,cache[]=newint[3],tame[]=newint[2];
//money控制钱箱的撞击次数();
cache[]墙特效缓存x,y,形状;
tame[]记录损坏墙的位置
publicstaticbooleanbelow=false,sky=false;
//below是否在土里;
sky是否在天上
publicstaticbooleanshow_mali=true;
//是否显示玛丽
publicstaticinthigh_low,around;
//high_low上下,around左右
publicstaticvoidinint_mali_behaviour(){·
}//初始玛丽行为
publicstaticvoidinint_mali_coordinate(intmali_x){·
}//初始玛丽坐标(传入玛丽参考x坐标)
publicstaticvoidnew_mali(intx,inty){·
}//产生玛丽初始坐标
publicstaticvoiddie_ml(){·
publicstaticvoidml_surface(intchoose){·
}//(0.从地下上表面,1.进入过关拉旗,2.从天空掉下)玛丽回到地表
publicstaticvoidml_below(){·
}//玛丽下降到地里
publicstaticvoidml_sky(){·
}//玛丽上升到天上
publicstaticvoidup(){·
}//向上
publicstaticvoiddown(booleanch){·
}//下蹲
publicstaticvoidright(){·
}//右移
publicstaticvoidlaunch(){·
}//发射子弹
publicstaticvoidnew_cartridge(){·
}//产生子弹技能
publicstaticvoidsmall_skip(){·
}//小跳(1个单位)
publicstaticvoidbig_skip(){·
}//大跳(3个单位)
publicstaticvoidimpact_enemy(){·
}//玛丽碰撞了敌人
publicstaticvoidml_money(intx,inty){·
}//玛丽碰撞了金币箱
publicstaticvoideat_skill(intchoose,intchse){·
}//玛丽碰撞了技能
publicstaticvoideat_wall(intx,inty){·
}//玛丽也撞墙(跳起时)传入(地图)碰撞位置
publicstaticvoidup_enemy_money(intx,inty){·
}//判断敌人(或金币)是否在玛丽撞击墙的上面(传入地图坐标)
publicstaticvoidml_eat(intx,inty){·
}//判断是否吃(走动非撞墙)吃道具
publicstaticintjudge(intx,inty){·
}//判断是否合理
publicstaticvoidjudge_mali_down(){·
}//落下(直