超级玛丽游戏设计java.docx

上传人:b****2 文档编号:16914680 上传时间:2023-04-24 格式:DOCX 页数:27 大小:503.53KB
下载 相关 举报
超级玛丽游戏设计java.docx_第1页
第1页 / 共27页
超级玛丽游戏设计java.docx_第2页
第2页 / 共27页
超级玛丽游戏设计java.docx_第3页
第3页 / 共27页
超级玛丽游戏设计java.docx_第4页
第4页 / 共27页
超级玛丽游戏设计java.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

超级玛丽游戏设计java.docx

《超级玛丽游戏设计java.docx》由会员分享,可在线阅读,更多相关《超级玛丽游戏设计java.docx(27页珍藏版)》请在冰豆网上搜索。

超级玛丽游戏设计java.docx

超级玛丽游戏设计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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1