欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《java游戏大作业设计》.doc

    • 资源ID:29967161       资源大小:1.34MB        全文页数:24页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《java游戏大作业设计》.doc

    Java游戏编程基础 课程大作业报告课 题: 吃豆人游戏的设计与实现 姓 名: 黄子强 学 号: 201517030207 同组姓名: 刘照、杜威 专业班级: 网工15102 指导教师: 何青 设计时间: 2018.6.18 评阅意见:评定成绩: 指导老师签名: 年 月 日目 录一、 课程设计目的1二、 需求分析1三、 总体设计23.1类的设计23.2事件的设计3四、 详细设计44.1 PacWorld类44.2 Animal类74.3 PacMan类94.4 Ghost类114.5 Blank类144.6 Position类144.7 Score类154.8 Lives类164.9 Object类174.10 Coin类&Power_Pellet类17五、 游戏测试175.1 游戏界面展示175.2 游戏效果测试19总 结203决地到能问一的和了有帮和我课谢,帮们队谢此戏典这善功界富更希下戏化方另设化方码逻了优题制许讨队中过游构构的出能思设清逻秀优基强拥。思的游来的更也,的础加要不中计的识知一积逐中实衡平此功代何实个能码代丰是也个的开这路设常都者景动事个针设游之动移断来径豆较离间界最向当置当或动步定界进断据动模前法现实有计,否移步检计要免撞 如固识言 了地有析读解问通多诸难过制晰地也理理路格 也数方 是不了积的个改码码能现思去要都的、关相、的移于向个终 何类 何移角揣细现能很则单看计戏机简为态态就快的 ,认的 往通,准 还 。调生不用拖以和类,的多简可在得 方程 于习们堂学个 正正结豆击状无豆,速,输豆大豆情豆试试状试测连正正结出正景出正右输进道进侧测正正正正结边移,常边边,常边出不移正边出会常输向向向向向试试测果 -图果前-图效-图果)戏、时豆,中-戏游即 * 面戏止初最家时行展面游测用被类 在主定分个两 础个下的类 类 ,戏充容放对类类 在两影态生 还 同个了共吃中 在 类法方有的 类 了类豆。子给也的中样法类 承 0 - ) ( ( ) ) 息信的计用要就。命剩当显,面命器命的着然,事碰以,和在 ) + "0 "" ) . ( " ( 0 < ( "0 )0-字接数,数对0显,数对示显00时数,角显 -)-(位人到看 示通也我过游-)- 色中域白迹 ) " " :+ +:" / ) ,+ + " ) ) ( . . / ) . ( ) . / ) ( ( )( . ( . / . ) 迹迹运象这定一 也象义类这 调对够一需,置当、动都怪人 ) . 0,.( ( 块块充分空于 ) ( ; . : ;) . : ; . ( . : ) ) = ) -)-图案的向个同也式的着 '' ' . ) ( ( ) >( ) = . ( = ) ) ) . ) 0 ) ) . ( )' ) >(. ) ( < )= . & = ) ' ) . ( ' =) . ) & 0= - 0 = + ) -)-图点由 0= )0 ) ( ) ( . 0 ) = ( + )0 < && <0 ) 0( 0= . ) = &) ( + ) ( ) 0 ) ) . & ) )( )+ 0 ) = & = )( )( . )( )( ) ) = ;' ; : ' ' ; '= : ) ) ) ) + =-( .( . + = ( . . + ) =( ) . + ) ) . ( ) 断判向个行头的个到当移向四随 数数机怪定用需中在实个让的常一物中 ), ( 0= ) ) ,( - ) ( | ( | . ( ) . ) )语(意中个四豆是前函亡戏置时所生判一执命生生出数要候这况死物到会人吃 ) . ( ( + ) 0> )= . & . = =+ + ) ) _ ( ( + + ) ( ) ( ) )提(度速,子仍前0于数五数让的接当时子当加数豆的触移,到: 用要豆 ) ) = ) . ( = ' : ; ' ; :' ) 00 = )+ <- ) (动方朝否定判向的能会,向置运豆改后的盘-'' )0 ) . 上向运人变上向击): ) ,) 下, :分向个人左动始' = 量示化片运吃于一置要,) ( ;0 *= ) > ) 示显动运闭开图种动) ) " ) ) . , = ) = ; - = ( & (; = &'= ( ; - =) & ( 0= 0 ) ( 移进才,移方目定+ ( ; ' ; - ; :' - 0 0 方哪去你用 向作终执较行向入和方这并动四检刻运进个还判需时况进前到向一在,-)所-图图前的在新的左会场游侧右 当) ,( ( ) 0 = () = ) . ) 性戏升紧家提往 现突这现另,进通央地们度提人比要动的言 对定道殊中景于法送景的了中类断前的方动方如方的类了中 + ), ( ) ( = = & > + ),( ) =& = = &0 & =(| = 0= * & = / ;+ = ( + ( + =- + = ( = ) )+; 0 ); ;= 0= ( 加器其豆豆置口秒为间持的这怪可此意 为 标的吃大态的吃可立物所大到豆大域定数计 数 即统行要)在置序制), )0, ) , ) , ) ( ) , ( ) , ( ) 0 ( ) , ( ) ) ) 0 ) ) 物物豆器命充、计:加向成-代边的 处明为 = + ( = = + < ( = 0 = = + < = + = 00= 码分 ( 中组到的以边制 制组 + + < 中组维到图将息信) 人 = .) ) ) )( 物怪 )( = ) 人豆小左:显)( ) 充白息息-架素基戏整器和计的右人吃主控戏豆、怪入位的中通留墙线(制中的白空方 分余息游于域有各域戏中,景 设-)数计减示其分在点置并命失人吃否吞以可玩时特 ) 图(事 -)化感在家形 改里( 上的大除数在,) 大当子小)分(加, (豆色人操玩示-如中的件事 和吃是,两分件豆中设件件的其也人吃次,发的义都游每关耦显层戏解,据显些时事收,事这去能(的,义自抛场游定总戏计设可必件游设的体大戏人是灵方对调方间与,的互证候计类子小吃定则类 类的数及充空示板计架戏包 。方辑法事、运物豆实类 和 元个含包 类 及 、 包。方中义的类种类 分成架框一造戏素等生豆生的及怪大数、置充空颜、的)边布分右(戏括器容舞作合个的戏是 中,两 和 分 的目富到而戏游元相加需体具可设这法类其承舞的一也成组的类 中在成分由戏。分、的立确首设游人 设类设示的有时戏在的游值命的以得前示能)减命时玩碰:(相间色与怪现实算的采运主要)化态化变果同能同能的豆色角,由自则戏掌时短使计确明、晰要路及计基计彰要计求情松戏验通任能让制的且,的益优,内一游的的。却者一难计和算现多有,数软游的又老一分的的结与理而平的己提的基 身强和一理系工掌初手果效检能独培发的应熟,论学间己合设次会机胆索探、供提,表头生锻意的过发目项完一试计够编文和般发游掌本程游理基戏握生知技程游 的所用固、目计 目所的技握基掌般文计项目意头,索会合己,发能果掌理强基的而结分又的数多难者的一,且制任验计彰计晰明短掌由色豆能变态主的现色(:时示得值在时设类人设的分分中的组舞其设可相元富的 和中 戏作括戏边、充、大生等一成分的义 、及 含和实豆、方 架板充类 吃类互,方方是的件可总游自(这,时,层关每发吃其件豆两吃 事如示人(小大 )数的(改家在)图)特玩否失并点减)设 中各于息分空制墙留的、控吃计整素息充 左人 ) 物 ) ) ) ) 息图组 制边到中 码 <+ = = = < ( + 为明代向计充物 ) 0 ) ) , ) )序)要 定域到立态吃为意这间秒豆其 0= ) + ) - + ( + ( = = (& & =) ( = () ( , 的方方断的法中定 动人们通,突现提戏 ) ( ,当右场的前图所,一前需个刻动这行终向去方 - ' 定移才 ) = - = ; = ) , ) 种开显 > ) * 0 )置于化 =始人个,下 )变运 )'的改置会判朝方 <) : '= ( ) 豆:到豆加时让五前,度 ) ) + ) + ) + ( )人死况数命判所置是四中 ) .) . ( () , ) 物常实需怪数 移个头判 ( ) + . + . . = + ) : ; ' :; ) ( . +) ) + ()= (0 <& ) +( ( ) 0 - )+ - & ) ' & ) ( ) .) (. ( ) 着也的- ) ) . : ) : ( 于分块 ., .) 都当置一 这象一这迹 / . ( ) . ) )/ () , / " : 中 游也示 (- ,数显对对数接0 " < 0 " " " 和碰然命面当。要的 ) ( 类的子类类 有 在 吃同 还影在类容戏 类础 分在 测面时初* 游中时)-果果试向输出移出,常移正侧进正景正测状情大,无状正个们 程 可简和用生 ,往, 就态戏看能揣何 何个于、的要能码个是 方格路晰过多问析言固撞免移计现模动界动当界较来动游事者常开也是个代此中一识计加的来思强优设能构中队题逻化另希富这此们谢课有一能 00 测戏. _ 面戏 _ _ _ 测、五 _ & 0 _ _ _ 0_ 0 . _ . _ 0 _ . 类 _ 类 _ _ _ 计设四 _ _ 计的事 _ 类 _ 计总三 析需二 目程 _ 名签指 绩见日 月 年 签老 绩定见 报课础编戏 . : 0工 : 、刘 : 00 : 强 现计设人 题一、 课程设计目的复习、领会、巩固和运用课堂上所学的JAVA游戏编程方面的技术知识,让学生掌握游戏设计的基本原理和游戏编程的基本方法,掌握游戏开发的一般步骤和相应文档的编制,能够设计、调试、运行一个完整的游戏项目;提高开发过程中的团队意识,锻炼学生书面和口头表达能力,为学生提供主动学习、积极探索与大胆创新的机会。通过本次游戏设计,综合自己在校期间所学的理论知识,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对java基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。二、 需求分析吃豆子游戏是一种古老而又有趣的游戏,游戏软件不计其数,网上就有好多关于实现的复杂算法和设计,其难度让一般初学者望而却步。开发的出来的吃豆子游戏是一种内容丰富,画面优美,益智类游的戏,并且不受网络的限制,让人们能够在任何时刻通过体验游戏,放松心情。设计需求:游戏界面设计要能够彰显设计者的基本设计框架及思路;游戏界面布局要清晰整洁、层次明确;游戏的设计要使玩家能在短时间内掌握游戏规则;玩家可以自由操控角色,玩家角色具有吃豆子的功能;吃到不同的豆子能有不同的效果(分数变化、角色状态的变化等等);怪物要能够自主运动,采用其特定的算法独立实现;游戏中怪物与玩家角色之间要有相应的事件(比如:触碰到玩家角色时玩家生命减1);界面上要能有够显示出当前的得分情况以及当前的生命值;对于游戏的设计,在游戏结束时能够有相应的提示。三、 总体设计3.1类的设计图3-1在吃豆人游戏的类设计中,首先要确立的是类的关联、划分主次。整个游戏主要由两大部分组成,在这其中PacWorld类既是其中的一大组成部分也游戏一个重要的“舞台”,承载了其他的类方法,在这其中,设计者可以根据具体的游戏需要来加入相应的游戏元素、游戏规则,从而达到丰富游戏的目的。World类又分为PacWorld和MyWorld两个类,其中PacWorld类是游戏场景元素的一个大集合。作为一个舞台的大容器,它包括游戏区块(左中右三部分)的布局、边界(墙壁)的绘制、背景颜色、空白填充、位置信息显示、分数、大小豆子、怪物以及的位置生成、豆子的生成位置等元素,给游戏塑造出了一个整体框架。而另一大组成部分Actor类则作为各种对象类的集合定义游戏中的各种方法。其中包括Animal类、Writing类以及Object类。Animal类中包含了两个重要的元素PacMan类和Ghost类,分别实现吃豆人和怪物的运动、动画、触发事件等算法逻辑及调用方法。Writing类包含主游戏框架面板上计分板、位置显示、空白填充以及生命计数器的方法类。Object类中则是定义被吃的大小豆子。所有的类在设计的时候保证了相互之间的联系性,类与类之间存在方法上的调用,对象方法的灵活运用是吃豆人游戏的一大主体。3.2事件的设计作为一个游戏,事件的设计必不可少。在设计一个游戏时总是会在特定的游戏场景中抛出一个自定义事件,由相关的界面(可能是多个)去订阅这个事件,当接收到这个事件时,这些界面刷新显示数据,从而解除游戏逻辑层和界面显示层的耦合关系。每一个游戏都有其自定义的游戏触发事件,本次设计的吃豆人游戏也有着其独到的自定义事件。这次的设计中,吃豆人的事件主要分为两大类,它们分别是针对吃豆子和触碰Ghost的触发事件。在吃豆子的事件中(如图3-3所示),当玩家操控吃豆人角色吃到小豆子(coin)时,分数加1(更新计分板)并移除小豆子。而当吃到大豆子(Power_Pellet)时,就需要在分数加5并移除大豆子的基础上更新Ghost状态(这里需要改变Ghost的图形,使玩家能在视觉上感受变化)。图3-2在触碰Ghost事件中(如图3-4所示),只有当Ghost处于特殊状态时,玩家角色才可以将其吞食消除,否则吃豆人将会失去一条生命并且重置回出生点,并在计分板上使其生命显示减1(同步计数器)。图3-3四、 详细设计4.1 PacWorld类在游戏场景中,除了中央的游戏区域外,左右各有三块区域用于显示游戏信息,而其余部分则用Blank类方法填充空白。游戏中央的场景中绘制出地图(边界线/墙壁),留出通道,在其中的相应位置放入对应的怪物、大小豆子以及游戏的控制主体吃豆人,左右放置对应的计分板和计数器,构成整个游戏的基本元素框架。图4-1先定义各元素信息:左右空白填充:Blank blankR = new Blank();Blank blankL = new Blank();生命显示:(左下角三个小吃豆人)Lives life1 = new Lives(1);Lives life2 = new Lives(2);Lives life3 = new Lives(3)四种颜色的怪物:Inky inky = new Inky();Blinky blinky = new Blinky();Clyde clyde = new Clyde();Pinky pinky = new Pinky();Ghost.speed = gSpeed;吃豆人:static PacMan pacman;pacman = new PacMan(pPoints, pLives);地图信息:首先,将整个地图存入到一个二维数组中:for(int i = 0; i <pacworld.length; i+) for(int j = 0; j <pacworldi.length; j+) pacworld ij = false; 接下来根据数组绘制地图DrawPath,将绘制的边界以特殊的信息保存到数组中。private void DrawPath() (部分代码) min = 200; max = 442; for (int x = min; x<= max; x+) pacworld x341 = true; min = 283; max = 358; for (int x = min; x<= max; x+) pacworld x221 = true; pacworld x213 = true; pacworld x204 = true; min = 120; max = 522; for (int x = min; x<= max; x+) pacworld x426 = true; pacworld x87 = true; min = 248; max = 394; for (int x = min; x<= max; x+) pacworld x257 = true; pacworld x171 = true; /为简明说明此处省略90%的边界代码图4-2绘制完成后就向其中加入实体:(计分板、空白填充、生命计数器、吃豆人、怪物)Position position = new Position();Score scorE = new Score();addObject(position,320,460);addObject(pacman,320,257);addObject(scorE,46,75);addObject(inky,283,210);addObject(blinky,320,171);addObject(pinky,320,217);addObject(clyde,358,210);addObject(blankL,75,214);addObject(blankR,575,214);addObject(life1,70,350);addObject(life2,45,350);addObject(life3,20,350);豆子的绘制(程序中放置在转角处)需要对通路进行统计,即CoinFill函数的square的计数:.在指定的区域放置大豆子,当吃到大豆子时所有的怪物立刻变为可以被吃掉的状态。注:在吃掉大豆子后吃豆人的标记run会变为true,意味着此时可以吃掉怪物,这个状态的持续时间定义为5秒。.在路口处放置小豆子.放置完豆子使其计数器加一public void CoinFill() coins = 0; for(int i = 0; i <pacworld.length; i+) for(int j = 0; j <pacworldi.length; j+) if(pacworld ij = true) int square = 1; if(pacworld i+1j = true) square+; else if(pacworld i-1j = true) square+; if(pacworld ij+1 = true) square+; else if(pacworld ij-1 = true) square+;: if(/*(i = 320 && j = 171) |*/ (i = 200 && j = 87) | (i = 442 && j = 87) | (i = 420 && j = 341) | (i = 224 && j = 341) addObject(new Power_Pellet(), i, j); coins+; else if(i >=283 && i <=358 && j >= 172 && j <= 221) coins = coins; else if(square > 2) addObject(new Coin(),i,j); coins+; c = coins;4.2 Animal类在Animal类中定义了用于子类继承的抽象方法,如:方向的移动、方向移动的提前量判断等,在该类中还设置了角色的场景移动传送方法,用于对游戏场景中部特殊的通道移动的定义。对于Ghost而言,他们的移动的范围要求比吃豆人更广提高难度,当他们从地图中央两侧的通道进入时,将会从另一侧出现。这种突然出现在身边的Ghost往往能提高玩家的紧张感,提升游戏性。protected void warp() positionX = this.getX(); positionY = this.getY(); if(positionX = 94) setLocation(550,213); else if(positionX = 556) setLocation(104,213);例如:当Ghost从右侧通道走出游戏场景时将会从左侧的通道重新出现在玩家的面前(如图4-3、图4-4所示)。图4-3图4-4在游戏中,总是会在一个方向上碰到无法继续前进的情况,这个时候就需要判断此时还能往哪个方向进行运动,时刻检查能否向四周运动,并根据这个方向来和键盘输入的方向键进行比较,来执行最终的动作方向。CheckD:用于检查你可以去往哪个方向private boolean checkD(char s) int x = 0, y = 0; switch(s) case 'u': y=-steps;break; case 'd': y=steps;break; case 'l': x=-steps;break; case 'r': x=steps;break; return PacWorld.pacworldgetX()+xgetY()+y;只有当判定可以往目标方向移动时,角色才可以进行移动protected void move(char direction) int x = 0,y = 0; if (direction = 'u' && checkD(direction) = true) y=-steps; if (direction = 'd' && checkD(direction) = true) y=steps; if (direction = 'l' && checkD(direction) = true) x=-steps; if (direction = 'r' && checkD(direction) = true) x=steps; this.setLocation(this.getX() + x, this.getY() + y);4.3 PacMan类private GreenfootImage Mopen = new GreenfootImage("open.png");private GreenfootImage Mclosed = new GreenfootImage("closed.png");定义吃豆人运动的两种状态图:开口和闭口,用于运动时变换显示。private void movePic() if (mCounter >= mChange) setImage(Mopen); if(mCounter = 2*mChange) mCounter = 0; else setImage(Mclosed);在类中,还需要专门设置一个用于标记吃豆人运动时图片的变化显示的量:private char d = 'l'定义初始运动向左,吃豆人的四个运动方向分别是:上(Up:u),下(Down:d),左(Left:l),右(Right:r)。如:(键盘点击方向键向上后,改变吃豆人的运动方向向上)if(Greenfoot.isKeyDown("up") setRotation(90); d = 'u'图4-5在获得了键盘输入的方向后,改变吃豆人的运动(位置、方向),这里还会对可能移动的方向先进行判断(判定是否可以朝目标方向移动)。(图4-5)private void corner(char side) for(int i = -7; i<=7;i+) int x = 0,y = 0; switch (side) case 'u': y = -1;x = i;break; case 'd': y = 1;x = i;break; case 'l': x = -1;y = i;break; case 'r': x = 1;y = i;break; if(PacWorld.pacworldgetX() + xgetY() + y = true) setLocation(getX() + x, getY() + y); 吃豆人在吃豆子时需要调用eat函数:当吃到小豆子时,移除当前接触到的小豆子并让分数加一;当吃到大豆子时,移除当前接触到的大豆子并让分数加五;当分数高于200且当前游戏中仍存有豆子时,怪物的速度提升(难度提升)。private void eat() if(isTouching(Coin.class) removeTouching(Coin.class); coinsCollected+; points+; if(isTouching(Power_Pellet.class) removeTouching(Power_Pellet.class); run = true; coinsCollected+; points += 5; if(coinsCollected = PacWorld.coins && PacWorld.coins != 0) if(points > 200 * Ghost.speed)Ghost.speed+; Greenfoot.setWorld(new PacWorld(l,points, Ghost.speed); 在游戏中,吃豆人难免会出现触碰到怪物而死亡的情况,这个时候就需要死亡函数在出生点重生,生命减一,并执行一次判断:当生命所剩为零时重置游戏。执行这个死亡函数的前提条件是吃豆人触碰到四个怪物中的任意

    注意事项

    本文(《java游戏大作业设计》.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开