电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

自-用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)

7页
  • 卖家[上传人]:熠***
  • 文档编号:193767589
  • 上传时间:2021-08-23
  • 文档格式:DOC
  • 文档大小:36KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、【文章标题】用面向对象的思想探讨游戏“魔兽争霸”()继承和多态的应用(修改版)【文章作者】曾健生【作者邮箱】【作者QQ】19067898【作者博客】【编程环境】K1.60_01【作者声明】欢迎转载文章,但转载请保留文章的完整性以及注明文章的出处。*在上一篇文章用面向对象的思想探讨游戏“魔兽争霸”(1)(详见本人博客, ),文中用面向对象的一个特性封装,初步实现了代码,正如在上文末尾讨论的一样,代码有相当多可改进的地方,本文将使用面向对象中另外两个特性继承和多态改进代码。仔细比较上篇文章中的弓箭手类Bwer和食尸鬼类Ght,可发现除了构造函数,移动的方法moeT,受到攻击时的方法getun外,其他的方法都是一样的。这时可把两个类中的相同的部分提炼出来写成一个父类Figer,把弓箭手类B和食尸鬼类Ghos继承于父类igter,根据子类和父类的关系:子类自动继承父类公有的属性和方法,并且子类可以在父类的基础上增加方法、覆盖方法,以增强、改进父类。所以就能很方便地实现代码的复用。另外我们观察食尸鬼类Ghost受到攻击时的方法getunt的定义:public vod gHunt( Bwr b )

      2、函数的传入参数为弓箭手类的对象,这样就会产生一个问题,如果食尸鬼类Gos不是被弓箭手攻击而是被女猎手攻击呢?难道要为每种情况单独写一个方法处理吗?现在可以利用面向对象中的多态的特性,用一个父类的引用指向一个子类的对象,就可以用父类调用子类的方法,这样做最大的好处就是遮避了不同的子类类型,只要子类是继承父类,调用各个子类的方法都可以用父类的方法调用代替。我们可以仔细比较上文用面向对象的思想探讨游戏“魔兽争霸”(1)中的弓箭手类和食尸鬼类Ghost可发现,除了移动方法move和受到攻击的方法etHunt外,其他方法的实现都是相同的。我们可把相同的属性和方法设计成一个抽象类Fighter,代码如下:/战士类,所有的士兵都继承于这个类bsra cass ighterprivate int posX; /战士在地图上X的坐标prvae int posY; /战士在地图上Y的坐标rivate int d;/战士在地图上Y的坐标rivat inlieNum; /战士的生命值prvat inattcu; /战士的攻击力riaein unteNu; /战士的防御力pubi Fihter(nt posX,

      3、 it posY, it id, int lifeNu, int attackNm,int untnNum) tis.osX poX;hspsY =posY;ti.id =i;this.liNu =lifeum;tsattacku = atckNum;thsuenu = nteNm;*一般来说,生命值,攻击力,防御力等都属于对象的核心数据,对它们的访问必须要严格控制,所以设计出geLfeum(),geAackNm(),gtUtNm()这三个方法/获取战士的剩余生命值ublic igetLfNum()eurn lifeNum;/设置战士的生命值pubic voi setLieNum( intm)leNm=num;/获取战士的攻击力pli intgtAttacNu()retr atackN;/获取战士的防御力puliit geUntnNu()reurn uteNum;/获取战士的号blc intged()retrn id;/获取战士的X坐标pubi int etPosX() rtr psX;ic void tPos(inposX) this.pos osX;获取战士的Y坐标lic inge

      4、tosY() etrn poY;pblivo setPosY(t sY) this.pY osY;/用战士攻击别人的方法,传入的参数为攻击的对象/附:本人感觉这个攻击行为抽象的设计非常差,如果有好的方法,/敬请指教publ oidttack( Figterhter )gtr.getHun( ti );/战士的移动行为,就是一般情况下用点击了/一个战士后命令战士移动到某个位置所用的方法/传入参数为要移动到的对象abstct publicvoid move( ghtefhter);/受到攻击时调用这个方法计算伤害值abtra publicvoid etHut( Fghter ghter );把弓箭手类Boe继承战士类Fighter,实现不同的移动方法moeTo和受到攻击的方法geHunt,代码如下:/这是一个弓箭手类s owerxedFighter/构造函数,生产一个弓箭手,传入参数为在地图中的坐标pulic Boer( int pos,itposY, in id,nt lifeNm,t attaNum,nt ntenNum)sr( posX,psY, i, ieum, ttaNm, ne

      5、Num );ystm.ou.rinln(弓箭手 +d生产完毕了);/弓箭手移动的行为,就是一般情况下用点击了/一个战士后命令战士移动到某个位置所用的方法/传入参数为要移动到的对象ubli vid mveTo(Fiteighter )setPoX( fighterPsX() );sePosY( fighter.getPosY() );System.out.pril( 弓箭手getd()+移动到地点 +getPoX()+,getPos() );/受到攻击时调用这个方法计算伤害值pbc odgeunt(Fghe igher )/只有在食尸鬼和弓箭手都没死亡的前提下会攻击f(ighter.geLifeum()0 & geLieNum()0 )/如果受到的攻击值大于自身的生命值表示对象死亡f((hter.getaku()-tntenNum()getLifeNum())stLfeNum( 0);Steou.prit(弓箭手+getId()+受到食尸鬼+fghter.gtId());Systeout.rit(的攻击力+fghter.getAttackNm();Stem.ou.priln(,弓箭手+g

      6、e()+死亡);else /用生命值减去受到的伤害值seLifeNu(geifeum()-(fighttAttackum()-getUnnNum()) );Sytm.ou.pint(弓箭手getI()+受到食尸鬼+igtergetI();Sytm.ot.print(的攻击力fihter.gettaku());Ssem.otritln(,剩余生命值为+eLifeN()); 我们简单分析一下其中一个多态的例子pui void oveo( ihte fighter )PX( fghte.geosX());setPosY( fighter.getPY() );ytem.out.pritln(弓箭手getId()+移动到地点+gtPsX()+,getPos());通常我们是这样调用这个方法的:o.veTo( g );/bo1为弓箭手的实例,gs为食尸鬼的实例由于食尸鬼类Ghost继承于战士类Fighter,根据多态的特点,在函数moeT()中的语句fghter gePoX()实际上执行的是食尸鬼类Ghot中的oveTo方法。本文全部多态都是用这个方法实现的,所以下面的代码如果用到同样的方法就不多解释了。把食尸鬼类Ghst继承战士类Figher,实现不同的移动方法mov和受到攻击的方法getHunt,代码如下:/这是一个食尸鬼类las Ghos extendFighe/构造函数,生产一个食尸鬼,传入参数为在地图中的坐标pblihost( int posX,inpos,int i,intlifeNum,int ttackNm,i unnNu )supe( ps, poY, id, lifeum, atakN, untenNum );Sstem.out.pintln(食尸鬼 +id生产完毕了);/食尸鬼移动的行为,就是一般情况下用点击了/一个战士后命令战士移动到某个位置所用的方法/传入参数为要移动到的对象ublc vid ovTo( Fhefighter )sePos(fhter.getosX();setsY(ige.gtPoY();ystm.outpntln( 食尸鬼+Id(

      《自-用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)》由会员熠***分享,可在线阅读,更多相关《自-用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.