超级玛丽游戏设计java.docx
- 文档编号:8727069
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:485.46KB
超级玛丽游戏设计java.docx
《超级玛丽游戏设计java.docx》由会员分享,可在线阅读,更多相关《超级玛丽游戏设计java.docx(21页珍藏版)》请在冰豆网上搜索。
超级玛丽游戏设计java
Java程序设计
实
验
报
告
专业:
嵌入式工程技术
年级:
2012
姓名:
黄泽康
学号:
20125003
指导教师:
贺伟
阿坝师专物理与电子科学系
Java编程超级玛丽的游戏设计
题目简介:
本游戏是利用java语言在JCreatorPro和jdk的环境下,经过两个星期的编写与调试完成的一个超级玛丽游戏。
本游戏代码长度约3000行,编写过程中历经两个版本(V1.0版大约2000行代码、V2.0版大约3000行代码)。
V1.0版本用时一个星期,V2.0版本用时一个星期,此游戏操作简单、界面美观、功能基本较齐全。
整个游戏分功能类模块,约实现了超级玛丽游戏经典版的所有功能的80%。
一、实验目的:
1、熟悉类和了解如何创建类,对创建的类进行测试。
让我们更加了解学习面向对象设计的目的和作用;
2、了解java面向对象编程设计与C语言、C++编程的区别;
3、学会使用各种程序命令、了解各种包的作用和功能,从而设计图形界面等;
4、掌握java面向对象中的各种使用语句;
5、学会设计和编写简单的程序或游戏。
二、实验原理、要求及主要设计思想:
原理:
利用建立的各种类和包的调用来实现各自的作用,并且实现游戏编写的效果。
设计要求:
实现一个简单的超级玛丽游戏程序的基本要求:
在二维平面里画出地图(道具、敌人等)、玛丽,根据超级玛丽的动作和高度在确定地图的高度,并且还要对人的动作进行设计,;
玩家能通过控制按键A左走、D右走、L大跳、J小跳、K发子弹等来控制玛丽的动作;
在游戏中添加声音效果,如:
游戏进行的声音、玛丽吃金币的声音、玛丽撞墙的声音、玛丽发子弹的声音、玛丽死亡的提示音等等;
玛丽游戏界面上有文件(退出游戏、打开地图)、游戏(暂停、开始、新游戏)、工具(自定义地图)、帮助(关于、使用说明)的菜单,并且在每个子菜单上添加特定的标志;
设计思路:
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(){·······}//游戏结束
publicvoidrun(){·······}//线程
}
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 Stringpd=f_name.substring(dex+1).toLowerCase(); if(pd.equals(ext)) returntrue; } returnfalse; } publicStringgetDescription(){ if(ext.equals("hzk")) return"地图文件(*.hzkml)"; if(ext.equals("hzks")) return"游戏进度文件(*.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{ publicstaticchuangkouaa1; 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左右 publicstaticvoidinints(){····}//初始 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(){····}//落下(直
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超级 玛丽 游戏 设计 java
![提示](https://static.bdocx.com/images/bang_tan.gif)